Das übersteigt leider auch meine Kenntnisse ;(
Ich bin erst seit ~2 Monaten aktiv am Asuro
Der asuro müßte also nach erfolgreichem Empfang eines RC5-Signals den Wert in cmd zum Terminal senden (hexadezimal). Kommt da was an?
Wie kann ich das Prüfen?
Ich habe mich noch nicht so sehr mit dem Programm selbst beschäftigt, weil ich erst sichergehen wollte, dass es funktioniert, da ich eine schriftliche Arbeit zu dem Thema verfassen muss.
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 Gesammten 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
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;
}
Das ist ja das Programm aus deinem Beitrag in einem anderen Thread, stimmt es, dass es bei nahezu jeder Philips-Fernbedienung funktioniert?
Dann könnte ich ja auch das verwenden, meine Universal ist von Philps
und kann auf mehrere Philips Fernseher eingestellt werden.
Vielleicht meldet sich ja noch ein Experte, der sich schon mit der RC5-Erweiterung beschäftigt hat.
*Edit*
Das mit der Odometrie hat sich erledigt, habs noch halbwegs hinbekommen, für den 2. Platz bei dem Wettbewerb in der Schule hat es gereicht
Gruß
Seuche
Lesezeichen