Stap 3: Het protocol betreffende uw microcontroller opnieuw implementeren
Begin met het schrijven van functies voor lange en korte pulsen. Hieronder vindt u enkele pseudocode om te beginnen, afzonderlijke implementaties kunnen variëren.
VOID bit_long()
{
set_pin_high();
delay(HIGH_TIME_LONG);
set_pin_low();
delay(LOW_TIME_LONG);
}
VOID bit_short()
{
set_pin_high();
delay(HIGH_TIME_SHORT);
set_pin_low();
delay(LOW_TIME_SHORT);
}
Door het meten van de puls breedte met uw analyzer of van scope cursor functies krijgt u de tijd-constanten zijn. Gebruik de juiste vertraging functie (microseconde/milliseconde) aan de gemeten breedte het meest geschikt. Op AVR zijn _delay_us() en _delay_ms(), beide uit de < util/delay.h > bibliotheek.
Start uitvoering van uw verzendingen. Beginnen met een functie voor de preambule en een functie voor het einde reeks, vervolgens maken van functies voor de interne gegevens van elke knop. Ofwel kunt u een functie voor elke knop, of als u kunt achterhalen wat het protocol doet u kunt schrijven een functie die het toepasselijke bericht van uitgangsnummer en aan/uit-ingangen bouwt. Ik koos voor het eerste als het protocol niet direct correleren uitgangsnummer en on/off staat in de gegevens, eerder het was gewoon één lange puls voor de ingedrukte drukknop. Bijvoorbeeld:
VOID send_preamble()
{
bit_short();
bit_long();
bit_long();
bit_short();
bit_long();
bit_short();
}
Tot slot, het gebruik van deze functies in een for-lus om te sturen hen ongeveer 10 - 20 keer, met de nodige vertraging tussen overbrengingen (u kunt de afmetingen van deze vertraging met uw scope of analyzer). Bijvoorbeeld:
for (int i = 0; ik < 10; i ++)
{
send_preamble();
send_outlet_1_on();
send_end_sequence();
_delay_ms(10);
}
Vervolgens bouwen een switch/case of trapsgewijze if/else statement met een van deze blokken voor elke knop, met behulp van outlet nummer en switch staat als uw if/else voorwaarden.
Ten slotte, een seriële bibliotheek importeren of schrijf uw eigen seriële poort interrupt routine. In die routine te onderbreken, stelt u zowel de uitgangsnummer als de schakeloptie staat van ontvangen gegevens. Vluchtige variabelen gebruiken zodat ze kunnen worden gewijzigd binnen een ISR, zodat de hoofdlus kunt inhaken op de ingestelde variabelen en de gewenste overdracht uit te voeren. Vergeet niet om het initialiseren van uw seriële poort en uw baud-rate in te stellen voordat u begint uw hoofdlus!