prova questo codice forse "zoppica" meno, alle righe modificate ho aggiunto // modifica GINGARDU
con una breve spiegazione,
int luciPosIn = 2;
int fariLungIn = 3;
int frecceIn = 4;
int lampIn = 5;
int stopIn = 6;
int retroIn = 7;
int luciPosOut = 8;
int faroLung1 = 9;
int faroLung2 = 10;
int stopOut = 11;
int retroOut = 12;
int frecceOut = 13;
int stopInS;
int retroInS;
int val1;
int val2;
int val3;
int val4; //Possibile non necessario!!
int val5 = LOW;
unsigned long previousMillis = 0;
unsigned long interval = 500000; // modifica GINGARDU aggiunto 3 zeri perche il timer mocros va a microsecondo
extern unsigned long timer0_millis;
void setup() {
pinMode(luciPosIn, INPUT); //Input PPM ricevente radio (luciPosIn)
pinMode(fariLungIn, INPUT); //Input PPM ricevente radio (fariLungIn) Possibile anche lampeggio!!!
pinMode(frecceIn, INPUT); //Input PPM ricevente radio (frecceIn)
pinMode(stopIn, INPUT); //Input mosfet regolatore (stopIn)
pinMode(retroIn, INPUT); //Input mosfet regolatore (retroIn)
pinMode(lampIn, INPUT); //Input PPM ricevente radio (lampIn) Possibile non necessario!!!
pinMode(luciPosOut, OUTPUT); //Accensione luci posizione
pinMode(faroLung1, OUTPUT); //Accensione luce profondità !! o lampeggio strobo
pinMode(faroLung2, OUTPUT); //Accensione luce profondità !! o lampeggio strobo
pinMode(frecceOut, OUTPUT); //Accensione 4 frecce
pinMode(stopOut, OUTPUT); //Accensione Stop e posizione posteriore 1/2 potenza
pinMode(retroOut, OUTPUT); //Accensione retro
digitalWrite(luciPosOut,LOW);
digitalWrite(faroLung1,LOW);
digitalWrite(faroLung2,LOW);
digitalWrite(stopOut,LOW);
digitalWrite(retroOut,LOW);
}
void loop() {
val1 = pulseIn(luciPosIn, HIGH);
val2 = pulseIn(fariLungIn, HIGH);
val3 = pulseIn(frecceIn, HIGH);
val4 = pulseIn(lampIn, HIGH); //Possibile non necessario!!
stopInS = digitalRead(stopIn);
retroInS = digitalRead(retroIn);
if (val1 > 1600) digitalWrite(luciPosOut, HIGH);
if (val1 < 1600) digitalWrite(luciPosOut, LOW);
if (val1 > 1600 && stopInS == LOW) analogWrite(stopOut, 10);
if (val1 > 1600 && stopInS == HIGH) analogWrite(stopOut, 255);
if (val1 < 1600 && stopInS == HIGH) analogWrite(stopOut, 255);
if (val1 < 1600 && stopInS == LOW) analogWrite(stopOut, 0);
if (val2 > 1600) digitalWrite(faroLung1, HIGH);
if (val2 < 1600) digitalWrite(faroLung1, LOW);
if (val2 > 1600) digitalWrite(faroLung2, HIGH);
if (val2 < 1600) digitalWrite(faroLung2, LOW);
if (val3 > 1600) {
if (millis() - previousMillis > interval) {
previousMillis = micros(); // modifica GINGARDU sostituito il timer millis com micros
//per evitare che dia fastiadio al timer timer0_millis = 0; o voceversa
if (val5 == LOW)
val5 = HIGH;
else
val5 = LOW;
digitalWrite(frecceOut, val5);
}
}
if (val3 < 1600) digitalWrite(frecceOut, LOW);
if (val4 > 1600 && val2 < 1600) {
if (millis()>50 && millis()<100) digitalWrite(faroLung1, HIGH);
if (millis()>100 && millis()<150) digitalWrite(faroLung1, LOW);
if (millis()>150 && millis()<200) digitalWrite(faroLung1, HIGH);
if (millis()>200 && millis()<250) digitalWrite(faroLung1, LOW);
if (millis()>750 && millis()<800) digitalWrite(faroLung2,HIGH);
if (millis()>800 && millis()<850) digitalWrite(faroLung2, LOW);
if (millis()>850 && millis()<900) digitalWrite(faroLung2,HIGH);
if (millis()>900 && millis()<950) digitalWrite(faroLung2, LOW);
if (millis()>1050 && millis()<1100) digitalWrite(faroLung1, HIGH);
if (millis()>1100 && millis()<1150) digitalWrite(faroLung1, LOW);
if (millis()>1150 && millis()<1200) digitalWrite(faroLung1, HIGH);
if (millis()>1200 && millis()<1250) digitalWrite(faroLung1, LOW);
if (millis()>1750 && millis()<1800) digitalWrite(faroLung2,HIGH);
if (millis()>1800 && millis()<1850) digitalWrite(faroLung2, LOW);
if (millis()>1850 && millis()<1900) digitalWrite(faroLung2,HIGH);
if (millis()>1900 && millis()<1950) digitalWrite(faroLung2, LOW);
if (millis()>2050 && millis()<2100) digitalWrite(faroLung1, HIGH);
if (millis()>100 && millis()<150) digitalWrite(faroLung1, LOW);
if (millis()>2150 && millis()<2200) digitalWrite(faroLung1, HIGH);
if (millis()>2200 && millis()<2250) digitalWrite(faroLung1, LOW);
if (millis()>2750 && millis()<2800) digitalWrite(faroLung2,HIGH);
if (millis()>2800 && millis()<2850) digitalWrite(faroLung2, LOW);
if (millis()>2850 && millis()<2900) digitalWrite(faroLung2,HIGH);
if (millis()>2900 && millis()<2950) digitalWrite(faroLung2, LOW);
if (millis()>3000) { // modifica GINGARDU ho triplicato il codice sopra e modificato millis()>3000 cosi timer millis si resetta ogni 3 secondi
cli();
timer0_millis = 0;
sei();
}
}
if (retroInS == HIGH) digitalWrite(retroOut, HIGH);
if (retroInS == LOW) digitalWrite(retroOut, LOW);
}