Hi everyone!
I have a problem and maybe someone can help me. The programm it's easy. The only thing that doesn't work is that when the software go to case 1, for example, keep all the outputs as high. I think that the variable contverde1 never decrease, and as a result of this the pin 8 never turn off. Maybe i have a problem with if and the conditions.
Thanks!
int contverde1;
int contverde2;
void setup() {
for (int pinNum=2; pinNum<8;pinNum++){
pinMode(pinNum, INPUT);} //Declaro como entradas pines de entrada del 2 al 7
for (int i=8; i<14;i++){
pinMode(i, OUTPUT); //Declaro como salidas pines de entrada del 8 al 13
}
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
analogWrite (A0,0);
contverde1=0;
contverde2=0;
}
void loop() {
int GetSemaforo = chequeo();
switch (GetSemaforo) {
case 0: //Verde 1
analogWrite (A0,0);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
contverde1= 18;
if (contverde1>0)
if (contverde1<19 && contverde1>=12){
//(Envio BT);
digitalWrite (8,HIGH);
digitalWrite (9,HIGH);
digitalWrite (10,HIGH);
contverde1--;
delay (1000);}
else if (contverde1<12 && contverde1>=6){
//(Envio BT);
digitalWrite (8,LOW);
contverde1--;
delay (1000);}
else if (contverde1<6 && contverde1>0){
//(Envio BT);
digitalWrite (9,LOW);
contverde1--;
delay (1000);}
if (contverde1=0)
//(Envio BT estado incierto);
digitalWrite (10,HIGH);
delay (1000);
break;
case 1: //Amarilla 1
analogWrite (A0,0);
contverde1=18;
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
//(Envio BT);
delay (1000);
break;
case 2: //Rojo 1
//(Envio BT);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
analogWrite (A0,0);
delay (250);
break;
case 3: //Verde 2
analogWrite (A0,0);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
contverde2=18;
if (contverde2>0)
if (contverde2<19 && contverde2>=12){
//(Envio BT);
digitalWrite (11,HIGH);
digitalWrite (12,HIGH);
digitalWrite (13,HIGH);
contverde2--;
delay (1000);}
else if(contverde2<12 && contverde2>=6){
//(Envio BT);
digitalWrite (11,LOW);
contverde2--;
delay (1000);}
else if (contverde1<6 && contverde1>0){
//(Envio BT)
digitalWrite (12,LOW);
contverde2--;
delay (1000);}
if (contverde2=0)
//(Envio BT estado incierto);
digitalWrite (13,HIGH);
delay (1000);
break;
case 4: //Amarilla 2
analogWrite (A0,0);
contverde2=18;
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
//(Envio BT);
delay (1000);
break;
default:
//(Envio BT);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
analogWrite(A0,255);
}
delay(1);
}
int chequeo(){
while (digitalRead(2)== HIGH && digitalRead(3)== LOW && digitalRead(4)== LOW && digitalRead(5)== LOW && digitalRead(6)== LOW && digitalRead(7)== HIGH) // Verde S1
{
return 0;
}
while (digitalRead(2)== LOW && digitalRead(3)== HIGH && digitalRead(4)== LOW && digitalRead(5)== LOW && digitalRead(6)== LOW && digitalRead(7)== HIGH) //Amarilla S1
{
return 1;
}
while (digitalRead(2)== LOW && digitalRead(3)== LOW && digitalRead(4)== HIGH && digitalRead(5)== LOW && digitalRead(6)== LOW && digitalRead(7)== HIGH) //Roja S1
{
return 2;
}
while (digitalRead(2)== LOW && digitalRead(3)== LOW && digitalRead(4)== HIGH && digitalRead(5)== HIGH && digitalRead(6)== LOW && digitalRead(7)== LOW) // Verde S2
{
return 3;
}
while (digitalRead(2)== LOW && digitalRead(3)== LOW && digitalRead(4)== HIGH && digitalRead(5)== LOW && digitalRead(6)== HIGH && digitalRead(7)== LOW) //Amarilla S2
{
return 4;
}
}