SMS kontrollerade Gate/Garage Remote (4 / 4 steg)
Steg 4: Skriva koden
Det första läste jag MediaTek LinkIt en Developer's Guide, i synnerhet avsnittet om du vill få smses som API. Jag har bifogat guiden här om denna länk slutar att fungera.
Jag har bifogat min fullständiga koden här, som ska bara fungera. Jag bröt den särskilt i små funktioner som bör vara lätt att förstå, jag kommer gå igenom var och en av dem här. Läs de infogade kommentarerna också för extra information.
Initialisera globala variabler
#include < LGSM.h >
dessa variabler används för LED
int ledGreenPin = 13. Jag använder den inbyggda LED som indikator
booleska ledGreenState = låg;
Detta är den PIN-kod som är ansluten till transistorn bas (via en resistor)
int triggerPin = 12;
dessa variabler är för sms
char smsContent [200].
int smsLength = 0;
char smsSender [20].
dessa variabler är för lösenord
CONST int passwordLength = 20; antal möjliga tecken i lösenord, kom ihåg den null terminatorn
CONST char lösenord [passwordLength] = "mellon"; Detta är den faktiska lösenordet
Setup() funktion
Setup-funktionen körs en gång när enheten startar. PIN-koden som styr ombord ledde (D13) och pin ansluten till transistorns base (D12) är initierats som resultat och till standardvärden för 0 ("låg").
Den seriella porten är förberetts på baudvärde för 9600, så att avlusningsinformation kan skrivas ut.
Funktionen waitForSim() anropas en gång (beskrivs senare)
void setup() {
denna kod körs en gång på setup
pinMode (ledGreenPin, produktionen); initialisera LED
pinMode (triggerPin, produktionen); initialisera PIN
digitalWrite (ledGreenPin, ledGreenState); Inaktivera LED
digitalWrite (triggerPin, låg); se till att utlösa är avstängd (under förutsättning att NPN transistor på en pullup ingång)
Serial.BEGIN(9600); starta den seriella porten
waitForSim(); vänta för simkort vara aktiv
}
waitForSim() funktion
Funktionen waitForSim() sitter helt enkelt i en loop, kontrollera varje halv sekund, definieras av delay(500), om SIM-kortet är klar. Den gröna lysdioden slås på/av varje kontroll så att det blinkar och sedan vänster på en gång SIM är redo.
void waitForSim() {
Detta är bara en funktion att vänta tills SIM-kortet är klar
Serial.Print ("väntar sim");
tag (!. LSMS.ready())
{
Delay(500);
ledGreenState =! ledGreenState; blinka led
digitalWrite (ledGreenPin, ledGreenState);
Serial.Print('.');
}
ledGreenState = hög; Aktivera ledde på när SIM är klar
digitalWrite (ledGreenPin, ledGreenState);
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. Om det finns inga nya SMS sedan returnerar funktionen falskt. Detta gör att vi kan kalla det så ofta vi vill i det viktigaste kretsar.
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.available()) / / kolla om det finns nya SMS
{
Serial.println ("det finns nya meddelande.");
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;
}
}
displaySMS() funktion
Denna funktion skriver bara ut avsändare och innehåll buffertar till den seriella porten, vilket är praktiskt för felsökning.
void displaySMS() {
Serial.Print("Sender:");
Serial.println(smsSender);
Serial.Print("Content:");
Serial.println(smsContent);
Serial.println();
}
validatePassword() funktion
Denna funktion används för att jämföra innehållet i SMS med lösenord snöre. Om innehållet matchar strängen, då funktionen returnerar 1 (hög), annars returneras 0 (låg).
booleska validatePassword() {
den här funktionen returnerar true om innehållet i sms börjar med definierade lösenord
Serial.Print ("jämföra");
Serial.println(Password);
Serial.Print ("med");
Serial.println (smsContent);
om (strcmp (lösenord, smsContent) == 0) {
Serial.println ("giltigt lösenord");
returnera hög;
}
annat {
Serial.println ("lösenord ogiltigt");
returnera låg;
}
}
triggerRemote() funktion
Funktion som denna funktion helt enkelt sätter D12 pin (transistor bas) högt för en viss tid (1 sekund fungerade för mig, du fjärrkontrollen kanske föredrar något annat)
void triggerRemote() {
denna funktion kommer att "vända på" transistorn som emulerar en knapptryckning
Serial.println ("efterlikna tryck på knapp");
digitalWrite (triggerPin, hög);
Delay(1000);
digitalWrite (triggerPin, låg);
Serial.println ("efterlikna knapp release");
}
loop() funktion
Denna funktion är kärnan i en Arduino program och kör bara om och om igen för all evighet. Eftersom allt redan har brutits ned till funktioner är det helt självförklarande.
void loop() {
om (receiveSMS()) {
displaySMS();
om (validatePassword()) {
triggerRemote();
}
}
Delay(1000);
}