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:
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);
}
}
PS: IR oder Funk ist dafür leider keine Lösungsmöglichkeit.
Später wird damit folgendes Abgebildet
Code:
===M1=====M2====M3======M4======M5=====M6=====
||
||
||
||
M1 ... M6 = ein Relai Modul in der Antenne.
== = Antenne
|| = Zuleitung zur Antenne.
Lesezeichen