Buenas tardes, soy novato en este foro así que discupad algún error de forma al escribir este post. Bueno, el problema es que estoy haciendo un proyecto con servomotores y con dos pulsadores y un led RGB quería que al recibir corriente un pulsador al recibir un click sirviera para seleccionar el modo de funcionamiento (distintas velocidades 1,2,3) y el otro pulsador, sirviera para comenzar la actividad de los servos haciendo parpadear el led en función del modo con su color correspondiente (cada modo un color). Para acabar la actividad de los servos se vuelve a pulsar el pulsador 2. Tenía una función para el pulsador 1 con antirrebotes y que en una variable me guarda el "modo" pero no consigo compatibilizarla con la segunda para el parpadeo. Solo consigo que parpadeé si en uno de los modos el led está apagado lo que me quiere decir que la función 1 no deja de funcionar en ningún momento y los leds siempre van a estar encendidos. No se si a alguien se le ocurre alguna solución. Dejo por aquí el código. Un saludo
const int boton1 = 40;
const int boton2 = 42;
int anterior1;
int estado1;
int contador;
int pinR1=26;
int pinG1=24;
int pinB1=22;
unsigned long temporizador1;
unsigned long tiemporebote1 = 50;
bool estadoactual = false;
bool estadoanterior = false; //
bool inicio = false;
unsigned long tiempo_anterior = 0;
unsigned long intervalo = 500;
byte estado = 0;
void setup() {
Serial.begin(9600);
contador=1;
pinMode(boton1,INPUT);
pinMode(boton2,INPUT);
estado1 = HIGH;
anterior1 = HIGH;
pinMode(pinR1,OUTPUT);
pinMode(pinG1,OUTPUT);
pinMode(pinB1,OUTPUT);
}
void funcionboton1(){
if ( estado1==digitalRead(40) ) {
temporizador1 = 0;
}
else
if ( temporizador1 == 0 ) {
temporizador1 = millis();
}
else
if ( millis()-temporizador1 > tiemporebote1 ) {
estado1 = !estado1;
}
if ( anterior1==HIGH && estado1==LOW ) {
Serial.print(" Botón pulsado ");
Serial.print(contador);
contador=contador+1;
}
anterior1 = estado1;
if (contador==2){
digitalWrite(pinG1,HIGH);
digitalWrite(pinB1,LOW);
digitalWrite(pinR1,LOW);
}
else if (contador==3) {
digitalWrite(pinG1,LOW);
digitalWrite(pinB1,LOW);
digitalWrite(pinR1,HIGH);
}
else if (contador==4) {
digitalWrite(pinG1,HIGH);
digitalWrite(pinB1,LOW);
digitalWrite(pinR1,HIGH);
contador=1;
}
}
void funcionboton2(int cont){
estadoAC = digitalRead(boton2);
if (estadoactual && !estadoanterior)
inicio = ! inicio;
if (inicio) {
switch (estado) {
case 0: digitalWrite(pinG1, HIGH);
digitalWrite(pinR1, HIGH);
digitalWrite(pinB1, HIGH);
tiempo_anterior = millis();
estado = 1; //
break;
case 1: if (millis() - tiempo_anterior >= intervalo) {
digitalWrite(pinR1, LOW); //
digitalWrite(pinG1, LOW);
digitalWrite(pinB1, LOW);
tiempo_anterior = millis();
estado = 2;
}
break;
case 2: if (millis() - tiempo_anterior >= intervalo) {
estadoMaquina = 0;
}
break;
}
}
else
digitalWrite(pinG1, LOW);
digitalWrite(pinR1, LOW);
digitalWrite(pinB1, LOW);
estadoanterior = estadoactual;
}
void loop() {
funcionboton1();
funcionboton2(contador);
}