Hallo

PrintInt() dient hier nur zum Debuggen (=Programmfehler suchen), deshalb kann man das auskommentieren:

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;
}
(ungetestet)

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.


naja, mich interressiert das schon,
aber ich wollte gerne mal was sehen
Dann versuche doch mal etwas einfacheres. Eine Led einschalten oder blicken lassen, "Hallo Welt"...

Gruß

mic