Stap 5: Het schema en CODE
Koppelverkoop de gemeenschappelijke verbindingen op grond houdt in dat u zal worden negatieve logica. Dat wil zeggen dat een actieve schakelaar wordt aangegeven door een lage (GND) op het signaal Pin van die Switch.
Mijn codevoorbeeld illustreert de pull-up weerstanden voor de SIPinput en PUFFinput pinnen activeren zodat u niet zou moeten toevoegen pull-up weerstanden in uw ontwerp. Laat gewoon de switches te rijden hun signaal laag om aan te geven dat ze zijn geactiveerd.
Hier volgt de Code-Segment dat relevant is voor de uitvoering van deze SIP & PUFF Switch in mijn ontwerp:
// ----------------------------------------------------------------
SIP & PUFF controle CODESEGMENT
Mark Theobald - www.DisabledAdventurers.com
Vrij om te gebruiken op elke manier je wilt!
// ----------------------------------------------------------------
// ----------------------------------------------------------------
PIN-TOEWIJZINGEN
// ----------------------------------------------------------------
int PUFFinput = 9;
int SIPinput = 10;
// ----------------------------------------------------------------
CONSTANTEN van de tijd - voor 16MHz Oscillator
// ----------------------------------------------------------------
lange VeryLongCt = 100000; Ongeveer 2 seconden
lange MinLongCt = 20000; Ongeveer 0,6 seconde
lange DebounceCt = 4000; Ongeveer 0.1 seconde
// ----------------------------------------------------------------
// ----------------------------------------------------------------
VOID Setup {}
pinMode (SIPinput, INPUT);
pinMode (PUFFinput, INPUT);
digitalWrite (SIPinput, hoge); Inschakelen van 20k pullup resistors
digitalWrite (PUFFinput, hoge); } //to vereenvoudigen switch input
// ----------------------------------------------------------------
// ----------------------------------------------------------------
void loop {}
int GotCmd;
lange teller;
Counter = 0; Begin van elke lus met de teller opnieuw ingesteld op 0
GotCmd = 0;
terwijl (! digitalRead (SIPinput)) {//Negative logica wordt gebruikt!
Hier code toevoegen om te controleren van de buitenwereld en reageren zo nodig
Als (teller ++ > VeryLongCt) {}
GotCmd ++;
Voeg code toe aan RespondToVeryLongSip(); zonder te wachten tot de release van de Sip
terwijl (! digitalRead (SIPinput)) //then wachten voor Sip-versie
Hier code toevoegen om te controleren van de buitenwereld en reageren zo nodig
} }
if (!. GotCmd) {//There was niet een zeer lange SIP...
Als (teller > MinLongCt) //but er was een lange SIP
Voeg code toe aan RespondToLongSip();
anders als (teller > DebounceCt) / / of, er was een geldige korte Sip
Voeg code toe aan RespondToShortSip(); }
Counter = 0;
GotCmd = 0;
terwijl (! digitalRead (PUFFinput)) {}
Hier code toevoegen om te controleren van de buitenwereld en reageren zo nodig
Als (teller ++ > VeryLongCt) {}
GotCmd ++;
Voeg code toe aan RespondToVeryLongPuff(); zonder te wachten tot de release van bladerdeeg
terwijl (! digitalRead (PUFFinput)) //then wachten voor bladerdeeg release
Hier code toevoegen om te controleren van de buitenwereld en reageren zo nodig
} }
if (!. GotCmd) {}
Als (teller > MinLongCt) //Long bladerdeeg
Voeg code toe aan RespondToLongPuff();
anders als (teller > DebounceCt)
Voeg code toe aan RespondToShortPuff(); } } }
// ----------------------------------------------------------------
EINDE VAN CODESEGMENT
// ----------------------------------------------------------------
Merk op dat de Code segmenten voor de SIP sectie en de sectie PUFF identiek zijn.
De code als een SIP of PUFF wordt gehouden voor een lange tijd (2 + seconden), wordt ervan uitgegaan dat sommige maatregelen moeten worden genomen immmediately zonder te wachten tot de SIP of PUFF worden vrijgegeven. Anders loopt de code "RespondTo... () "functies gebaseerd op zeer korte (0,1 tot 0,6 seconde) SIP's en de soezen, en enigszins langer (0.6-2 seconden) SIP's en de soezen. De tijd-constanten kan worden aangepast als de ontwerper voelt nodig is.