IR Fernbedienung auslesen

Hallo,
Ich versuche momentan, eine Infrarot Fernbedienung per Mikrocontroller auszulesen. Endziel ist es, das ganze möglichst klein zu kriegen, dass es vielleicht sogar auf einen ATtiny13A passt, aber für den Anfang will ich erst mal die Signale von der Fernbedienung richtig verstehen. Die Fernbedienung hat 3 Tasten und mit IRLib2 kann ich mir auch die Signale ansehen, die auch verschieden sind (siehe unten). Für einen ATtiny ist diese riesige Bibliothek nun leider keine Option. Deswegen hab ich mich an diesem Thread orientiert und folgenden Code ausprobiert (zuerst mal auf einem Arduino Uno für’s Debugging):

int ir_pin = 2;                         //Sensor pin 1 wired through a 220 ohm resistor
int bin_1 = 1000;                           //Binary 1 threshold (Microseconds)
int bin_0 = 400;                             //Binary 0 threshold (Microseconds)

void setup() {
  pinMode(ir_pin, INPUT);
  Serial.begin(9600);
}

void loop() {
  int key = getIRKey();
  Serial.println(key, DEC);
}

int getIRKey() {
  int data[12];
  
  while(pulseIn(ir_pin, LOW) < 2200) { 
    //Wait for a start bit
  }

  for(int i=0;i<12;i++){
    data[i] = pulseIn(ir_pin, LOW);   //Start measuring bits, I only want low pulses
  }

  for(int i=0;i<12;i++) {          //Parse them
    if(data[i] > bin_1) {          //is it a 1?
      data[i] = 1;
    } else {
      if(data[i] > bin_0) {        //is it a 0?
        data[i] = 0;
      } else {
        return -1;              //Flag the data as invalid
      }
    }
  }
  
  int result = 0;
  int seed = 1;
  for(int i=0;i<12;i++) {      //Convert bits to integer
    if(data[i] == 1) {
      result += seed;
    }
    seed = seed * 2;
  }
  return result;             //Return key number
}

Leider spuckt mir der Serial Monitor für jede Taste der Fernbedienung den gleichen Wert aus, nämlich 828 (bzw. 001100111100) :-/

Das verstehe ich nicht, denn die IRLib2 gibt mir beispielsweise folgendes aus:

Decoded Unknown(0): Value:0 Adrs:0 (0 bits) 
Raw samples(24): Gap:22954
  Head: m1230  s470
0:m1198 s474	1:m362 s1294		 2:m1222 s450	3:m386 s1294		 
4:m386 s1298	5:m386 s1294		 6:m386 s1294	7:m1222 s478		 
8:m358 s1294	9:m386 s1294		 10:m386
Extent=18842
Mark  min:358	 max:1222
Space min:450	 max:1298

Decoded Unknown(0): Value:0 Adrs:0 (0 bits) 
Raw samples(58): Gap:102
  Head: m1170  s466
0:m1142 s470	1:m1150 s458		 2:m366 s1242	3:m386 s1246		 
4:m394 s1234	5:m394 s1238		 6:m390 s1242	7:m390 s1238		 
8:m390 s1242	9:m386 s1246		 10:m1178 s462	11:m362 s1242		 
12:m386 s1246	13:m382 s1246		 14:m394 s1238	15:m390 s1242		 

16:m390 s1238	17:m390 s1242		 18:m386 s1246	19:m394 s1238		 
20:m390 s1242	21:m386 s1242		 22:m390 s1242	23:m1170 s466		 
24:m366 s1238	25:m1174 s466		 26:m1142 s462	27:m366
Extent=45914
Mark  min:362	 max:1178
Space min:458	 max:1246

Für die anderen beiden Tasten kriege ich mit der IRLib2 andere Ausgaben, also lässt sich das prinzipiell schon unterscheiden (auch schon in den ersten 12 LOW’s), nur irgendwie mit dem Code oben nicht. Was mache ich denn falsch?

Vielen Dank im Voraus!

Leider kenne ich deine verwendete Library nicht.
Aber hier habe ich es mit einem ATtiny85 aufgebaut.

Hi

ATtiny13A
1kB Flash gepaart mit 64Byte RAM - denke, Das wird sehr sportlich.

Da ist der ATtiny85 mit 8kB Flash und 512Byte RAM schon deutlich größer - bei gleichen Ausmaßen.
Von den Arduinos aber Beide trotzdem noch 'ein gutes Stück weg'.

Wünsche Dir, daß Du Das hinbekommst - dann ist aber eine Meldung Pflicht!!
Wenn's doch nur auf den 85 (45=4kB / 25=2kB) passt, auch nicht wirklich schlechter,

MfG

Bin auch mal gespannt, ob ich das hinkriege. Ich hab jetzt mal die Stelle

while(pulseIn(ir_pin, LOW) < 2200) { 
    //Wait for a start bit
  }

ersetzt durch

while (digitalRead(ir_pin) == HIGH);

und nach den ersten 12 Pulsen einfach mal n delay eingebaut, in dem nichts eingelesen wird. Die Fernbedienung sendet nämlich ungefähr 650ms lang noch was hinterher, was mich nicht interessiert ^^

So langsam wird n Schuh draus. Durch die Änderung im Code kann ich jetzt schonmal sinnvolle Signale einlesen und erkennen. Mal schauen, ob ich das am Wochenende auf einen ATTiny portiert kriege. 85er hab ich grad keine mehr hier, also werd ich mal mit nem 84er anfangen und dann sehen, ob ich das Programm so klein krieg, dass es auf den 13er passt :slight_smile:

Was möchtest Du denn letztendlich, Signale von der Fernbedienung empfangen oder an das Gerät senden? Entsprechend unterschiedlich ist die Anforderung an RAM/ROM.