Kicsit naívan álltam az infra adó (vevő) dologhoz, azt hittem ez egy egyszerű dolog lesz. A vevő oldalon az interrupt függvényben csak annyi volt hogy irBuffer[x++] = micros(); ezt utólag feldolgoztam, az első értéket levontam az összes többiből, így lett
long irBuffer[104] = {0, 2468, 3000, 3656, 4164, 4872, 5376, 6656, 7160, 7816,...
majd utána
void loop() {
if (Serial.read() != -1) {
x = micros() + 1000; //a mostani időhöz 1000 msec múlva fog először bekapcsolni az infra led
for (int i = 0; i < 104; i += 2) {
z = x + irBuffer[i];
while (micros() < z) {}
digitalWrite(pinIR, HIGH);
z = x + irBuffer[i + 1];
while (micros() < z) {}
digitalWrite(pinIR, LOW);
}
úgy voltam vele, hogy a mikroszekundum az egymillió az egy másodpercben, ha valahol csúszik 4 mszekundumot, azt még elbírja (egymillióban a 38 KHz megvan 26-szor) mert elvileg az összes időzítés az elsőhöz van igazítva. Hát nem bírta el :) Próbáltam a buffer értékeit -8-tól +8-ig eltolni, de ez sem segített. Van egy teszterem ami a távirányító jelét is kiírja számokban, na az konkrétan nem mutatott semmit, ebből gondoltam hogy valami nagyon nem stimmel. Két konklúziót is levontam ebből, első hogy a tv-k és más infravevők valami nagyon precíz órajel szerint dolgoznak, második hogy az Arduino valahogyan képes a precíz időzítésre is, de én ehhez túl kezdő vagyok, itt már ismerni kéne az Arduino belső működését, annyira meg nem akarok belemenni.