Hola a todos.
Situación: Estoy realizando un contador para un juego de cartas (MTG) el cual debe expresar en un display SSD1306 dos campos (dos valores independientes) los cuales variaran según las pulsaciones de dos grupos de pulsadores -valga la redundancia-.
Uno de los campos tiene como condición que sus valores oscilen entre 0 y 99 y el segundo campo tiene como condición que sus valores oscilen entre 0 y 10.
Ambos campos se tienen que mostrar en simultaneo en el display y no pueden alterarse entre ellos.
Aviso: Soy super novato con Arduino, literalmente hace dos días vengo buscando información y modificando ejemplos de códigos para lograr algo parecido a lo que quiero.
Problemas:
1: Arduino me tira error al configurar el segundo campo (el de 0 a 10). El programa da a entender el siguiente problema: >>'estVenActual' does not name a type<<
en este caso incorporé dos "bool" para guardar el valor del estado logico anterior del pulsador, pero me causa conflicto. Sera que no es necesario dos pares de bool?
2: No se como imprimir en pantalla ambos campos simultáneamente.
Agradezco cualquier ayuda en mi aprendizaje.
Desde ya muchas gracias.
#include <Adafruit_SSD1306.h> // libreria para controlador SSD1306
//------- pantalla
#define ANCHO 128 // reemplaza ocurrencia de ANCHO por 128
#define ALTO 64 // reemplaza ocurrencia de ALTO por 64
//------- configuracion reset
#define OLED_RESET -1 // necesario por la libreria pero no usado. -1 porque tiene boton
Adafruit_SSD1306 oled(ANCHO, ALTO, &Wire, OLED_RESET); // crea objeto
//------- Declaraciones vida
int valor_actual = -1; // valor inicial -1 para inicializar antes de contar
int pulsador = 4; // pin en donde se conecta el pulsador
int despulsador = 3; // pin en donde se conecta el pulsador
//------- Declaraciones veneno
int valor_actual_veneno = -1; // valor inicial -1 para inicializar antes de contar
int pulsador_veneno = 6; // pin en donde se conecta el pulsador
int pulsador_veneno_negativo = 5; // pin en donde se conecta el pulsador
//vida
bool estPulActual = 1; // variable donde se guarda el estado logico actual del pulsador
bool estPulAnterior = 1; // variable donde se guarda el estado logico anterior del pulsador
//veneno
bool estVenActual = 1; // variable donde se guarda el estado logico actual del pulsador
bool estVenAnterior = 1; // variable donde se guarda el estado logico anterior del pulsador
//----------- comienzo setup
void setup() {
pinMode(pulsador, INPUT_PULLUP); //el pin pulsador es asignado como entrada
pinMode(despulsador, INPUT_PULLUP); //el pin pulsador es asignado como entrada
pinMode(pulsador_veneno, INPUT_PULLUP); //el pin pulsador es asignado como entrada
pinMode(pulsador_veneno_negativo, INPUT_PULLUP); //el pin pulsador es asignado como entrada
delay(100); // se da una espera de 100ms para que el display inicie correctamente
Wire.begin(); // inicializa bus I2C
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C); // inicializa pantalla con direccion 0x3C
oled.setRotation(0); // se escoje la orientacion del display puede ser 0, 1, 2 o 3
oled.setTextColor(WHITE); // se le dice a la pantalla que el texto que se va a desplegar es en color blanco
oled.dim(false); //dejamos el brillo en maximo
}
void loop() {
//.........................................VIDA.....................................................................................
//SUMA vida
estPulActual = digitalRead(pulsador); //se lee el valor logico del pin de entraday se guarda en la variable estPulActual
if ((estPulAnterior == 1 && estPulActual == 0) || valor_actual == -1) { //valida si el pulsador ha cambiado de 1 a 0 ó si el contador esta en -1
valor_actual++; // suma 1 al valor de la variable contador
if (valor_actual > 99) { // si el contador supera 99
valor_actual = 0; // devuelve el contador a 0
}
oled.clearDisplay(); // limpia pantalla
oled.drawRect(0, 17, 30, 30, WHITE); // dibuja rectangulo X, Y, Pixel de alto , Pixel de ancho
oled.setCursor(3, 25); // ubica cursor en coordenadas 15,32
oled.setTextSize(2); // establece tamano de texto en 2
oled.setTextColor(WHITE); // establece color al unico disponible (pantalla monocromo)
oled.print(valor_actual); // escribe texto
oled.display(); // muestra en pantalla todo lo establecido anteriormente
}
delay(20); //pausa de 20 milisegundos
estPulAnterior = estPulActual; //el valor booleano actual del contador ya fue procesado asi que se guarda en la variable estPulAnterior
//RESTA vida
estPulActual = digitalRead(despulsador); //se lee el valor logico del pin de entraday se guarda en la variable estPulActual
if ((estPulAnterior == 1 && estPulActual == 0) || valor_actual == -1) { //valida si el pulsador ha cambiado de 1 a 0 ó si el contador esta en -1
valor_actual--; // resta 1 al valor de la variable contador
if (valor_actual < 0) { // si el contador supera 99
valor_actual = 99; // devuelve el contador a 0
}
oled.clearDisplay(); // limpia pantalla
oled.drawRect(0, 17, 30, 30, WHITE); // dibuja rectangulo X, Y, Pixel de alto , Pixel de ancho
oled.setCursor(3, 25); // ubica cursor en coordenadas 15,32
oled.setTextSize(2); // establece tamano de texto en 2
oled.setTextColor(WHITE); // establece color al unico disponible (pantalla monocromo)
oled.print(valor_actual); // escribe texto
oled.display(); // muestra en pantalla todo lo establecido anteriormente
}
delay(20); //pausa de 20 milisegundos
estPulAnterior = estPulActual; //el valor booleano actual del contador ya fue procesado asi que se guarda en la variable estPulAnterior
}
//.................................................................Final VIDA................................................................
//..................................................................VENENO.....................................................
//SUMA veneno
estVenActual = digitalRead(pulsador_veneno); //se lee el valor logico del pin de entraday se guarda en la variable estVenActual
if ((estVenAnterior == 1 && estVenActual == 0) || valor_actual_veneno == -1) { //valida si el pulsador ha cambiado de 1 a 0 ó si el contador esta en -1
valor_actual_veneno++; // suma 1 al valor de la variable contador
if (valor_actual_veneno > 10) { // si el contador supera 10
valor_actual_veneno = 0; // devuelve el contador a 0
}
oled.clearDisplay(); // limpia pantalla
oled.drawRect(31, 17, 30, 30, WHITE); // dibuja rectangulo X, Y, Pixel de alto , Pixel de ancho
oled.setCursor(34, 25); // ubica cursor en coordenadas 34,25
oled.setTextSize(2); // establece tamano de texto en 2
oled.setTextColor(WHITE); // establece color al unico disponible (pantalla monocromo)
oled.print(valor_actual_veneno); // escribe texto
oled.display(); // muestra en pantalla todo lo establecido anteriormente
}
delay(20); //pausa de 20 milisegundos
estVenAnterior = estVenActual; //el valor booleano actual del contador ya fue procesado asi que se guarda en la variable estVenAnterior
//RESTA veneno
estVenActual = digitalRead(pulsador_veneno_negativo); //se lee el valor logico del pin de entraday se guarda en la variable estVenActual
if ((estVenAnterior == 1 && estVenActual == 0) || valor_actual_veneno == -1) { //valida si el pulsador ha cambiado de 1 a 0 ó si el contador esta en -1
valor_actual_veneno--; // resta 1 al valor de la variable contador
if (valor_actual_veneno < 0) { // si el contador menor a 0
valor_actual_veneno = 10; // devuelve el contador a 10
}
oled.clearDisplay(); // limpia pantalla
oled.drawRect(31, 17, 30, 30, WHITE); // dibuja rectangulo X, Y, Pixel de alto , Pixel de ancho
oled.setCursor(34, 25); // ubica cursor en coordenadas 34,25
oled.setTextSize(2); // establece tamano de texto en 2
oled.setTextColor(WHITE); // establece color al unico disponible (pantalla monocromo)
oled.print(valor_actual_veneno); // escribe texto
oled.display(); // muestra en pantalla todo lo establecido anteriormente
}
delay(20); //pausa de 20 milisegundos
estVenAnterior = estVenActual; //el valor booleano actual del contador ya fue procesado asi que se guarda en la variable estPulAnterior
}
//..................................................................VENENO final..................................................................


