Hallo,
schon mal danke für den Sendepart. Ich grüble zwar noch wie diese For Schleife genau arbeitet. Aber ich denke, da komme ich noch drauf.
Zu: ein wenig einschalten.
Die Funktion listen_to_code zählt ja wie lange der Pin ausgeschalten ist.
Da am Empfänger Modul am Anfang ja kein Strom an PC0 anliegt, zählt der Zähler natürlich gleich mal hoch. Aus diesem Grund schalte ich PA0 am Sender erst mal für 3 Sekunden ein, damit wird beim Empfänger ein Reset der Variablen ausgeführt. Gibt es dafür eine bessere Lösung ?
Hier noch der überarbeitete Listen Code. Jetzt mit richtigen Variablennamen:
PS: IR oder Funk ist dafür leider keine Lösungsmöglichkeit.Code:void listen_to_code(void){ PORTA &= ~(1<<PA0); //OFF unsigned int off_duration=0; unsigned int on_duration=0; int bitnr=0; int bit[2]; while (1){ if ( ( PINC & 0x01 ) != 0 ) { on_duration++; if (on_duration > DEF_SLEEP_BETWEEN_SEND_DET) { //Reset off_duration=0; bitnr=0; on_duration=0; } if ((off_duration > DEF_TIME_BIT1_MIN) && (off_duration < DEF_TIME_BIT1_MAX)){ bit[bitnr] = 1; bitnr++; }else if ((off_duration > DEF_TIME_BIT0_MIN) && (off_duration < DEF_TIME_BIT0_MAX)){ bit[bitnr] = 0; bitnr++; } off_duration=0; if (bitnr == 3){ bitnr=0; //Auswerten if ( (bit[0] == 0) && (bit[1] == 1) && (bit[2] == 0) ){ PORTA |= (1<<PA0); //ON my_sleep_ms(1000); PORTA &= ~(1<<PA0); //OFF } } }else{ //Pin off on_duration=0; if (off_duration <= DEF_TIME_BIT1 + 1000){ off_duration++; } } my_sleep_ms(1); } }
Später wird damit folgendes Abgebildet
M1 ... M6 = ein Relai Modul in der Antenne.Code:===M1=====M2====M3======M4======M5=====M6===== || || || ||
== = Antenne
|| = Zuleitung zur Antenne.







Zitieren

Lesezeichen