- LiTime Speicher und Akkus         
Ergebnis 1 bis 8 von 8

Thema: Asuro mit einer Fernbedienung steuern

  1. #1

    Asuro mit einer Fernbedienung steuern

    Anzeige

    Praxistest und DIY Projekte
    Hallo leute,

    ich bin absoluter anfänger in sachen programmieren, jedoch soll ich jetzt als projekt für die schule, den asuro mit einer fernbedienung steuern.
    ich habe keine ahnunn was die werte heißen die mir im hyperterminal/ occonsole angezeigt werden, wenn ich an meiner normalen tv-fernbedienung eine taste drücke. auch die programme die ich bisher gesehen habe, sagen mir nichts und ich verstehe sie nicht.

    bitte dringend um Hilfe, Danke

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Welcher Art von Fernbedienung soll das werden? Ein Infrarot Fernbedienung wie bei ein Fernseher? Oder darf das auch eigene Kommando-signalen sein die von ein Rechner aus gesendet werden zu Asuro? (über Infrarot-sicht, oder Kabelverbindung)


    Ein Fernseher wird meistens mit das RC5 oder RC6 Protocol betrieben: http://de.wikipedia.org/wiki/RC-5


    Die Serielle Schnitstelle von dein PC/Hyperterminal wird das nicht verstehen, weil es eine Länge reihe von Bits betrifft. Statt Gruppen von 10 bits die ein Byte vorstellen in das Serielle Protokol.


    Hier gibt es schon einige beispielen von beiden Arten:


    http://home.kpn.nl/h.van.winkoop/Asu...uSfwPagFrm.htm

  3. #3
    Es sollte eine Fernbedienung vom Fernsehr sein.(Philipps) Wie soll ich dann die ausgesendeten Bits ermitteln?

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    ... Wie soll ich dann die ausgesendeten Bits ermitteln?
    Ist es eine Fernbedienung von einem Philips-Fernseher oder soll es mal eine sein/werden? Und macht die RC5? Andernfalls könnte es etwas diffiziler werden.

    Für RC-5 hat ja valen schon die zwei Links genannt, die für Dich notwendig sind. In dem Beispielcode von Henk steht eine komplette Beschreibung mit Code. Getestet hatte ich dies nicht am asuro, aber Henks Programme laufen eigentlich immer ;.-.)
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Ein Programm schreiben das RC5, oder welches ähnliches Protokol auch, interpretiert mit nur Anfänger Programier Verständnis wurde ich als eine ganz schwierige Sache beurteilen. Damit das richtig und Verlass-bar Funktionieren soll muss man den Timers und Interuptroutinen benutzen. Weil die Dauer von den Bits Zeit-kritisch sind. Muss du Alles selbst rausfinden, oder darfst du schon Fertige Code von andere Leute benutzen?

    Die Erweiterte Code-bibliothek hat auch schon fertige RC5 Funktionen drin:

    http://www.asurowiki.de/pmwiki/pub/html/main.html

  6. #6
    oberallgeier, ich plane voraussichtlich eine Philips mit RC5 zu benutzen

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    RC5 ist halt recht gut dokumentiert und die Bitlängen lassen sich von der Trägerfrequenz des IR-Signals ableiten. Da beim asuro auch sleep() vom Timer des Trägersignals abgeleitet ist, kann man RC5 mit dem asuro auch ohne aktuelle Library recht einfach einlesen:

    Code:
    #include "asuro.h"
    
    #define pow1 150 // Langsame Geschwindigkeit
    #define pow2 200 // Schnelle Geschwindigkeit
    #define taste (!(PINC & (1<<PC4))) // Tastenabfrage
    #define keine_taste (PINC & (1<<PC4))
    
    unsigned int count, temp; // Zaehler, IR-Kommando
    unsigned char daten[14], ir_status; // IR-Datenspeicher, IR-Eingangspegel
    
    int main(void) {
    
    Init();
    do{
    	temp=0;
    	while (PIND & (1 << PD0)) //warten auf die Flanke des Startbits
    		{if keine_taste StatusLED(GREEN); else StatusLED(RED); // Tastenspielerei
    		 if taste BackLED(ON,ON); else BackLED(OFF,OFF);}
    	StatusLED(RED); // Alarmstufe ROT: ein Zeichen ist im Anflug
    
    	for (count=0; count<14; count++) { // im Gesamten warten wir auf 14 bits
    /*
    lt. Spettel-Diagramm betraegt die Bitlaenge 1,778 ms. Bei 36 Takten pro Millisekunde ergibt das 36*1,778 = 64
    */
    	Sleep(48); // Information einlesen nach 3/4 der Bitlaenge
    	   ir_status=(PIND & (1 << PD0)); // Pegel Speichern
    	   if (ir_status) daten[count]='1'; else daten[count]='0'; // und merken für Ausgabe an Terminal
    	   if (ir_status) temp |= (1 << (13-count)); // das MSB(=mostsuefikantbit) zuerst
    	   while (ir_status == (PIND & (1 << PD0))); // Bit gelesen, warten auf naechste Flanke
    	}
    	temp=temp/2 & 0xf; // Die Info steht in den Bits 1-4
    	StatusLED(YELLOW); // Daten gelesen
    	//Msleep(2000); // Zeit um den IR-Transceifer ueber den asuro zu bringen
    	SerWrite("\n\r",2);
    	SerWrite(daten,14); // Bitmuster zum PC senden
    	SerWrite("-",1);
    	PrintInt(temp); // erkannte Daten zum PC senden
    
    /* asuro steuern.
    	Mit dem 10er-Block der Fernbedienung kann der asuro nun gesteuert werden:
    	Alle anderen Tasten stoppen den asuro
    */
    
    	switch (temp) {
    	   case 1: MotorDir(FWD,FWD); MotorSpeed(pow1,pow2); break;
    	   case 2: MotorDir(FWD,FWD); MotorSpeed(pow2,pow2); break;
    	   case 3: MotorDir(FWD,FWD); MotorSpeed(pow2,pow1); break;
    	   case 4: MotorDir(BREAK,FWD); MotorSpeed(0,pow1); break;
    	   case 5: MotorDir(BREAK,BREAK); MotorSpeed(0,0); break;
    	   case 6: MotorDir(FWD,BREAK); MotorSpeed(pow1,0); break;
    	   case 7: MotorDir(RWD,BREAK); MotorSpeed(pow1,0); break;
    	   case 8: MotorDir(RWD,RWD); MotorSpeed(pow1,pow1); break;
    	   case 9: MotorDir(BREAK,RWD); MotorSpeed(0,pow1); break;
    	   default: MotorDir(BREAK,BREAK); MotorSpeed(0,0); break;
    	}
    	StatusLED(GREEN); //endlos
    	//Msleep(1000);
    
    }while (1);
    return 0;
    }
    (Aus https://www.roboternetz.de/community...l=1#post264230)

    Aufgedröselt wird der Code dann hier: https://www.roboternetz.de/community...l=1#post406385

    Das Prinzip: Man wartet auf die Flanke des Startbits und liest die folgenden 14 Datenbits in dem Moment ein, wenn die manchestercodierten Bits den richtigen Pegel haben:

    Code:
    	temp=0;
    	while (PIND & (1 << PD0)); //warten auf die Flanke des Startbits
    	StatusLED(RED); // Alarmstufe ROT: ein Zeichen ist im Anflug
    
    	for (count=0; count<14; count++) { // wir warten auf 14 Bits
    
    	Sleep(48); // Information einlesen nach 3/4 der Bitlaenge
    	   ir_status=(PIND & (1 << PD0)); // Pegel einlesen
    	   if (ir_status) daten[count]='1'; else daten[count]='0'; // und merken für Ausgabe an Terminal
    	   if (ir_status) temp |= (1 << (13-count)); // das MSB(=mostsuefikantbit) zuerst
    	   while (ir_status == (PIND & (1 << PD0))); // Bit gelesen, warten auf naechste Flanke
    	}
    	temp=temp/2 & 0xf; // Die Info steht in den Bits 1-4
    	StatusLED(YELLOW); // Daten gelesen
    In temp steht dann der RC5-Wert, in daten[] der dazugehörige ascii-String zur Ausgabe an einem Terminal.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Benutzer Stammmitglied Avatar von Spacy Bar
    Registriert seit
    10.05.2014
    Beiträge
    34
    Mein Code dafür hat keine echte Fernsteuerung, sondern nur eine Abfolge von Operation nach eintreffen von Signalen einer Fernsehfernbedienung:
    Code:
    #include "asuro.h"
    void start(void){
    	unsigned char los[12];
    	StatusLED(YELLOW);
    	SerRead(los, 12, 0);
    	SerWrite("Fahre Los!\n\r", 13); 
    	StatusLED(GREEN);
    	MotorDir(FWD,FWD);
    	MotorSpeed(245,255);
    	BackLED(OFF,OFF);
    }
    void stop(void){
     	unsigned char pause[15];
    	SerRead(pause, 15, 0);
    	SerWrite("Halte an!\n\r", 12);
    	MotorDir(BREAK,BREAK);
    	StatusLED(YELLOW);
    	BackLED(OFF,OFF);
    }
    void restart(void){
    	unsigned char bwd[12];
    	SerRead(bwd, 12, 0);
    	SerWrite("Fahre zurück!\n\r",16);
    	MotorDir(RWD,RWD);
    	MotorSpeed(245,255);
    	StatusLED(RED);
    	BackLED(OFF,OFF);
    }
    
    void left(void){
    	unsigned char leftcommand[12];
    	SerRead(leftcommand, 12, 0);
    	SerWrite("Fahre nach links!\n\r",20); 
    	MotorDir(FWD,FWD);
    	MotorSpeed(190,255);
    	StatusLED(GREEN);
    	BackLED(ON,OFF);
    }
    
    void right(void){
    	unsigned char rightcommand[12];
    	SerRead(rightcommand, 12, 0);
    	SerWrite("Fahre nach rechts!\n\r", 21);
    	MotorDir(FWD,FWD);
    	MotorSpeed(255,200);
    	StatusLED(GREEN);
    	BackLED(OFF,ON);
    }
    
    void leftb(void){
    	unsigned char leftbcommand[12];
    	SerRead(leftb, 12, 0);
    	SerWrite("Fahre rückwerts nach links!\n\r",30);
    	MotorDir(RWD,RWD);
    	MotorSpeed(190,255);
    	StatusLED(RED);
    	BackLED(ON,OFF);
    }
    
    void rightb(void){
    	unsigned char rightbcommand[12];
    	SerRead(rightbcommand, 12, 0);
    	SerWrite("Fahre rückwerts nach rechts!\n\r",31);
    	MotorDir(RWD,RWD);
    	MotorSpeed(255,200);
    	StatusLED(RED);
    	BackLED(OFF,ON);
    }
    
    void end(void){
    	unsigned char endcommand[15];
    	SerRead(endcommand, 15, 0);
    	SerWrite("Schlafe!\n\r",11);
    	MotorDir(BREAK,BREAK);
    	StatusLED(OFF);
    	BackLED(OFF,OFF);
    	Sleep(255);
    	Sleep(255);
    }
    
    int main(void)
    {   
    	
    	Init();
    	while(1){
    		start();
    		stop();
    		stop();
    		left();
    		stop();
    		stop();
    		right();
    		stop();
    		stop();
    		restart();
    		stop();
    		stop();
    		leftb();
    		stop();
    		stop();
    		rightb();
    		stop();
    		stop();
    		end();
    		end();
    		}
    	return 0;
    }
    Ich hoffe der Code erschlägt dich nicht.

    LG
    Spacy Bar

Ähnliche Themen

  1. RP6 mit Fernbedienung steuern
    Von Mario94 im Forum Robby RP6
    Antworten: 16
    Letzter Beitrag: 29.12.2010, 12:17
  2. probleme beim steuern mit fernbedienung
    Von proevofreak im Forum Robby RP6
    Antworten: 7
    Letzter Beitrag: 17.04.2008, 16:03
  3. Asuro erlernt Signal einer Fernbedienung
    Von mathbot im Forum Asuro
    Antworten: 3
    Letzter Beitrag: 14.07.2006, 10:23
  4. Antworten: 16
    Letzter Beitrag: 11.02.2006, 17:39
  5. ASRU mit mul. Fernbedienung steuern?????
    Von Elle im Forum Sensoren / Sensorik
    Antworten: 6
    Letzter Beitrag: 31.01.2006, 23:10

Berechtigungen

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

LiTime Speicher und Akkus