PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IR-sender und empfänger, probleme mit dem empfang



inka
26.06.2015, 16:55
hallo allerseits,

ich bastle immer noch an meiner IR-bake 2.0...

im netz habe ich zwei interessante sketche gefunden.
sender (http://www.meinduino.de/arduino-howto/2014/09/18/serielleuebertragung1.html):

den code habe ich wegen einer zusätzlichen grünen LED (die nur mitblinkt) ein bischen modifiziert:



// Damit die Pins schnell geschaltet werden können
#include <digitalWriteFast.h>

// Hier ist der Verstärker mit der IR-LED angeschlossen
#define IRLED 8
#define LEDpin 9

// Globale Variablen für den Timer-Interrupt
volatile uint8_t pinZustand = HIGH;
volatile uint8_t sendenAn = false;



/************************************************** ***********
*
* void setup()
*
* Wird einmal beim Programmstart ausgeführt
*
************************************************** ***********/
void setup()
{

pinMode(8, OUTPUT);
// IRLED ist ein Ausgabe-Pin
pinModeFast(IRLED, OUTPUT);

pinMode(9, OUTPUT);

noInterrupts(); // Jetzt keine Interrupts
TIMSK1 |= (1<<OCIE1A); // Timer 1 Output Compare A Match Interrupt Enable

TCCR1A = 0; // "Normaler" Modus

// WGM12: CTC-Modus einschalten (Clear Timer on Compare match)
// Stimmen OCR1A und Timer überein, wird der Interrupt
// ausgelöst
// Bit CS12 und CS10 setzen = Vorteiler: 8
TCCR1B = (1<<WGM12) | (1<<CS11);

// Frequenz = 16000000 / 8 / 28 = rd. 71,428kHz, da jeweils an- und aus-
// geschaltet wird, ergeben sich rund 36kHz Blinkfrequenz
OCR1A = 28;

interrupts(); // Interrupts wieder erlauben
}



/************************************************** ***********
*
* Interrupt Service Routine
*
* Wird aufgerufen, wenn der entsprechende Interrupt
* ausgelöst wird
*
************************************************** ***********/
ISR(TIMER1_COMPA_vect)
{
noInterrupts();
if(! sendenAn)
{
// IR-LED ausschalten
digitalWriteFast(IRLED, LOW);
// Zustand der IR-LED merken
pinZustand = LOW;
interrupts();
return;
}
else
{
// IR-LED-Pin auf pinZustand schalten
digitalWriteFast(IRLED, pinZustand);
// pinZustand invertieren
pinZustand = (pinZustand == HIGH) ? LOW : HIGH;
}
interrupts();
}



/************************************************** ***********
*
* void loop()
*
* Wird immer wieder durchlaufen
*
************************************************** ***********/
void loop()
{

// Sender für 5ms ausschalten
sendenAn = false;
delay(5);
//digitalWrite(9, LOW);

// Das komplette Alphabet in Großbuchstaben senden
//for(int i='A'; i<='Z'; i++)
for(int i=1; i<=9; i++)
{
sendIR(i);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
delay(250); // Kann entfallen, hier nur, damit man auf
// dem Empfänger Zeit hat, die Buchstaben
// zu verfolgen
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
}
//digitalWrite(9, HIGH);
}



/************************************************** ***********
*
* void sendIR(uint8_t dataByte)
*
* Sendet ein Byte seriell mit 1200bps über die IR-LED
*
* dataByte = Das Byte, das gesendet wird
*
************************************************** ***********/
void sendIR(uint8_t dataByte)
{

// Start-Bit
sendenAn = false;
delayMicroseconds(550);
sendenAn = true;
delayMicroseconds(230);

// 8 Datenbits
for(int i=0; i<8; i++)
{
// Falls LSB gesetzt...
if(dataByte & B00000001 == 1)
{
// ... 36kHz-Signal aus (Seriell = Invertierte Logik)...
sendenAn = false;
delayMicroseconds(550);
}
else
{ // ... andernfalls 36kHz-Signal an
sendenAn = true;
delayMicroseconds(230);
}
// Das nächste Bit bitte
dataByte >>= 1;
}

// Stopp-Bit
sendenAn = true;
delayMicroseconds(550);
sendenAn = false;

// kurze Pause
delay(2);
}


der sender funktioniert was die signalübertragung betrifft, das konnte ich mit dem RP6 verifizieren, es wird dort aber nur mit einer blinkenden LED signalisiert signal ja oder nein...

empfänger (http://www.meinduino.de/arduino-howto/2014/09/19/serielleuebertragung2.html):
der OUT-pin des TSOP 34836 ist am pin RX0 eines mega 2560 angeschlossen, die ansteuerung der LCD anzeige habe ich so modifiziert, wie sie in anderen sketches schon mal funktioniert hat. Am LCD erscheint nach dem einschalten "TSOP-Empfang" , sonst passiert aber nichts...




// Includes für das Display
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

// 7-Bit Adresse des Displays
// #define I2C_ADDR 0x27 >> 1 // I2C-Addresse

// Die Pin-Belegung des Displays
#define BACKLIGHT_PIN 7
#define En_pin 6
#define Rw_pin 5
#define Rs_pin 4
#define D4_pin 0
#define D5_pin 1
#define D6_pin 2
#define D7_pin 3

#define LED_OFF 1
#define LED_ON 0

// Prototypen
//LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6 _pin,D7_pin);



//#define BACKLIGHT_PIN 7
//#define LED_OFF 1
//#define LED_ON 0
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address


/************************************************** ******************
*
* Nötige Initialisierungen
*
************************************************** ******************/
void setup()
{
lcd.begin (16,2); // Display initialisieren

// Hintergrundbeleuchtung einschalten
lcd.setBacklightPin(BACKLIGHT_PIN,NEGATIVE);
lcd.setBacklight(LED_ON);

// Display bereit machen
lcd.clear();
lcd.home();
lcd.backlight(); // Beleuchtung einschalten
lcd.setCursor(0,0); // Zeichen 1, Zeile 1
lcd.print("TSOP-Empfang");
lcd.setCursor(0,1); // Zeichen 1, Zeile 2

Serial.begin(1200);
}



/************************************************** ******************
*
* Hauptschleife, wird immer wieder durchlaufen
*
************************************************** ******************/
void loop()
{
int counter = 0;
char dataEin = 0;


while(true)
{
if(Serial.available() > 0)
{
dataEin = Serial.read();
lcd.print(dataEin);

// Nach 16 Zeichen Cursor wieder nach vorne
counter++;
if(counter >= 16)
{
// lcd.clear();
counter = 0;
lcd.setCursor(0,1);
}
}
}
}


der empfang am RP6 ist schon mal ein zeichen dafür, dass der sender funktioniert, ich weiss aber nicht, wo ich im code des empfängers was verändern könnte damit sich auf dem LCD auch was tut :-(

Könnte bitte jemand drüberschauen und mir einen schubs geben - von wegen der suchrichtung?

Rabenauge
28.06.2015, 13:26
Hm. Find da so auf die Schnelle keinen Fehler aber: hast du mal ne andere Schnittstelle versucht?
Wenn der MEGA am Rechner hängt, belegt der die serielle 0, wenn ich mich recht entsinne!
Da du nen MEGA hast, kannst du ja easy mal ne andere benutzen.
Einfach mal auf die Serial1 umstöpseln und serial1.begin(1200);

Auch kannst du mal, bei deinem jetztigen Aufbau, versuchen, irgendein Zeichen über die serielle Konsole zu schicken, würd mich jetzt nicht wundern, wenn das direkt auf dem Display erscheinen würd...falls das passiert, weisst du Bescheid.

inka
29.06.2015, 09:44
hi Rabenauge,
danke für den tipp mit der seriellen schnittstelle, jetzt kommen am empfänger auch zeichen an, statt des (gedacht) gesendeten alphabets allerdings solche:

30372
empfänger oder senderproblem?

Sisor
29.06.2015, 17:11
Serial.begin(1200); -ungewöhnlich niedriger Wert...
Hast du im Arduino-Monitor den Wert auf 1200 Baud geändert, bevor du Zeichen sendest?

Rabenauge
29.06.2015, 19:20
Er sendet nicht auf den "Monitor", sondern direkt zum Display.

Hm, kann mehrere Ursachen haben nun: falscher Zeichensatz? Eventuell (die billgen Displays haben nen fest verbauten Zeichensatz, da kann man gewöhnlich nur acht eigene definieren) brauchst du ne Art Übersetzungstabelle.
Auch denkbar: einfach das falsche Format, also binär/hex oder sowas....

oberallgeier
29.06.2015, 21:46
... jetzt kommen am empfänger auch zeichen an, statt des (gedacht) gesendeten alphabets allerdings solche ...Hmm, ich verwende HD44780 und KS0066 kompatible LCDs. Beide haben diese Zeichen nicht fest eingebaut. Ich jedenfalls müsste mir für meine Displays die Zeichen ± und den senkrechten Doppelstrich selbst basteln und =>>> erstmal in den lokalen Speicher laden ! !

Schau doch mal ins Datenblatt von Deinem LCD und vergleiche den Code der gesendeten Zeichen mit dem der angezeigten Zeichen. Vielleicht sieht man darin einen Unterschied, mit dem man näher an den Fehler kommt . . .

Dirk
30.06.2015, 10:28
Hi inka,
noch ne Idee:
Der Sender Code geht ja von einer nicht invertierendenTreiberschaltung mit NPN Transistor aus.
Was hast du als Treiber für die Sende-LED?

inka
03.07.2015, 10:44
@Dirk,

Was hast du als Treiber für die Sende-LED?

den 2N2222...

ich habe jetzt diesbezüglich noch einen test gemacht. Nach diesem schaltplan (im bild selbst links)
30400


einen zweiten 2N2222 hinzugefügt. Nach dem was ich irgendwo gelesen habe sollte der zweiter transistor die invertierung wieder umkehren. Stimmt das?

Der Q2 verändert nichts an den "wirren" zeichen auf dem arduino LCD, verringert die leistung und die reichweite der schaltung aber erheblich. Das könnte aber auch die nicht angepasste ansteuerung des Q2 verursacht haben...

@rabenauge:
an den anderen möglichkeiten bin ich dran. Die veränderung der loop-schleife des senders (habe das senden der zeichen auskommentiert)


void loop()

{
sendenAn = false;
delayMicroseconds(550);
sendenAn = true;
delayMicroseconds(2330);
sendenAn = false;
/*
for(int i=1; i<=16; i++)
{
sendIR(i);
}
*/
//delay(500);
digitalWrite(IRLED, LOW);
digitalWrite(LEDpin, LOW);
delay(500); // blinkfrequenz
Serial1.print(1, DEC);
digitalWrite(IRLED, HIGH);
digitalWrite(LEDpin, HIGH);

}

bewirkt, das auf dem LCD nun beim jedem durchlauf der schleife zwei senkrechte striche "||" ausgegeben werden. Jetzt muss ich "nur noch" rausfinden warum das so ist...

einerseits ist für das weitermachen das problem der reichweite gelöst, der kontakt zum RP6 funktioniert auch, alleine für die später geplante kommunikation zwischen den beiden per IR ist das bis jetzt erreichte nicht ausreichend...

Dirk
04.07.2015, 11:37
Hi inka,

in dem Schaltplan erfolgt die Ansteuerung invertierend (Port HIGH, LED OFF). Der von dir verwendete Sender-Code geht von einem nicht invertierenden Treiber (Port HIGH, LED ON) aus.
Optionen: Treiber ändern ODER Sender-Code ändern.

Nebenbei: Die rechts abgebildete Empfängerschaltung (die du hoffentlich nicht verwendest!) dürfte einen dauerhaften LOW-Pegel ausgeben (Rx mit GND verbunden). ;)

inka
15.07.2015, 08:25
Hi Dirk,
Nebenbei: Die rechts abgebildete Empfängerschaltung (die du hoffentlich nicht verwendest!) dürfte einen dauerhaften LOW-Pegel ausgeben (Rx mit GND verbunden). ;)

nein, den empfänger habe ich nicht verwendet, ich verwende den TSOP (angeschlossen an den drei anschlüssen) ohne zusätzliche bauteile...



in dem Schaltplan erfolgt die Ansteuerung invertierend (Port HIGH, LED OFF). Der von dir verwendete Sender-Code geht von einem nicht invertierenden Treiber (Port HIGH, LED ON) aus. Optionen: Treiber ändern ODER Sender-Code ändern.

hier wäre noch die frage ob die invertierung des signals durch eine zweite transistorstufe wieder rückgängig gemacht werden kann, aber das großgeschriebene ODER suggeriert, dass die softwareänderun die einfachere lösung und daher vorzuziehen ist. Also habe ich mir viel zeit genommen und ausgiebig experimentiert :-), allerdings ohne den durchschlagenden erfolg:


hier habe ich den anfangszustand der globalen variablen wahlweise geändert:

// Globale Variablen für den Timer-Interrupt
volatile uint8_t pinZustand = HIGH;
volatile uint8_t sendenAn = false;

hier sehe ich keine möglichkeit für änderungen, es dreht sich alles mehr oder weniger nur um die einstellungen für die 36khz:
(oder sollte der interrupt ausgelöst werden wenn " Stimmen OCR1A und Timer NICHT überein, wird der Interrupt ausgelöst"?)

void setup()
{

pinMode(8, OUTPUT);
// IRLED ist ein Ausgabe-Pin
pinModeFast(IRLED, OUTPUT);

pinMode(9, OUTPUT);

noInterrupts(); // Jetzt keine Interrupts
TIMSK1 |= (1<<OCIE1A); // Timer 1 Output Compare A Match Interrupt Enable

TCCR1A = 0; // "Normaler" Modus

// WGM12: CTC-Modus einschalten (Clear Timer on Compare match)
// Stimmen OCR1A und Timer überein, wird der Interrupt
// ausgelöst
// Bit CS12 und CS10 setzen = Vorteiler: 8
TCCR1B = (1<<WGM12) | (1<<CS11);

// Frequenz = 16000000 / 8 / 28 = rd. 71,428kHz, da jeweils an- und aus-
// geschaltet wird, ergeben sich rund 36kHz Blinkfrequenz
OCR1A = 28;

interrupts(); // Interrupts wieder erlauben
}

hier habe ich die invertierung des pinzustandes wahlweise zwischen if und else geändert, bzw abgefragt ob gesendet wird "if(sendenAn)":

ISR(TIMER1_COMPA_vect)
{
noInterrupts();
if(! sendenAn) // = if(sendenAn==false)
{
// IR-LED ausschalten
digitalWriteFast(IRLED, LOW);
// Zustand der IR-LED merken
pinZustand = LOW;
interrupts();
return;
}
else
{
// IR-LED-Pin auf pinZustand schalten
digitalWriteFast(IRLED, pinZustand);
// pinZustand invertieren
pinZustand = (pinZustand == HIGH) ? LOW : HIGH;
}
interrupts();
}

hier in der hauptschleife sehe ich keine sinnvolle änderungsmöglichkeit:

void loop()
{

// Sender für 5ms ausschalten
sendenAn = false;
delay(5);
//digitalWrite(9, LOW);

// Das komplette Alphabet in Großbuchstaben senden
for(int i='A'; i<='Z'; i++)
//for(int i=1; i<=9; i++)
{
sendIR(i);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
delay(250); // Kann entfallen, hier nur, damit man auf
// dem Empfänger Zeit hat, die Buchstaben
// zu verfolgen
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
}
//digitalWrite(9, HIGH);
}

in dieser sendefunktion könnte man die an- bzw. abschaltung des 36khz signals umkehren zwischen der if und else abfrage:

void sendIR(uint8_t dataByte)
{

// Start-Bit
sendenAn = false;
delayMicroseconds(550);
sendenAn = true;
delayMicroseconds(230);

// 8 Datenbits
for(int i=0; i<8; i++)
{
// Falls LSB gesetzt...
if(dataByte & B00000001 == 1)
{
// ... 36kHz-Signal aus (Seriell = Invertierte Logik)...
sendenAn = false;
delayMicroseconds(550);
}
else
{ // ... andernfalls 36kHz-Signal an
sendenAn = true;
delayMicroseconds(230);
}
// Das nächste Bit bitte
dataByte >>= 1;
}

// Stopp-Bit
sendenAn = true;
delayMicroseconds(550);
sendenAn = false;

// kurze Pause
delay(2);
}
---------------------------------------

wie bereits oben geschrieben habe ich die verschidensten änderungen (und ihre kombinationen) mit gar keinen bzw. negativen konsequenzen ausprobiert, die einzige "positive" verhaltensänderung war die, dass die IR-LED sendet, blinkt und die "||" zeichen sendet...

bin also wieder mit meinem latein am ende...

Rabenauge
15.07.2015, 11:11
Hast du mal überprüft ob die Zeichen denn korrekt gesendet werden, z.B. über die Serielle Schnitstelle?
Hab eben mal ins Datenblatt geschaut, das ||-Symbol hat die Zeichenfolge B10100000.

Es gibt doch nen paar "Standard"-Programme für IR-Kommunikation, hast du es damit mal versucht?

inka
16.07.2015, 13:51
Es gibt doch nen paar "Standard"-Programme für IR-Kommunikation, hast du es damit mal versucht?

ich weiss ja nicht was Du mit "standard"-programmen meinst :-( , wenn sowas:


//sender:
// http://forum.arduino.cc/index.php?topic=156140.0

void setup()
{
Serial.begin(9600);
}

void loop()
{
// send data
Serial.write(0b11111111);
delay(1000);
}


und:


//empfänger:
//http://forum.arduino.cc/index.php?topic=156140.0

byte val;

void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
}

void loop()
{
if (Serial1.available())
{
val = Serial1.read();
Serial.println(val,BIN);
}
}

so verbunden:

mega_1 RX (Pin 0) geht auf TX1 (Pin 18) vom Mega_2
mega_1 TX (Pin 1) geht auf RX1 (Pin 19) vom Mega_2

dann ja, die 8x1 kommt an...

eine andere interessante beobachtung:

in den beiden arduinos die zwei sketche vom anfang geladen, IR-LED wie auch der TSOP deaktiviert, die beiden mega's über TX1 - RX1 / RX1 - TX1 / GND - GND verbunden, dann kommen auch diese "||" im LCD an. Wie erkläre ich mir das?

ich habe vorhin nach der zweiten transistorstufe als "neutralisierung" der invertierung in der emiterschaltung meines senders gefragt: da niemand antwortet - wollt Ihr mir nich wehtun (weil absoluter blödsin), oder ist es etwas "was man nicht macht" - oder warum die funkstille? :confused:


EDIT:
---------------------------------------

ich muss mich etwas korrigirren:

die gesendeten daten kommen am terminal. mit dieser loopschleife


void loop()
{
// send data
//Serial.write(0b11111111);

for(int i='A'; i<='Z'; i++)
//for(int i=1; i<=9; i++)

{
Serial.write(i);
}

delay(1000);
}
kommen auch die buchstaben (im terminal), auf dem display (ohne das was dorthin gesendet wird) das hier:

30480

Rabenauge
20.07.2015, 13:29
Ich hab den grade nicht parat-aber findest du mit bissel wühlen:
bei Sainsmart gibts irgendwo das grosse Tutorial für den Arduino Mega zum runterladen. Dort ist ein Beispielprogramm dabei, in dem eine stinknormale IR-Fernbedienung eingelesen wird.
Das funktioniert einwandfrei, ist aber nen bissel schwer zu finden- irgendwie bei den Startersets und Mega- und da irgendwo kann man es runterladen.
Das hab ich mir sogar mal ausgedruckt, so als kleines Handbüchlein recht gut.

inka
25.07.2015, 16:05
bin jetzt ein stückchen weiter gekommen...

habe jetzt die sketche vereinfacht, auch den timer und die interrupt routine entfernt, habe statt dessen "tone" eingesetzt - geht offensichtlich auch :-)

ich sende die zahlen von 1 bis 99, speichere sie in einem array und drucke sie nach einer pause am seriellen monitor aus. So weit so gut, nur sind die empfangenen zahlen alles andere als 1 bis 99!

ich vermute, dass ich hier zeitprobleme, bzw. keine koordinierten aktionen zwischen sender und empfänger habe. Wie mache ich so einen "handshake?

der sender:


// am pin8 ist der verstärker mit der IR-LED angeschlossen

// am pin 9 ist die die grüne kontroll LED angeschlossen

uint8_t i;



void setup()
{

// pin 8 ist ein Ausgabe-Pin - IR -LED
pinMode(8, OUTPUT);
//pin 9 ist ein Ausgabe-Pin - grüne LED
pinMode(9, OUTPUT);

Serial1.begin(9600);
Serial.begin(9600);

}

void loop()
{

// //zahlen von 1 bis 99 senden
for(i=1; i<=99; i++)
//for(i=99; i>=1; i--)
{


tone (8, 36000);
digitalWrite(8, LOW);
digitalWrite(9, LOW);

delay(550);//550

Serial1.println(i);
Serial.println(i);

tone (8, 0);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);

delay(230);//230

}
//delay(1000);
}

der empfänger:


//out-pin des TSOP angeschlossen an RX1 (serial1)

int i;

uint8_t my_data_ein[] = {0};


void setup()
{

Serial1.begin(9600);
Serial.begin(9600);
}


void loop()
{

while(Serial1.available())
{
for(i=1; i<=99; i++)
//for(i=9; i>=1; i--)
{
my_data_ein[i] = Serial1.read();
}
delay(2000);

for(i=1; i<=99; i++)
//for(i=9; i>=1; i--)
{
Serial.println(my_data_ein[i]);
}


}

}



die daten, die ankommen, wenn der sender an ist, 7 wiederholungen, so gut wie keine unterschiede, nur am anfang ein paar ausreisser...




1
1
1
1
1
1
1


0
0
0
0
0
0
0


107
65
20
100
55
7
81


121
107
92
76
62
45
28


10
19
28
37
46
55
64


0
0
0
0
0
0
0


0
0
0
0
0
0
0


60
247
179
109
41
226
156


10
18
27
36
45
53
62


0
0
0
0
0
0
0


0
0
0
0
0
0
0


4
4
4
4
4
4
4


2
2
2
2
2
2
2


0
0
0
0
0
0
0


0
0
0
0
0
0
0


232
232
232
232
232
232
232


3
3
3
3
3
3
3


0
0
0
0
0
0
0


0
0
0
0
0
0
0


0
0
0
0
0
0
0


0
0
0
0
0
0
0


0
0
0
0
0
0
0


0
0
0
0
0
0
0


232
232
232
232
232
232
232


2
2
2
2
2
2
2


164
164
164
164
164
164
164


2
2
2
2
2
2
2


53
53
53
53
53
53
53


1
1
1
1
1
1
1


52
52
52
52
52
52
52


1
1
1
1
1
1
1


48
48
48
48
48
48
48


1
1
1
1
1
1
1


49
49
49
49
49
49
49


1
1
1
1
1
1
1


50
50
50
50
50
50
50


1
1
1
1
1
1
1


54
54
54
54
54
54
54


1
1
1
1
1
1
1


4
4
4
4
4
4
4


3
3
3
3
3
3
3


7
7
7
7
7
7
7


5
5
5
5
5
5
5


1
1
1
1
1
1
1


0
0
0
0
0
0
0


4
4
4
4
4
4
4


2
2
2
2
2
2
2


0
0
0
0
0
0
0


0
0
0
0
0
0
0


232
232
232
232
232
232
232


3
3
3
3
3
3
3


0
0
0
0
0
0
0


0
0
0
0
0
0
0


0
0
0
0
0
0
0


0
0
0
0
0
0
0


0
0
0
0
0
0
0


0
0
0
0
0
0
0


112
112
112
112
112
112
112


3
3
3
3
3
3
3


44
44
44
44
44
44
44


3
3
3
3
3
3
3


213
213
213
213
213
213
213


0
0
0
0
0
0
0


212
212
212
212
212
212
212


0
0
0
0
0
0
0


208
208
208
208
208
208
208


0
0
0
0
0
0
0


209
209
209
209
209
209
209


0
0
0
0
0
0
0


210
210
210
210
210
210
210


0
0
0
0
0
0
0


214
214
214
214
214
214
214


0
0
0
0
0
0
0


4
4
4
4
4
4
4


3
3
3
3
3
3
3


7
7
7
7
7
7
7


5
5
5
5
5
5
5


1
1
1
1
1
1
1


0
0
0
0
0
0
0


4
4
4
4
4
4
4


2
2
2
2
2
2
2


0
0
0
0
0
0
0


0
0
0
0
0
0
0


232
232
232
232
232
232
232


3
3
3
3
3
3
3


0
0
0
0
0
0
0


0
0
0
0
0
0
0


0
0
0
0
0
0
0


0
0
0
0
0
0
0


0
0
0
0
0
0
0


0
0
0
0
0
0
0


248
248
248
248
248
248
248


3
3
3
3
3
3
3


180
180
180
180
180
180
180


3
3
3
3
3
3
3


205
205
205
205
205
205
205


0
0
0
0
0
0
0


204
204
204
204
204
204
204


0
0
0
0
0
0
0

Rabenauge
27.07.2015, 10:52
Guck dir das mal an: https://learn.sparkfun.com/tutorials/ir-communication .
Ziemlich gut erklärt.