Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Piedra papel o tijeras con leds RGB
#1
Hola buenos días, estoy trabajando con una arduino uno. Me podrían ayudar a corregir mis errores en el programa y a echarme una mano por favor.
El circuito es fácil ya lo tengo montado el único problema es el programa. Muchas gracias de antemano
Citar
#2
El programa con el que trabajo es así aunque me pone error de compilación:

[spoiler]
Código:
// Definimos constantes para el primer led RGB
#define led1Rojo 3
#define led1Verde 5
#define led1Azul 6

// Definimos constantes para el segundo led RGB
#define led2Rojo 9
#define led2Verde 10
#define led2Azul 11

// Almacena el valor de nuestra elección
char MiOpcion;

// Almacena el valor de la elección de Arduino
int respuesta Arduino;
void setup(){

// Estableciendo puertos como salida para el primer led RGB
pinMode(led1Rojo, OUTPUT);
pinMode(led1Verde, OUTPUT);
pinMode(led1Azul, OUTPUT);

// Estableciendo puertos como salida para el segundo led RGB
pinMode(led2Rojo, OUTPUT);
pinMode(led2Verde, OUTPUT);
pinMode(led2Azul, OUTPUT);

// Inicia la conexión serial a una velocidad de 9600 bits por segundo
Serial.begin(9600);
//Imprime en pantalla los siguientes mensajes
Serial.println("Arduino te da la bienvenida listo para jugar, empecemos!!");
Serial.println("Introduce 0 para elegir piedra, 1 para papel o 2 para tijera");

}
void loop(){ // Inicio loop()

//Verifica si hay datos disponibles para leer
if(Serial.available() > 0){

// Lee el dato entrante y lo asigna a variable MiOpción
MiOpcion = Serial.read();
Serial.println("");

if(MiOpcion == '0'){ // Código para piedra

Serial.println("Has elegido piedra");
verMiOpcion(1, 0, 0);

respuestaArduino = opcionArduino();

// Realiza una espera de 1 segundos antes de mostrar al ganador
delay(2000);
Serial.println("");

if(respuestaArduino == 0) {
Serial.println("Has sido un empate ninguno gana!!");
}

if(respuestaArduino == 1) {
Serial.println("El papel cubre la piedra arduino gana!!");
verMiOpcion(0, 0, 0); // perdedor
verOpcionArduino(255, 255, 255); //ganador
}
if(respuestaArduino == 2) {
Serial.println("La piedra rompe las tijeras tu ganas!!");
verMiOpcion(1, 1, 1); // ganador
verOpcionArduino(0, 0, 0); // perdedor
}
}
} // Fin del Código piedra

// Espacio para el código papel
{

//Verifica si hay datos disponibles para leer
if(Serial.available() > 1){

// Lee el dato entrante y lo asigna a variable MiOpción
MiOpcion = Serial.read();
Serial.println("");

if(MiOpcion == '1'){ // Código para papel

Serial.println("Has elegido papel");
verMiOpcion(0, 1, 0);

respuestaArduino = opcionArduino();

// Realiza una espera de 1 segundos antes de mostrar al ganador
delay(2000);
Serial.println("");

if(respuestaArduino == 1) {
Serial.println("Has sido un empate ninguno gana!!");
}

if(respuestaArduino == 2) {
Serial.println("Tijeras cortan papel arduino gana!!");
verMiOpcion(0, 0, 0); // perdedor
verOpcionArduino(255, 255, 255); //ganador
}
if(respuestaArduino == 0) {
Serial.println("Papel cubre piedra tu ganas!!");
verMiOpcion(1, 1, 1); // ganador
verOpcionArduino(0, 0, 0); // perdedor
}
}
}
}
} // Fin del Código papel


// Espacio para el código tijera
{

//Verifica si hay datos disponibles para leer
if(Serial.available() > 2){

// Lee el dato entrante y lo asigna a variable MiOpción
MiOpcion = Serial.read();
Serial.println("");

if(MiOpcion == '2'){ // Código para papel

Serial.println("Has elegido piedra");
verMiOpcion(, 0, 1);

respuestaArduino = opcionArduino();

// Realiza una espera de 1 segundos antes de mostrar al ganador
delay(2000);
Serial.println("");

if(respuestaArduino == 2) {
Serial.println("Has sido un empate ninguno gana!!");
}

if(respuestaArduino == 1) {
Serial.println("Piedra rompe tijeras arduino gana!!");
verMiOpcion(0, 0, 0); // perdedor
verOpcionArduino(255, 255, 255); //ganador
}
if(respuestaArduino == 2) {
Serial.println("Tijeras cortan papel tu ganas!!");
verMiOpcion(1, 1, 1); // ganador
verOpcionArduino(0, 0, 0); // perdedor
}
}
}
}
} // Fin del Código tijeras


}
}
void verMiOpcion(int Rojo, int Verde, int Azul){

digitalWrite(led1Rojo, Rojo);
digitalWrite(led1Verde, Verde);
digitalWrite(led1Azul, Azul);


}
int opcionArduino(){

int aleatorio = random(0,2);

if(aleatorio == 0){
Serial.println("Arduino ha elegido piedra");
verOpcionArduino(255,0,0);
}

if(aleatorio == 1){
Serial.println("Arduino ha elegido papel");
verOpcionArduino(0,255,0);
}

if(aleatorio == 2){
Serial.println("Arduino ha elegido tijera");
verOpcionArduino(0,0,255);
}

// esta función devuelve la elección de arduino
// esta es asignada la variable respuestaArduino
return aleatorio;

}
void verOpcionArduino(int Rojo, int Verde, int Azul){

analogWrite(led2Rojo, Rojo);
analogWrite(led2Verde, Verde);
analogWrite(led2Azul, Azul);

}
[/spoiler]
Citar
#3
Si podeis por favor probad a ponerlo o revisadlo Gracias
Citar
#4
tienes mal una definicion, esta con espacio

"// Almacena el valor de la elección de Arduino
int respuesta Arduino;"

Cuando arreglas eso, faltan los corchetes de la parte // Espacio para el código tijera
Citar
#5
Cuantos me faltan?? si fueras tan amable
Citar
#6
Mira bien los resultados, ya que tuve que modificar el del apartado tijera, ya que faltaba una variable. Comprueba la que tiene que ir, pero ya compila. Tenías un lío curioso con los corchetes.... xD

Esta parte es a revisar:

"if(MiOpcion == '2'){ // Código para papel

Serial.println("Has elegido piedra");
verMiOpcion(, 0, 1);"


Y este el código que ya compila

[spoiler]
Código:
<----------------------------------------------------->

// Definimos constantes para el primer led RGB
#define led1Rojo 3
#define led1Verde 5
#define led1Azul 6

// Definimos constantes para el segundo led RGB
#define led2Rojo 9
#define led2Verde 10
#define led2Azul 11

// Almacena el valor de nuestra elección
char MiOpcion;

// Almacena el valor de la elección de Arduino
int respuestaArduino;
void setup(){

// Estableciendo puertos como salida para el primer led RGB
pinMode(led1Rojo, OUTPUT);
pinMode(led1Verde, OUTPUT);
pinMode(led1Azul, OUTPUT);

// Estableciendo puertos como salida para el segundo led RGB
pinMode(led2Rojo, OUTPUT);
pinMode(led2Verde, OUTPUT);
pinMode(led2Azul, OUTPUT);

// Inicia la conexión serial a una velocidad de 9600 bits por segundo
Serial.begin(9600);
//Imprime en pantalla los siguientes mensajes
Serial.println("Arduino te da la bienvenida listo para jugar, empecemos!!");
Serial.println("Introduce 0 para elegir piedra, 1 para papel o 2 para tijera");

}
void loop(){ // Inicio loop()

//Verifica si hay datos disponibles para leer
if(Serial.available() > 0){

// Lee el dato entrante y lo asigna a variable MiOpción
MiOpcion = Serial.read();
Serial.println("");

if(MiOpcion == '0'){ // Código para piedra

Serial.println("Has elegido piedra");
verMiOpcion(1, 0, 0);

respuestaArduino = opcionArduino();

// Realiza una espera de 1 segundos antes de mostrar al ganador
delay(2000);
Serial.println("");

if(respuestaArduino == 0) {
Serial.println("Has sido un empate ninguno gana!!");
}

if(respuestaArduino == 1) {
Serial.println("El papel cubre la piedra arduino gana!!");
verMiOpcion(0, 0, 0); // perdedor
verOpcionArduino(255, 255, 255); //ganador
}
if(respuestaArduino == 2) {
Serial.println("La piedra rompe las tijeras tu ganas!!");
verMiOpcion(1, 1, 1); // ganador
verOpcionArduino(0, 0, 0); // perdedor
}
}
} // Fin del Código piedra

// Espacio para el código papel
{

//Verifica si hay datos disponibles para leer
if(Serial.available() > 1){

// Lee el dato entrante y lo asigna a variable MiOpción
MiOpcion = Serial.read();
Serial.println("");

if(MiOpcion == '1'){ // Código para papel

Serial.println("Has elegido papel");
verMiOpcion(0, 1, 0);

respuestaArduino = opcionArduino();

// Realiza una espera de 1 segundos antes de mostrar al ganador
delay(2000);
Serial.println("");

if(respuestaArduino == 1) {
Serial.println("Has sido un empate ninguno gana!!");
}

if(respuestaArduino == 2) {
Serial.println("Tijeras cortan papel arduino gana!!");
verMiOpcion(0, 0, 0); // perdedor
verOpcionArduino(255, 255, 255); //ganador
}
if(respuestaArduino == 0) {
Serial.println("Papel cubre piedra tu ganas!!");
verMiOpcion(1, 1, 1); // ganador
verOpcionArduino(0, 0, 0); // perdedor
}
}
}
}
// Fin del Código papel


// Espacio para el código tijera
{

//Verifica si hay datos disponibles para leer
if(Serial.available() > 2){

// Lee el dato entrante y lo asigna a variable MiOpción
MiOpcion = Serial.read();
Serial.println("");

if(MiOpcion == '2'){ // Código para papel

Serial.println("Has elegido piedra");
verMiOpcion(0, 0, 1);

respuestaArduino = opcionArduino();

// Realiza una espera de 1 segundos antes de mostrar al ganador
delay(2000);
Serial.println("");

if(respuestaArduino == 2) {
Serial.println("Has sido un empate ninguno gana!!");
}

if(respuestaArduino == 1) {
Serial.println("Piedra rompe tijeras arduino gana!!");
verMiOpcion(0, 0, 0); // perdedor
verOpcionArduino(255, 255, 255); //ganador
}
if(respuestaArduino == 2) {
Serial.println("Tijeras cortan papel tu ganas!!");
verMiOpcion(1, 1, 1); // ganador
verOpcionArduino(0, 0, 0); // perdedor
}
}
}
}
} // Fin del Código tijeras


void verMiOpcion(int Rojo, int Verde, int Azul){

digitalWrite(led1Rojo, Rojo);
digitalWrite(led1Verde, Verde);
digitalWrite(led1Azul, Azul);


}
int opcionArduino(){

int aleatorio = random(0,2);

if(aleatorio == 0){
Serial.println("Arduino ha elegido piedra");
verOpcionArduino(255,0,0);
}

if(aleatorio == 1){
Serial.println("Arduino ha elegido papel");
verOpcionArduino(0,255,0);
}

if(aleatorio == 2){
Serial.println("Arduino ha elegido tijera");
verOpcionArduino(0,0,255);
}

// esta función devuelve la elección de arduino
// esta es asignada la variable respuestaArduino
return aleatorio;

}
void verOpcionArduino(int Rojo, int Verde, int Azul){

analogWrite(led2Rojo, Rojo);
analogWrite(led2Verde, Verde);
analogWrite(led2Azul, Azul);

}
[/spoiler]
Citar
#7
No se como agradecérselo d verad. Me has ayudado con el sensor d temperatura y con esto.
Citar
#8
Esto muestra q hay mucho q aprender
Citar
#9
Oye ahora q me acuerdo tu sabes como hacer funcionar 2 shields a la vez ??
Citar
#10
Nada hombre! para eso estamos Guiño


Salu2!

PD: depende mucho de las shields. Las hay compatibles directamente, otras que son compatibles si cambias algún pin, y otras que son incompatibles por usar pines fijos. Hay que ver cada caso en concreto.
Citar
#11
Perdona pero al meter el papel o las tijeras no aparece nada. Me sabrías decir porque es por favor. Vale gracias trabajaré en ello Gran sonrisa
Citar
#12
Prueba a revisar el código con un editor que te coloree el código, por ej sublime text

http://hackaday.com/2014/04/20/sublime-t...duino-ide/

Cerré todo rápido, pero puede que aunque compile tenga algún error mas.

Si no encuentras el fallo, cuando tenga un momento lo revisamos Guiño
Citar
#13
Vale lo revisó después d cmer gracias
Citar
#14
Sobre lo del fallo copie y pegue tu código para comparar se ven varias cosas distintas pero parece q parten d la misma base
Citar
#15
El link muestra dos plataformas mediante las cuales se puede hacer una IDE arduino,donde podría estar la respuesta al problema es q me llamaras torpe pero no lo he encontrado ppor esa página
Citar
#16
Lo q ocurre es q al poner el 1 o el 2 en el Monitor Serie es como si no lo recibiera
Citar
#17
Ya encontré el problema y funciona muchas gracias
Citar
#18
Me alegro!

Deja el error o el codigo que funciona, por si le vale a alguien mas Guiño
Citar
#19
// Definimos constantes para el primer led RGB
#define led1Rojo 3
#define led1Verde 5
#define led1Azul 6

// Definimos constantes para el segundo led RGB
#define led2Rojo 9
#define led2Verde 10
#define led2Azul 11

// Almacena el valor de nuestra elección
char MiOpcion;

// Almacena el valor de la elección de Arduino
int respuestaArduino;


void setup(){ // Inicio setup()

// Estableciendo puertos como salida para el primer led RGB
pinMode(led1Rojo, OUTPUT);
pinMode(led1Verde, OUTPUT);
pinMode(led1Azul, OUTPUT);

// Estableciendo puertos como salida para el segundo led RGB
pinMode(led2Rojo, OUTPUT);
pinMode(led2Verde, OUTPUT);
pinMode(led2Azul, OUTPUT);

// Inicia la conexión serial a una velocidad de 9600 bits por segundo
Serial.begin(9600);
//Imprime en pantalla los siguientes mensajes
Serial.println("Arduino te da la bienvenida listo para jugar, empecemos!!");
Serial.println("Introduce 0 para elegir piedra, 1 para papel o 2 para tijera");

}// Fin setup()


void loop(){ // Inicio loop()

//Verifica si hay datos disponibles para leer
if(Serial.available() > 0){

// Lee el dato entrante y lo asigna a variable MiOpción
MiOpcion = Serial.read();
Serial.println("");

if(MiOpcion == '0'){ // Código para piedra

Serial.println("Has elegido piedra");
verMiOpcion(1, 0, 0);

respuestaArduino = opcionArduino();

// Realiza una espera de 1 segundos antes de mostrar al ganador
delay(2000);
Serial.println("");

if(respuestaArduino == 0) {
Serial.println("Has sido un empate ninguno gana!!");
}

if(respuestaArduino == 1) {
Serial.println("El papel cubre la piedra arduino gana!!");
verMiOpcion(0, 0, 0); // perdedor
verOpcionArduino(255, 255, 255); //ganador
}
if(respuestaArduino == 2) {
Serial.println("La piedra rompe las tijeras tu ganas!!");
verMiOpcion(1, 1, 1); // ganador
verOpcionArduino(0, 0, 0); // perdedor
}

} // Fin del Código piedra

// Espacio para el código papel
// Espacio para el código tijera

} // Fin de la verificación

} // Fin loop()


void verMiOpcion(int Rojo, int Verde, int Azul){

digitalWrite(led1Rojo, Rojo);
digitalWrite(led1Verde, Verde);
digitalWrite(led1Azul, Azul);

}

int opcionArduino(){

int aleatorio = random(0,2);

if(aleatorio == 0){
Serial.println("Arduino ha elegido piedra");
verOpcionArduino(255,0,0);
}

if(aleatorio == 1){
Serial.println("Arduino ha elegido papel");
verOpcionArduino(0,255,0);
}

if(aleatorio == 2){
Serial.println("Arduino ha elegido tijera");
verOpcionArduino(0,0,255);
}

// esta función devuelve la elección de arduino
// esta es asignada la variable respuestaArduino
return aleatorio;

}

void verOpcionArduino(int Rojo, int Verde, int Azul){

analogWrite(led2Rojo, Rojo);
analogWrite(led2Verde, Verde);
analogWrite(led2Azul, Azul);

}





Y este es el que he hecho yo (ESTE SÍ QUE LO PUEDES COPIAR) : EmojiEmojiEmojiEmoji




//Gracias a la página http://www.cristalab.com/tutoriales/prog...-c114067l/
//Sirve bastante, pues solo te da el código para piedra y los otros los tienes que hacer tú, lo que te permite aprender.
//Hay que hacer algunos/bastantes ajustes a partir del código de la página.
//0=PIEDRA=ROJO
//1=PAPEL=VERDE
//2=TIJERAS=AZUL


// Definimos constantes para el primer led RGB
#define led1Rojo 3
#define led1Verde 5
#define led1Azul 6

// Definimos constantes para el segundo led RGB
#define led2Rojo 9
#define led2Verde 10
#define led2Azul 11

// Almacena el valor de nuestra elección
char MiOpcion;

// Almacena el valor de la elección de Arduino
int respuestaArduino;


void setup(){ // Inicio setup()

// Estableciendo puertos como salida para el primer led RGB
pinMode(led1Rojo, OUTPUT);
pinMode(led1Verde, OUTPUT);
pinMode(led1Azul, OUTPUT);

// Estableciendo puertos como salida para el segundo led RGB
pinMode(led2Rojo, OUTPUT);
pinMode(led2Verde, OUTPUT);
pinMode(led2Azul, OUTPUT);

// Inicia la conexión serial a una velocidad de 9600 bits por segundo
Serial.begin(9600);
//Imprime en pantalla los siguientes mensajes
Serial.println("Arduino te da la bienvenida listo para jugar, empecemos!!");
Serial.println("Introduce 0 para elegir piedra, 1 para papel o 2 para tijera");

}// Fin setup()


void loop(){ // Inicio loop()

//Verifica si hay datos disponibles para leer
if(Serial.available() > 0){

// Lee el dato entrante y lo asigna a variable MiOpción
MiOpcion = Serial.read();
Serial.println("");

if(MiOpcion == '0'){ // Código para piedra

Serial.println("Has elegido piedra");
verMiOpcion(255, 0, 0);

respuestaArduino = opcionArduino();

// Realiza una espera de 1 segundos antes de mostrar al ganador
delay(2000);
Serial.println("");

if(respuestaArduino == 0) {
Serial.println("Has sido un empate ninguno gana!!");
}

if(respuestaArduino == 1) {
Serial.println("El papel cubre la piedra arduino gana!!");
verMiOpcion(0, 0, 0); // perdedor
verOpcionArduino(255, 255, 255); //ganador
}
if(respuestaArduino == 2) {
Serial.println("La piedra rompe las tijeras tu ganas!!");
verMiOpcion(255,255,255); // ganador
verOpcionArduino(0, 0, 0); // perdedor
}

} // Fin del Código piedra

if(MiOpcion == '1'){// Espacio para el código papel

Serial.println("Has elegido papel");
verMiOpcion(0,255,0);

respuestaArduino=opcionArduino();

//Realiza una espera de 2s. antes de mostrar al ganador
delay(2000);
Serial.println("");

if(respuestaArduino == 0){
Serial.println("El papel cubre a la piedra.Tu ganas!");
verMiOpcion(255,255,255); //ganador
verOpcionArduino(0,0,0); //perdedor
}

if(respuestaArduino == 1){
Serial.println("Ha sido un empate.Ninguno gana!");
}

if(respuestaArduino == 2){
Serial.println("Las tijeras cortan papel.Arduino gana!");
verMiOpcion(0,0,0); //perdedor
verOpcionArduino(255,255,255); //ganador
}
} // Fin del Código para papel

if(MiOpcion == '2'){// Espacio para el código tijera

Serial.println("Has elegido tijeras");
verMiOpcion(0,0,255);

respuestaArduino=opcionArduino();

//Realiza una espera de 2s. antes de mostrar al ganador
delay(2000);
Serial.println("");

if(respuestaArduino == 0){
Serial.println("La piedra rompe las tijeras.Arduino gana!");
verMiOpcion(0,0,0); //perdedor
verOpcionArduino(255,255,255); //ganador
}

if(respuestaArduino == 1){
Serial.println("Las tijeras cortan el papel.Tu ganas!");
verMiOpcion(255,255,255); //ganador
verOpcionArduino(0,0,0); //perdedor
}

if(respuestaArduino == 2){
Serial.println("Ha sido un empate.Ninguno gana!");
}

} //Fin del código para papel

} // Fin de la verificación

} // Fin loop()


void verMiOpcion(int Rojo, int Verde, int Azul){

analogWrite(led1Rojo, 255-Rojo);
analogWrite(led1Verde, 255-Verde);
analogWrite(led1Azul, 255-Azul);

}

int opcionArduino(){

int aleatorio = random(0,3); //int aleatorio = random(min,max)
//int aleatorio = random(0,300)
//elegirá un número entre 0 y 300,
//es decir 0,1,2....297,298 y 299
//NO ELEGIRÁ EL 300
if(aleatorio == 0){
Serial.println("Arduino ha elegido piedra");
verOpcionArduino(255,0,0);
}

if(aleatorio == 1){
Serial.println("Arduino ha elegido papel");
verOpcionArduino(0,255,0);
}

if(aleatorio == 2){
Serial.println("Arduino ha elegido tijera");
verOpcionArduino(0,0,255);
}

// esta función devuelve la elección de arduino
// esta es asignada la variable respuestaArduino
return aleatorio;

}

void verOpcionArduino(int Rojo, int Verde, int Azul){

analogWrite(led2Rojo, 255-Rojo);
analogWrite(led2Verde, 255-Verde);
analogWrite(led2Azul, 255-Azul);

}
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  CONSULTA Controlar 3000 leds, ¿cual es la mejor opcion? the_feti 2 207 13-08-2018, 10:00 PM
Último mensaje: the_feti
  Controlar 8 leds 100 mA con Arduino y ULN2803 amjlopez 1 141 30-07-2018, 12:04 PM
Último mensaje: Bayaz
  [TUTO] Pantalla 150 Leds WS2812 cansi22 26 15,666 26-05-2017, 05:14 PM
Último mensaje: foekohei
  Dimmer para tira de leds, problema ZeroCool 7 1,206 27-04-2016, 08:57 PM
Último mensaje: Bayaz
  Leds ws2801 y alimentar arduino uno joseab 1 2,074 27-07-2015, 08:53 AM
Último mensaje: biketrial981