Stap 4: Stap 4: Arduino Code
Ik zal gaan door de sectie bespreken de belangrijkste kenmerken van de code. Derden bibliotheken kunnen worden geïmporteerd uit GitHub. De LiquidCrystal en IRremote bibliotheken kunnen worden gevonden op GitHub. Ik had voor het maken van de bibliotheek vanaf nul voor de Sensor van de nabijheid van de HCSR04 (Hopelijk vindt u het gekoppeld hierboven). In deze bibliotheken, kunt u de variabelen die zijn vereist voor het verzenden van een opdracht of een functie aanroept. Elke bibliotheek heeft een C++ (software voor het coderen van) en de .h (extensie headerbestand). Als het maken van uw eigen bibliotheken, moet u beide maken.
Volgende die ik inga op de initialisatie van de variabelen. We hebben verschillende klassen van de Servo, IRremote, LiquidCrystal en HCSR04 bibliotheken en de variabelen die zijn gedeclareerd. Ik heb ook enkele van de knoppen op de afstandsbediening die ik gebruikte gedefinieerd. De klasse LiquidCrystal instantieert een LCD-object aangeduid als "lcd". Het LCD-adres is 0x27 met 16 kolommen en 2 rijen. De Sensor van de nabijheid van de HCSR04 heeft twee triggers. De "trigger"-pin is verantwoordelijk voor het afgeven van een puls. Deze puls stuitert terug (echos) of wordt afgevoerd in de ruimte. De "echo" pin ontvangt een zwevende waarde toegewezen aan pin 8. Deze trigger neemt in de geactiveerde pols en zet de waarde in centimeters (per mijn eigen ontworpen bibliotheek). De afstanden die de nabijheidssensor ontvangt worden gedefinieerd als zwevende waarden. Ze kon zijn gedefinieerd als integerwaarden maar ik wilde de metingen nauwkeurig te zijn en dit betekent dat de waarden die worden gelezen decimale waarden (een voorbeeld zou 6.52 cm).
Verplaatsen naar de setup, initialiseren ik de i2C-bus op het LCD-scherm dat ik gebruik. I2C bezuinigingen in wezen neer op het aantal pinnen dat ik moet gebruiken op mijn Arduino. Ik de achtergrondverlichting van de LCD-scherm ook worden geïnitialiseerd. Als u wilt uw resultaten op een seriële monitor bekijken moet u een Serial.begin(baudrate)-opdracht gebruiken om vast te stellen hoeveel symbolen om te lezen. Hiermee start u de communicatie tussen de Arduino en de seriële monitor. Ik schakel het LCD-scherm voor het geval dat er sprake is van onjuiste symbolen of letters op het scherm. Ik stel de cursor naar het midden van de eerste rij en juich de gebruiker naar de module. Hij wacht een seconde en het scherm opnieuw wordt gewist. De IR ontvanger is klaar om te nemen in de waarden van de IR RAS. Ook wordt de servomotor verplaatst naar positie 0.
Tot slot gaan we naar de hoofdlus. distance1 is aangegeven als de trigger wordt verstuurd en ontvangen. Deze waarde is van de sensor van de nabijheid naar de Arduino in centimeters gelezen. last_distance doet wat de naam al aangeeft. Het slaat de laatste afstand die kan worden gelezen. Meer in detail zal worden verstrekt over de functie van deze opdrachten later. De als (irrecv.decode (& resultaten)) opdracht wordt gebruikt voor het adres voor elke druk op de knop toewijzen. Elke knop heeft een eigen bit-stream gekoppeld. Omdat dit project is over het openen van een slot met een opgegeven waarde, moet deze opdracht worden de eerste lus in de hoofdlus. last_distance > distance1 vergelijkt de waarden die zijn opgeslagen. Als de vorige afstand groter dan de huidige afstand was is dan het scherm ontruimd omdat er niemand bij de deur. Evenzo, als distance1 < = 7 (cm) dan de gebruiker wordt gevraagd het wachtwoord op te geven. Slechts één waarde zal werken (9). Alle andere waarden (0-8) zal instrueren de gebruiker om opnieuw te proberen. Echter voor waarde = 9, de deur zal openmaken en begroeten de gebruiker. Ook is er een geneste for-lus in dit als verklaring. De geneste voor lus de motor maakt te schoppen op en simuleren de deur ontgrendelen. De afstand < = 7 is hier om te controleren of de gebruiker nog steeds bij de deur of als hij/zij is gegaan binnen of links. Als de gebruiker nog steeds bij de deur, blijft de deur open. De deur blijft open gedurende ongeveer 4 seconden kan de gebruiker door de deur te gaan en vervolgens het zal overgaan tot het sluit. Na de 4 seconden vertraging, is de servomotor losgekoppeld. Ik doe dit om te voorkomen dat teveel macht wordt geleverd aan de motor wanneer het niet in gebruik. Bovendien, heb ik serial.println() opdrachten voor het weergeven van de resultaten op de seriële monitor.
Als kort besproken prior, zal een andere knop in te drukken niet actuate de motor dus ik had om ervoor te zorgen dat een andere knop deed niets (waarden 0-8). Het LCD-scherm wordt de gebruiker gevraagd te proberen opnieuw. Als u uw wachtwoord bent vergeten, kunt u de EQ knop en het LCD-scherm zal prompt u voor de stem van de cursus. Het is een boodschap van "Herinnering" zeggen "herinnering: op een schaal van 0-9, hoe ontzagwekkend deze klasse is?" Na dit, het scherm wordt gewist en nu kun je in de juiste waarde van 9.
Dit volgende commando is erg belangrijk: irrecv.resume(); Als u het niet hier zetten, zal de ontvanger niet langer controleren voor een andere ingang. Deze opdracht voorkomt dat de lus na het indrukken van een knop of iteratie opsluiten.
Als de afstand groter dan 7 cm, maar minder dan 10 cm is, symboliseert dit de gebruiker naderen van de module of de deur. U zal opnieuw worden geïnstrueerd om het wachtwoord.
Sluiten van de lus, ik heb een final als verklaring. Als de laatste afstand groter dan de huidige afstand is, betekent dit dat de gebruiker nergens is te vinden. Bovendien, ik heb het controleren om ervoor te zorgen dat de gebruiker niet overal gezien worden door & & distance1 > 12 (cm). Dit betekent dat iemand er was, en verliet. Het scherm wordt weer gewist. Er is een geneste for-lus die zegt, oke ik zag dat de deur geopend, de vergrendeling werd verplaatst naar de ontgrendelde positie en nu zal ik terugplaatst in de vergrendelde positie. De servomotor vastzit en het LCD-scherm vertelt de persoon vaarwel. De motor wordt 35 graden terugverplaatst naar de vergrendelde positie. Nadat de servomotor is klaar met haar taak, is deze opnieuw om te voorkomen dat overdriving van de motor en het minimaliseren van het energieverbruik voor het aandrijven van de servomotor ontkoppeld. Dit is het einde van de lus en voortdurend zal draaien.