Buongiorno a tutti.Ho copiato qua e la e ho messo insieme un piccolo sketch per accendere vari led di un presepe.
Provando varie soluzioni quella che è la più funzionale per il mio progetto ha un unico intoppo che non riesco a risolvere.Questo è il codice:
void setup() {
pinMode(3, OUTPUT);
randomSeed(analogRead(A0));
Serial.begin(9600);
}
unsigned long tc, t1, t2;
void loop() {
tc = millis();
if ((tc - t1) > 70000) {
Serial.print("t1: ");
Serial.println(t1);
t1 = millis();
}
if ((tc - t2) > 100) {
//alba
taskPwm(3, tc-t1, 0, 10000, 0, 255);
//giorno
taskPin(3, tc-t1, 10000, 15000, HIGH);
//tramonto
taskPwm(3, tc-t1, 15000, 25000, 255, 0);
//notte
taskPin(3, tc-t1, 25000, 70000, LOW);
Serial.println(tc-t1);
t2 = millis();
}
}
void taskPwm(int pin, unsigned long t, int t1, int t2, int l1, int l2){
if (t >= t1 && t < t2) {
int pwm = map(t-t1, 0, t2-t1, l1, l2);
analogWrite(pin, pwm);
}
}
void taskPin(int pin, unsigned long t, int t1, int t2, int stato){
if (t >= t1 && t < t2) {
digitalWrite(pin, stato);
}
}
se imposto come in questo caso
if ((tc - t1) > 70000)
mi restituisce un
25:40:warning: overflow in implicit constant conversion [-Woverflow]
taskPin(3, tc-t1, 25000, 70000,LOW);
fino a 60000 millis funziona tutto benissimo.
usato sia su nano che su mega2560.
non riesco a capire e non trovo nulla di utile in rete.
Abbiate infinita pazienza vi prego
questo e il mio primissimo progetto con arduino.
P.S.(probabilmente troverete altri difetti nel codice).
Fatemi sapere tutto quello che notate
Vi ringrazio tanto.
Ciao
Gabriele