Hallo
PrintInt() dient hier nur zum Debuggen (=Programmfehler suchen), deshalb kann man das auskommentieren:
(ungetestet)Code:#include "asuro.h" // für die CD-LIB mit 72kHz-Timer #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(96); // Information einlesen nach 3/4 der Bitlaenge (96 bei CD-LIB!) 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-Transceiver 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; }
Ich hoffe, dass funzt so. Die orginale CD-Lib läuft mit einem anderen Timertakt für Sleep(). Deshalb sollte das verzögerte Auswerten des Eingangs nach Sleep(96) erfolgen.
Dann versuche doch mal etwas einfacheres. Eine Led einschalten oder blicken lassen, "Hallo Welt"...naja, mich interressiert das schon,
aber ich wollte gerne mal was sehen
Gruß
mic







Zitieren

Lesezeichen