- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 7 von 7

Thema: Arduino mit Infrarot-Receiver: Auswertung?

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Oje, mit Sony-Code kenne ich mich überhaupt nicht aus. Ich mag mich auch grad nicht einlesen. Wenn du eine Fernbedienung mit RC5 verwenden würdest, könnte eine Funktion etwas so aussehen:
    Code:
    // RC5 dekodieren mit invertierendem 36kHz-TSOP und Zaehlschleifen (ungetestet!) 14.05.2011 mic
    
    // https://www.roboternetz.de/community/showthread.php?53211-Arduino-mit-Infrarot-Receiver-Auswertung
    
    #include <avr/io.h>
    
    #define digitalRead(IRpin) !(PINA && (1<<0)) // Dummydefine für einen invertierenden TSOP-Eingang an PA0
    #define LOW (0==1) // LOW ist false und...
    #define HIGH !LOW  // HIGH ist true ;)
    
    int get_rc5_bitmuster(void) // RC5-Bitmuster einlesen mit Zaehlschleife
    {
    	char bit=12; // 14Datenbits-12Startbits einlesen
    	int bitmuster=0; // Speicher für 14 RC5-Datenbits
    	int bitlaenge=0, count=0, dummy=0; // Bitlaenge, Zaehler für die Bitlaengen, Dummy
    
    	while(digitalRead(IRpin)==LOW)  {} // warten auf Startbits
    	while(digitalRead(IRpin)==HIGH) {bitlaenge++;} // Dauer von zwei Startbits messen
    	bitlaenge/=2; // Bitlaenge berechnen
    	bitmuster=(1<<13)|(1<<12); // die Bits 13 und 12 im Bitmuster speichern (Startbits)
    	count=bitlaenge/4*3; // erster Lesezeitpunktdatenbits nach 3/4 der Bitlaenge
    	while(bit--) // weitere 12 Datenbits einlesen
    	{
    		while(count){count--; dummy++;}; // stimmt das Timeing???
    		if(digitalRead(IRpin)) // IR-Pegel einlesen...
    			bitmuster|=(1<<bit); // ...und abspeichern
    		count=bitlaenge; // naechster Lesezeitpunkt: 1/4+3/4 Bitlaenge oder eine Bitlaenge
    	}
    	while(count){count--; dummy++;} // eine Bitlaenge warten
    	return(bitmuster);
    }
    
    //
    
    int main(void)
    {
    	int RC5_Kommando;
    	while(1) RC5_Kommando=get_rc5_bitmuster();
    	return(0);
    }
    Ungetestet, aber das könnte mit einem invertierenden 36kHz-Tsop funktionieren, wenn diese beiden Schleifen ähnliche Ausführungszeiten besitzen würden:

    while(digitalRead(IRpin)==HIGH) {bitlaenge++;}
    while(count){count--; dummy++;}

    Ohne Timer und Interrupts scheint mir das eine sehr einfache RC5-Funktion zu sein. Das muss ich bei Gelegenheit mal selbst testen ;)
    Geändert von radbruch (15.05.2011 um 14:38 Uhr) Grund: Code optimiert
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. ARDUINO ARDUINO l293D + MegaservoLib
    Von m1ch15inner im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 2
    Letzter Beitrag: 11.07.2011, 11:50
  2. Keine IR Verbindung mit USB-Receiver
    Von asuruuser im Forum Asuro
    Antworten: 12
    Letzter Beitrag: 05.12.2006, 15:04
  3. 4 Channel Receiver
    Von inschenjoer im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 18.11.2006, 15:29
  4. dtmf-receiver
    Von stanislaf im Forum Elektronik
    Antworten: 12
    Letzter Beitrag: 03.02.2006, 11:17
  5. USART Receiver
    Von B.Rust im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 01.12.2004, 21:17

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests