Textmeddelande i en flaska (4 / 5 steg)

Steg 4: Skriv Program



VIKTIGT: LiquidCrystal bibliotek

Vid tiden för skriver detta kommer LinkIt en IDE med version 1.6.5 av Arduino IDE, som råkar vara en där LiquidCrystal biblioteket som vi använder är bruten. Titta på detta Instructable på hur man ersätta de LiquidCrystal filerna med arbetar de.

Intro

Jag antar att du redan har ställt in din Arduino IDE att arbeta med LinkIt One, om inte, ta en titt på "komma igång" guide över här.

Jag har kopplat min slutliga kod till detta steg, bör du läsa igenom det och dess kommentarer att få en ganska bra uppfattning om hur det fungerar. Jag ska beskriva de viktiga segment här.

Importera bibliotek

Det första steget är att med olika bibliotek som kommer att användas.

#include < LGSM.h >
#include < LiquidCrystal.h >
#include < LBattery.h >

Definiera variabler

Nästa vi definierar olika globala variabler som används i programmet. Du kommer att se att ett antal av dem definieras som "char namn [x]" vilket innebär att de är en matris med x-tecken, som är använda för att lagra saker som textmeddelande eller ett meddelande.

dessa variabler är för sms
char smsContent [160];
int smsLength = 0;
char smsSender [20].
booleska newMessage = låg;

variabler för batteristatus
char statusMessage [16].

initiera LCD-biblioteket med numrerar av gränssnittet stiften
LCD (RS, aktivera, DataBus4, DataBus5, DataBus6, DataBus7)
LiquidCrystal lcd (13, 12, 11, 10, 9, 8);
int scrollInterval = 500.
osignerade långa SenasteUppdatering = 0;
int msgStartChar = 0;
int lcdStartChar = 0;

Setup() funktion

Den här funktionen körs en gång när styrelsen stövlar.

void setup() {
LCD.BEGIN (16, 2); Ange den LCD antal kolumner och rader:
waitForSim(); vänta för simkort vara aktiv
Serial.BEGIN(9600); starta den seriella porten
}

waitForSim() funktion

Resten av programmet fungerar inte om SIM-kortet inte är påbörjas, så denna funktion just håller enheten i en loop, väntar på SIM-kortet vara redo (och skriva ut små prickar på den seriella gränssnittet, så att du vet att det inte har dött).

void waitForSim() {
Serial.Print ("väntar sim");
tag (!. LSMS.ready())
{
Delay(250);
Serial.Print('.');
}
Serial.println ("SIM-Ready");
}

receiveSMS() funktion

Denna funktion kommer att kontrollera om det finns ett nytt SMS. Om det finns en, de läsa i, ett tecken i taget, och förvaras i smsContent buffert (en karaktär array), sedan returnerar funktionen hög (true/1). Om det finns inga nya SMS returnerar funktionen låg (falskt/0). Detta gör att vi kan kalla det så ofta som vi i stora slingan men bara göra något om det finns ett nytt meddelande.

"newMessage" boolean har också angetts till TRUE när ett nytt meddelande tas emot.

När SMS-meddelandet har blivit läst tas bort med kommandot flush().

booleska receiveSMS() {
denna funktion kommer att lagra en ny sms i buffertar
eller returnera false om det finns inga nya sms
int v.
om (LSMS.ready() & & LSMS.available()) / / kolla om det finns nya SMS
{
Serial.println ("det finns nya meddelande.");
newMessage = hög;
LSMS.remoteNumber (smsSender, 20); Spara avsändaren i buffert

smsLength = 0; lagra ett nytt sms
medan (sant)
{
v = LSMS.read();
om (v < 0)
bryta;
smsContent [smsLength] = v;
smsLength ++;
}
smsContent [smsLength] = '\0';
smsLength ++;
LSMS.flush(); ta bort meddelande
returnera hög;
}
annat {
returnera låg;
}
}

chargeStatus() funktion

Denna funktion skapar en 16 tecken textrad om laddningsstatus.

Lbattery.isCharging() returnerar en 1 om batteriet laddas och 0 om det inte är.

Lbattery.level() returnerar 0,33,66 eller 100 beroende på batteriets nuvarande laddningsnivå.

Vi använder funktionen "sprintf" för att formatera utdata från de tidigare två funktionerna i en fin rad med text, som vi lagrar i matrisen statusMessage karaktär för användning i updateDisplay()-funktion.

void chargeStatus() {
IF(LBattery.isCharging()) {
sprintf (statusMessage, "% 3d %% laddning", LBattery.level());
}
annat {
sprintf (statusMessage, "% 3d %% debiteras", LBattery.level());
}
}

updateDisplay() funktion

Det är där alla tidigare skapade innehållet skickas till LCD-skärmen visas. Det kommer att göra det bästa bemärkelse att läsa igenom och titta på de infogade kommentarerna.

Det första att notera är att använda en räknare, som noterar när skärmen uppdaterades senast (i millisekunder, som tillhandahålls av funktionen Arduino millis()), och bara uppdaterar det igen om tillräcklig tid (scrollInterval) har förflutit.

Rullning av meddelandet på den 2: a raden uppnås genom att lagra två variabler:

msgStartChar

Denna variabel lagrar vilken karaktär av SMS innehåll vi skriver ut först (eftersom vi inte kan passa hela 160 tecken sms på en 16 tecken)

lcdStartChar

Denna variabel lagrar var på LCD-skärmen meddelandet börjar, eftersom vi vill att meddelandet att bläddra i från höger, det går inte alltid bara att starta efter det första tecknet.

Varje gång som skärmen uppdateras vi börjar från höger (position 15) och minska lcdStartChar tills meddelandet börjar efter det första tecknet (position 0), detta rullar effektivt meddelandet kvar.

En gång i början av meddelandet är längst till vänster, måste rulla bort-skärm, så vi öka msgStartChar på varje uppdatering.

void updateDisplay() {
denna funktion kommer att rulla meddelandet på en rad och Visa batteristatus å andra
osignerade långa currentMillis = millis();
om (currentMillis - SenasteUppdatering > scrollInterval) {
SenasteUppdatering = currentMillis;

få batteristatus
chargeStatus();

LCD.Clear(); först rensa vi hela lcd
lcd.setCursor (0, 0); ställa markören till första raden
LCD.Print(statusMessage);

skriva ut sms på 2: a raden
om (newMessage == hög) {
msgStartChar = 0; gå till första raden i nya meddelande
lcdStartChar = 15.
newMessage = låg; meddelande behandlas
}

lcdStartChar = max (0, lcdStartChar - 1); flytta en char på meddelandet (för rullning)
lcd.setCursor (0, 1); Ställ in markören till nedersta raden

för (int j = 0; j < = 15; j ++) {
om (j < lcdStartChar) {
LCD.Print("");
}
annars om ((msgStartChar+(j-lcdStartChar)) < (smsLength-1)) {
LCD.Print(smsContent[msgStartChar+(j-lcdStartChar)]);
}
annat {
LCD.Print("");
}

}

om (lcdStartChar < = 0) {
msgStartChar ++; flytta meddelande till vänster
}
om (msgStartChar > = smsLength) {
Serial.println ("slutet av meddelandet");
Vi har kommit till slutet av meddelandet, gå tillbaka till början
lcdStartChar = 15.
msgStartChar = 0;
}
}
}

Se Steg
Relaterade Ämnen

Golf bollar i en Cola flaska

Sätta några golfbollar inuti en Cola flaska!Detta är en förbryllande visuellt objekt och en snygg konversation bit som jag gjort bara för skojs skull. Det skulle göra en stor gåva för Coca-Cola och/eller golf älskare i ditt liv... eller för någon som...

ÅTERVUNNEN flaska råttfälla

I detta Instructable guidar jag dig att göra en billig och effektiv mus fälla med hjälp av en återvunnen Cola flaska och några hushåll stationeries.Du kan titta på denna videoRåttor bor i en grupper och föredrar att bo bredvid personer att hitta mat...

Öl flaska lås

När du har gäster över för semester, inte kasta pärlor för svin. Göra en 3D-tryckt flaska låsa för hantverk öl, och låt dina vänner och familj drink de billiga sådana. Bah Humbug!Steg 1: Design Det första steget i konstruktionen är att mäta flaskan....

Knappen Cookies i en flaska

jag hålla dekorativa containrar runt så de är tillgängliga när någonsin jag bakar kakor och andra godsaker. Vi kan inte äta allt jag bakar, så ger jag alltid extra till mina vänner och familj. Dessa behållare erbjuder en trevlig presentation för någr...

En enkel klaviatur i en flaska dekoration

ett enkelt och billigt sätt att göra en elegant present till din nördiga (eller inte) vän.Steg 1: Behövs material och verktyg För detta enkla projekt behöver du...Material:En tom vinflaska (eller någon annan snygg genomskinlig behållare)Ett tangentbo...

Ballong i en flaska

Gör ballong i en flaska! Det är en rolig sak!Så låt oss komma igång!Steg 1: behöver! Du behöver detta saker:FlaskaBallongKnivSteg 2: Ta bort etikett! Ta bort flaskans etikett med kniv!Steg 3: Tryck på flaska! Komprimera flaskan mer!Steg 4: Infoga bal...

Berni. 3D tryckta gemensamma för öl flaska möbler

Vår inlämning för 3D utskrift konkurrensen är en produkt för fattiga studenter som vi själva. Vi ville använda hittade material kombinerat med 3D tryckta delar att skapa användbara och estetiskt tilltalande möbler. Eftersom det finns ingen brist på a...

Flaska rökelse brännare

tur alla dekorativa (jag använder vinflaskor) flaska i ett askfritt rökelse brännare. Med mindre än sju dollar diamond chip dremel BITS, kan du borra ett hål så att luftflödet i en fin flaska utan krossat glas.Bär en mask, orsaka "glas pulver är inte...

Flaska-botten te ljus

Hej alla och tack för besöket! Några av er kanske har använt återvunnet glasflaskor tidigare för craft-projekt. För er som inte har, bör du prova det! Det finns massor av chanser för begagnade glasflaskor göra intressanta och användbara artiklar för...

Duct Tape flaska

först kommer du behöver flaska silvertejpSteg 1: Nästan klar Nästa man lägga en bit tejp bakåt där klibbiga sida touchs icke-klistrig sida och pinnarSteg 2: Sista steget Hålla det till fören och göra så många av dessa och du har din flaska av bågar...

Balansera flaska träd!

Känner du dig obalanserad? Nu får du arbeta på att vingla som du skapar minst ekologiska skogen genom tiderna!Jag gjorde detta projekt att börja utredningar i balans, spakar, masscentrum och återvinning med mina elever. Efter att ha sett sina vilda t...

Flaska Boogie flöjt!

Om du fick några boogie tappas upp, lägga till denna återvunna demagog din list! Om du i det för fysiken i phun, detta är ett stort projekt med ungdomar och vuxna att börja få en idé av resonans, vibrationer, och hur ljud fungerar. Lägg några vetensk...

En flaska anpassade USB Flash Drive

Vad kan en göra med en flaska och USB-enhet och tid :) Låt oss se.Steg 1: Låt oss dela upp det.Jag gillar formen på denna Bulk USB Flash Drive, men jag tänkte att det är alldeles för tråkigt och lite liten för mig, jag trodde jag skulle göra något me...

Mammas lilla Hottie (varmvatten flaska cover)

det blir kallare för veckan, vintern närmar sig och det betyder att min mamma kommer att börja få riktigt kyliga fingrar och tår. Och eftersom det är mammas dag och jag har inte gjort någonting för henne i år... Jag tror det är på tiden.Du behöver:-P...

Vackra Pop flaska fjärilar

söker en rolig sommar hantverk eller kanske något att roa barnen en regnig dag eller kanske något för en insamling? Leta längre. Dessa enkla att göra glasmålningar fjärilar är lösningen. Jag lärde mig först att göra dem från en kompis som sålde dem p...

Gas flaska bollen Grill

Jag fick räckte över en gammal gas flaska från en vän. Jag märkte att detta inte är en returemballage flaska, så vad göra med den.Jag har naturligtvis bygga en boll grill, till lean svetsning igen.Steg 1: Dela upp flaskan och borra några hålSe till a...

Hur man gör ett moln i en flaska

Det är mycket lätt att göra ett moln inne i en flaska. Det finns många sätt att göra det men jag skulle göra det grundläggande sättet att göra det. Detta fungerar när avdunstar vattnet inuti flaskan på grund av röken från tändsticka som gör den avdun...

Fisk flaska Trap

Detta var en av de första saker jag minns byggnad som ett barn och kunskap har bott med mig hela mitt liv. Denna lilla fisk fälla är lätt att göra och mycket billig också, vilket gör det perfekt projekt att börja med.Besök vår bloggför fler projekt.S...

FLASKA och glas hylla

Denna upp-cykel var del av ett college projektet (Medicine Hat College) för en icke statlig organisation kallas Habitat for Humanity. Vi skulle till upp-cykel någon produkt från Habitat för mänskligheten återställning och öka dess värde. Vi fick $20...