Guarda i commenti interni al codice.
La millis è implementata male.
unsigned long A;
unsigned long B;
unsigned long C;
unsigned long D;
unsigned long on1 = 1000;
unsigned long off1 = 1000;
unsigned long on2 = 2000;
unsigned long off2 = 5000;
int P1 = 0;
int PAUT = 0;
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(12, INPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, INPUT);
// manca lo stato iniziale dei pin 2,3,4,8,9 e 10.
// sono HIGH o LOW?
// perche non aggiungi la seriale per capire cosaa fa il programma?
}
void loop()
{
if (digitalRead(11) == HIGH) // controlla i collegamenti ed eventualmente metti un pull-donw
{
delay(250); // come debounce bastano 50 millisecondi.
++PAUT; // su singola riga PAUTT++ o ++PAUT è indifferente.
if (PAUT >= 2) {
PAUT = 0;
}
}
if (PAUT == 0)
{
// dovresti stampare via seriale che sei all'interno di questo if.
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
}
if (PAUT == 1)
{
// dovresti stampare via seriale che sei all'interno di questo if.
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(12, LOW); // questo l'ho aggiunto durante i vari tentativi
// mettere LOW in pin di input non serve
if (millis() > A + 500) {
P1 = 1 + P1; // qui è dove non funziona anche mettendo ++P1
}
if (millis() > A + 1000) {
P1 = 1 + P1; // qui è dove non funziona anche mettendo ++P1
A = millis();
}
if (P1 >= 5) {
P1 = 0; // questo l'ho aggiunto durante i vari tentativi
}
}
if (digitalRead(12) == HIGH) // controlla i collegamenti ed eventualmente metti un pull-down
{
delay(250);
++P1;
if (P1 >= 5) {
P1 = 0;
}
}
switch (P1)
{
// dovresti stampare via seriale il valore di P1
case 0:
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
break;
case 1:
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
break;
case 2:
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
break;
case 3:
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
break;
case 4:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
break;
}
// perchè fai il controllo 2 volte?
if (digitalRead(11) == HIGH) // controlla i collegamenti ed eventualmente metti un pull-down
{
delay(250);
++PAUT;
if (PAUT >= 2) {
PAUT = 0;
}
}
}