Hoe naar de Main Loop Ren voor je toetsenbord Entry System Arduino Project

U moet een hoofdlus rennen voor je toetsenbord entry systeem Arduino project. Er zijn slechts een paar dingen die de code doet om de vermelding systeem te bedienen. De hoofdlus werkt als volgt:

  1. Luister voor een sleutel.
  2. Als een toets is ingedrukt, stuur het naar de LED-display.
  3. Ophogen van het aantal toetsaanslagen op een rijtje.
  4. Voer het in de code buffer in de volgende beschikbare positie.
  5. Bepaal of vier cijfers zijn ingevoerd.

    Als dat zo is, controleer dan of de code geldig is.

  6. Als de code geldig is, opent de deur en reset alles voor de volgende keer.

Het belangrijkste wat je moet doen is controleren of er een toets is ingedrukt. De eerste instructie maakt een lokale char variabele genaamd sleutel tot het karakter dat wordt teruggestuurd vanuit een functie met de naam getKey () op te slaan. Denk aan de toetsenbordindeling? Dat is waar dit nummer komt uiteindelijk uit.

De char waarde uit toets wordt ook toegewezen aan de codeBuffer [] array, die je gebruikt om te testen of de code geldig is. Het wordt toegevoegd aan de positie opgeslagen keypressCount, die naar boven wordt verhoogd telkens wanneer een nieuw karakter wordt gedetecteerd. De "nulde" karakter is de eerste toetsdruk gedetecteerd. Dus codeBuffer [0] bevat de eerste toets ingedrukt op het toetsenbord codeBuffer [1] bevat de tweede toets gedrukt, enzovoort.

De volgende voorwaardelijke if wordt alleen uitgevoerd wanneer een toets wordt ingedrukt, op welk punt de stappen 2 tot en met 6 van de vorige lijst worden verwerkt. Als een toets niet is ingedrukt, wacht het programma voor dat dat gebeurt. Wanneer dit gebeurt, de sendCommand functie uitvoert:

sendCommand (keypressCount + 1, toets);

De sendCommand heeft twee parameters: die zeven-segment module nummer te veranderen, en wat dingen te veranderen naar. U gebruikt keypressCount niet alleen voor het bijhouden van het aantal keren dat de toetsen te houden zijn tot nu toe gedrukt, maar ook om te vertellen welke zeven-segment cijfers aan het licht.

Echter, keypressCount begint bij nul omdat de code [] de buffer [] char arrays beginnen hun nummering op nul, en je wilt die waarden op de juiste plaats op te slaan. Maar de Max chip begint de nummering cijfers van 1. Daarom, om keypressCount gebruiken om licht op de juiste zeven-segment cijfers, je moet één (1) toe te voegen aan de waarde ervan.

De volgende verklaring implementeert die handige debugging functie. Als u het DEBUG boolean hebben ingesteld op true, wordt de code uitprinten al je variabelen om de seriële poort.

Vervolgens moet je de keypressCount met één te verhogen en vervolgens te testen om te zien of vier cijfers zijn ingedrukt. Als dat zo is, is het showtime. De vertraging (500) verklaring geeft u een halve seconde tot de laatste toegangscode ingevoerde cijfer omdat het display zal veranderen afhankelijk van de vraag of de juiste toegangscode is ingevoerd zien. Deze test wordt gedaan met een klein beetje van de inheemse taal C-code:

if (memcmp (codeBuffer, code, 4) == 0) {
if (DEBUG) {Serial.println ("MATCH!");}
ontgrendelen ();
}

De functie memcmp () vergelijkt twee artikelen in het geheugen en neemt als parameters de twee items en hun verwachte lengtes. In dit geval Vergelijkt de codeBuffer array en de code opgeslagen aan het begin van het programma. Beide hebben een lengte van vier bytes.

Als ze zijn precies hetzelfde, de memcmp () functie geeft een nul en dat is precies wat je zoekt in de voorwaardelijke verklaring. Als ze hetzelfde zijn (en DEBUG waar is), "MATCH!" Wordt afgedrukt op de seriële poort en de unlock () functie wordt uitgevoerd. Als het geheugen vergelijking niet lukt, dan is de functie niet een "0", wat betekent dat de verkeerde code is ingevoerd terugkeren.

In beide gevallen, wilt u het scherm, klaar voor de volgende keer rond te wissen. Zodat je de clearDisplay () functie aan te roepen. Andere inheemse taal C instructie doet een beetje geheugen housekeeping:

memset (codeBuffer, 0, 4);

Dit wist de codeBuffer expliciet door hem op 0. De lengte is 4, dat is de tweede parameter. Sommigen beweren dat deze instructie is niet nodig, maar het is een goede gewoonte om expliciet te beheren geheugen in plaats van dingen aan het toeval overlaten.

Tot slot, want dit was de vierde toetsdruk en er zijn slechts vier cijfers te evalueren, de keypressCount moet op nul te zijn, zodat je klaar bent voor de volgende iteratie zijn.