leo, ho bisogno di una mano...
ho letto la guida che mi hai dato, ma purtroppo non ho ancora le competenze per comprenderla...
ecco il codice che uso:
volatile int i=0, y=0; // variabili contatore...
volatile boolean zero_cross1=0, zero_cross2=0; // booleane per lo zero crossing
int out1 = 0, out2 = 1; // Output >> ai moc...
int pot1 = 3, pot2=4; // ingressi trimmer
int bright1 = 0, bright2 = 0; // livello di luminosità (0-128) 0 = on, 128 = 0ff
int freqStep = 78; // ritardo del timer in microsecondi
void setup() {
pinMode(out1, OUTPUT);
pinMode(out2, OUTPUT);
attachInterrupt(0, zero_cross_detect, RISING); //zero crossing detection con interrupt esterno
}
void zero_cross_detect() {
zero_cross1 = true;
zero_cross2 = true;
i=0;
y=0;
digitalWrite(out1, LOW);
digitalWrite(out2, LOW);
}
void br_check() { // SUB CHE DEVE ESSERE ESEGUITA OGNI "FREQSTEP [uS]" (78 microsecondi)
if(zero_cross1 == true) {
if(i>=bright1) {
digitalWrite(out1, HIGH);
i=0;
zero_cross1 = false;
}
else {
i++;
}
}
if(zero_cross2 == true) {
if(y>=bright2) {
digitalWrite(out2, HIGH);
y=0;
zero_cross2 = false;
}
else {
y++;
}
}
}
void loop() {
bright1 = analogRead(pot1) / 8;
bright2 = analogRead(pot2) / 8;
}
come scritto nel codice, voglio che la sub br_check() venga eseguita indipendentemente dal loop, ogni 78uS.
saresti in grado di inviarmi un pezzo di codice che possa risolvere il mio problema usando un timer?
se possibile, potresti commentare lo sketch, così che io riesca a comprendere determinati passaggi, e se non chiedo troppo, anche una breve spiegazione sull'uso dei timer?
Grazie ![]()