Arduino LCD (Nokia 5110) och rörelsesensor (HC-SR501) (5 / 6 steg)
Steg 5: kod
Kod, den roligaste del :) Koden är ganska enkelt, men du behöver några kunskaper att förstå det (om det är ditt mål, att förstå koden), jag har försökt att kommentera de flesta av koden för att göra det lättare för dig att förstå, men jag vet inte om jag gjorde ett bra jobb eller inte. Du måste också hämta LCD_5110_Graph bibliotek. Stort tack till Henning Karlsen för att skapa detta!
Här är koden, njut:
#include < LCD5110_Graph.h >
int calibrationTime = 20; PIR-sensor måste kalibreras, gör inte mycket rörelse under denna tid
länge osignerade int lowIn;
länge osignerade int paus = 5000; Tiden sensorn har vara låg innan vi antar det finns ingen motion
bool lockLow = sant; Variabler för att sensorn går låg ibland och vi korrigera för att
bool takeLowTime;
int motionPin = 8; Vi är anslutna till stift 8
int ledPin = 13. Vi kommer även att visa om rörelse detekteras på stift 13 (hög = rörelse, låg = ingen motion)
LCD5110 lcd (7, 4, 5, 3, 6); Att göra LCD-objekt
extern unsigned char SmallFont []; Inklusive våra smallfont (som ingår i biblioteket)
void setup() {
Serial.BEGIN(9600); Start seriell kommunikation
LCD. InitLCD(); Initiera LCD
lcd.setFont(SmallFont); Att våra typsnitt till en liten en
Ger sensorn en tid för att kalibrera (som sagt, gör minimal rörelse under denna tid)
Serial.println ("Calibrating sensor"); Att låta användaren nu via seriell bildskärm som vi kalibrera
lcd.clrScr();
LCD.Print ("Calibrating", CENTER, 16); Samma affär
LCD.Update();
för (int jag = 0; jag < calibrationTime; i ++) {
Serial.Print(".");
Delay(1000);
}
Serial.println ("kalibrering gjort");
Serial.println (Sensor är nu aktiv och kod körs");
lcd.clrScr();
LCD.Print ("gjort", centrera, 16);
LCD.Update();
Delay(100); Liten fördröjning bara för att se till att allt löper smidigt
lcd.clrScr();
LCD.Print ("ingen rörelse", CENTER, 14).
LCD.Print upptäckt ("", CENTER, 24);
LCD.Update();
}
void loop() {
om (digitalRead(motionPin) == hög) {//Checking om det finns rörelse eller inte
digitalWrite (ledPin, hög); Den ledde visualiserar sensorer utdata
om (lockLow) {
ser till att vi väntar på en övergång till låga beforte någon ytterligare utgång görs:
lockLow = false;
Serial.println("---");
Serial.println ("rörelse upptäckts").
lcd.clrScr();
LCD.Print ("rörelse", CENTER, 14).
LCD.Print upptäckt ("", CENTER, 24);
LCD.Update();
Delay(20);
}
takeLowTime = sant;
}
om (digitalRead(motionPin) == låg) {
digitalWrite (ledPin, låg);
om (takeLowTime) {
lowIn = millis(); Spara tiden för övergången från hög till låg
takeLowTime = false; att se till att detta görs endast i början av den låga fasen
}
om sensorn är låg för mer än den givna pausen,
Vi antar att ingen mer motion som kommer att hända
om (! lockLow & & millis() - lowIn > pausa) {
lockLow = sant;
lcd.clrScr();
LCD.Print ("ingen rörelse", CENTER, 14).
LCD.Print upptäckt ("", CENTER, 24);
LCD.Update();
digitalWrite (ledPin, låg);
Serial.println ("motion slutade");
Delay(10);
}
}
}