This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 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
  Responder
#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]
  Responder
#3
Si podeis por favor probad a ponerlo o revisadlo Gracias
  Responder
#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
  Responder
#5
Cuantos me faltan?? si fueras tan amable
  Responder
#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]
  Responder
#7
No se como agradecérselo d verad. Me has ayudado con el sensor d temperatura y con esto.
  Responder
#8
Esto muestra q hay mucho q aprender
  Responder
#9
Oye ahora q me acuerdo tu sabes como hacer funcionar 2 shields a la vez ??
  Responder
#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.
  Responder
#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
  Responder
#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
  Responder
#13
Vale lo revisó después d cmer gracias
  Responder
#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
  Responder
#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
  Responder
#16
Lo q ocurre es q al poner el 1 o el 2 en el Monitor Serie es como si no lo recibiera
  Responder
#17
Ya encontré el problema y funciona muchas gracias
  Responder
#18
Me alegro!

Deja el error o el codigo que funciona, por si le vale a alguien mas Guiño
  Responder
#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);

}
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  [TUTO] Pantalla 150 Leds WS2812 cansi22 27 29,791 06-10-2019, 08:14 PM
Último mensaje: yomaker
  CONSULTA Controlar 3000 leds, ¿cual es la mejor opcion? the_feti 2 1,434 13-08-2018, 10:00 PM
Último mensaje: the_feti
  Controlar 8 leds 100 mA con Arduino y ULN2803 amjlopez 1 1,412 30-07-2018, 12:04 PM
Último mensaje: Bayaz
  led rgb tazma 3 1,721 06-05-2016, 03:46 PM
Último mensaje: WeSo
  Dimmer para tira de leds, problema ZeroCool 7 3,033 27-04-2016, 08:57 PM
Último mensaje: Bayaz