Codice Perfettamente funzionante (con tutti i pulseIn collegati "fonte leo72")
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 = 500;
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 = millis();
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()>1400) {
cli();
timer0_millis = 0;
sei();
}
}
if (retroInS == HIGH) digitalWrite(retroOut, HIGH);
if (retroInS == LOW) digitalWrite(retroOut, LOW);
}
ringrazio tutti per l'aiuto datomi
specialmente per avermi spiegato il millis()
e le preziose informazioni sui tempi di pulseIn
magari se a qualcuno venisse in mente un alternativa al pulseIn sarebbe molto gradita