Stap 4: Schrijven programma
BELANGRIJKE opmerking: LiquidCrystal bibliotheek
Op het moment van schrijven van dit komt de LinkIt één IDE met versie 1.6.5 van de Arduino IDE, die toevallig ook een waar de LiquidCrystal -bibliotheek die wij gebruiken is gebroken. Kijk naar dit Instructable op hoe de bestanden wilt vervangen LiquidCrystal met werken van degenen.
Intro
Ik ben ervan uitgaande dat u al hebt ingesteld uw Arduino IDE te werken met de LinkIt One, zo niet, neem een kijkje op de "getting started" gids hier.
Ik heb mijn definitieve code bijgevoegd met deze stap, u moet zitten kundig voor lezen via het en haar opmerkingen om een vrij goed idee van hoe het werkt. Ik zal beschrijven hier de belangrijke segmenten.
Importeren van bibliotheken
De eerste stap is opgenomen van de verschillende bibliotheken die zullen worden gebruikt.
Variabelen definiëren
Daarna definiëren we verschillende globale variabelen die worden gebruikt in het programma. U zult zien dat een aantal van hen zijn gedefinieerd als "char naam [x]" wat betekent dat ze een matrix van x tekens, die is gebruikt voor het opslaan van dingen zoals het SMS-bericht of een bericht van de status.
Setup functie
Deze functie wordt uitgevoerd als wanneer de Raad van bestuur laarzen.
waitForSim() functie
De rest van het programma zal niet werken als de SIM-kaart niet is geïnitialiseerd, zodat deze functie alleen het apparaat in een lus houdt, wachten op de SIM-kaart klaar te zijn (en afdrukken van kleine puntjes op de seriële interface, zodat u het weet nog niet overleden).
receiveSMS() functie
Deze functie zal controleren of er een nieuwe SMS. Als er een, het is gelezen in, één teken tegelijk, en wordt opgeslagen in de buffer van de smsContent (een karakter array), dan retourneert de functie hoog (true/1). Als er geen nieuwe SMS retourneert de functie lage (false/0). Dit kan we noemen het zo vaak als we zoals in de hoofdlus, maar alleen iets doen als er een nieuw bericht.
De "newMessage" boolean is ook ingesteld op TRUE wanneer een nieuw bericht is ontvangen.
Zodra de SMS heeft gelezen het is verwijderd met de opdracht flush().
chargeStatus() functie
Deze functie maakt een tekstregel 16 karakter over laadstatus.
Lbattery.isCharging() retourneert een 1 als de batterij wordt opgeladen en een 0 als het niet.
Lbattery.level() retourneert 0,33,66 of 100, afhankelijk van de huidige laadniveau van de batterij.
We gebruiken de "sprintf"-functie voor het opmaken van de uitvoer van de vorige twee functies in een mooie lijn van tekst, die slaan wij op in de karakter array van statusMessage voor gebruik in de updateDisplay() functie.
updateDisplay() functie
Dit is waar alle eerder gegenereerde inhoud wordt verzonden naar het LCD-scherm voor weergave. Het zal het meest zinvol om te lezen het door en kijken naar de inline-opmerkingen maken.
Het eerste ding op te merken is het gebruik van een teller, die neemt nota van het wanneer het scherm voor het laatst werd bijgewerkt (in milliseconden, geboden door de Arduino millis() functie), en alleen weer bijgewerkt als er voldoende tijd (scrollInterval) is verstreken.
Het scrollen aan het bericht op de 2e regel wordt bereikt door het opslaan van twee variabelen:
msgStartChar
Deze variabele slaat welk teken van de inhoud van de SMS we eerst afdrukken zijn (omdat we niet de hele 160 karakter sms op een regel van 16 tekens past)
lcdStartChar
Deze variabele opgeslagen waar op het LCD-scherm het bericht begint, omdat we willen dat het bericht om te scrollen van rechts, het kan niet altijd gewoon beginnen op het eerste teken.
Elke keer dat de weergave wordt bijgewerkt we beginnen van rechts (positie 15) en lcdStartChar verkleinen totdat het bericht op het eerste teken (positie 0) begint, dit effectief schuift het bericht links.
Eens het begin van het bericht is aan de linkerkant, het moet schuiven scherm, dus we verhogen de msgStartChar op elke update.