Hola a todos. Paso de los 40, apenas había programado algunas líneas en Basic con un spectrum 48k hace ya el tiempo que hace, y aunque desde tiempo atrás ya me interese por leer manuales de c++ nunca me había puesto manos a la obra. Ahora que ha llegado el momento aprovechando la accesibilidad de Arduino me encuentro que me va como me va.
El tema, si me podéis dedicar 5 minutos, es que me he puesto como reto (hablar de proyecto es muy presuntuoso todavía) el actuar sobre una salida llevándola a nivel alto durante un tiempo dentro de un periodo de tiempo ya definido: t= 30 segundos ( t_HIGH = segundos y décimas que yo decida , t_LOW = t-t_HIGH)y volver a empezar.
Un lcd visualiza los caracteres para la entrada, un pulsador para hacer pasar el valor y un segundo pulsador para fijarlo.
El código es incompleto, ya lo se. Al llegar al final y fijar el ultimo dígito si lo haces volver a empezar se “pierde”, también lo se, pero son cosas que afrontare en su momento. Después de repetir el código un millón de veces utilizando un millón de combinaciones diferentes de los mecanismos de control que existen, este es el que mejor actúa como yo esperaba.
Ahora el problema es el siguiente:
1-¿Como consigo que al fijar un dígito y pasar al siguiente este empiece por cero? He probado y probado hasta desesperarme y no doy con ello. La variable rept debería llegar a 9 y volver a 0, ser de 10 valores posibles, pero al no empezar a 0 me acaba ocupando 2 dígitos del lcd y sobrescribiendo otro valor.
2- En el switch el valor de cada digito no me queda fijado a la variable tal como yo pretendo al hacer la asignación y por tanto no puedo calcular el tiempo.
Gracias a todos por vuestra atención, venga o no acompañada de sugerencias. Aquí esta el código
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);
// Los 2 botones
int buttonPin = 2;
int buttonPin_2 = 4;
// para button state change de cada boton
int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;
int buttonPushCounter_2 = 0;
int buttonState_2 = 0;
int lastButtonState_2 = 0;
int celda, rept; // para posición del dígito y valor que puede tener
int digit_01, digit_02, digit_03, digit_04; // El valor al que queda fijado cada dígito para calcular el tiempo
void setup() {
pinMode(buttonPin, INPUT);
pinMode(buttonPin_2, INPUT);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("'");
}
void loop()
{
buttonState = digitalRead(buttonPin);
buttonState_2 = digitalRead(buttonPin_2);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
buttonPushCounter++;
}
}
lastButtonState = buttonState;
if (buttonState_2 != lastButtonState_2) {
if (buttonState_2 == HIGH) {
buttonPushCounter_2++;
}
}
lastButtonState_2 = buttonState_2;
// Esto es prescindible 100%, es control visual de la actuación de los botones
lcd.setCursor(8,0);
lcd.print(buttonPushCounter);
lcd.setCursor(12,0);
lcd.print(buttonPushCounter_2);
// Vamos al lio
lcd.setCursor(celda,0);
lcd.print(buttonPushCounter);
if (buttonPushCounter == rept) {
buttonPushCounter = 0;}
switch (buttonPushCounter_2){
case 0:
celda = 0;
rept = 3;
break;
case 1:
digit_01 = buttonPushCounter;
celda = 1;
rept = 9;
break;
case 2:
digit_02 = buttonPushCounter;
celda = 3;
rept = 9;
break;
case 3:
digit_03 = buttonPushCounter;
celda = 4;
rept = 9;
break;
case 4:
digit_04 = buttonPushCounter;
buttonPushCounter_2 = 0;
break;
}}