Attenzione perchè quelle non sono le durate del segnale alto, ma della portante modulata a 48000 Hz!
Non basta un digitalWrite, ti serve la llibreria per infrarossi, oppure ti scrivi da te una funzioncina che accende/spegne 48000 volte al secondo per un tempo prefissato.
Che so, tipo:
void carrier(int value) {
if(value==1) {
digitalWrite(outpin,HIGH);
} else {
digitalWrite(outpin,LOW);
}
delayMicroseconds(ONOFF);
digitalWrite(outpin,LOW);
delayMicroseconds(ONOFF);
}
Questo produce un valore alto/basso per ONOFF milionesimi di secondo e un valore basso per altrettanto tempo; alto e basso insieme devono durare 1/48000 secondi, quindi ognuno 1/96000 secondi, cioè 1'000'000/96'000 microsecondi, cioè circa 10 us (cioè ONOFF=10)
Poi carrier() va ripetuto per la durata del segnale alto: se deve durare 17'000 us, dovrà essere ripetuto 1'700 volte.
void SignalOn(int length) {
for(int i =0; i<=length/10; i++) {
carrier(1);
}
}
void SignalOff(int length) {
for(int i =0; i<=length/10; i++) {
carrier(0);
}
}
Belllo, vero? Tutta teoria, me lo sono appena inventato, mai provato! :-)
Pero' se funziona fammi un fischio, perche' serve pure a me! ;-)