Haunted docka (21 / 25 steg)
Steg 21: kodning
Kopiera kod:
Denna skiss är att köra en PIR-sensor, 4 blinkande lampor och en liten likströmsmotor. PIR-sensor
kommer resa att göra LED-lampor blinka och sedan slå på en motor
definiera stiften
#define LEDPINFAST1 7, //LED ljus
#define LEDPINFAST2 8; //LED ljus
#define LEDPINSLOW1 10, //LED ljus
#define LEDPINSLOW2 9; //LED ljus
int fort1 = LEDPINFAST1; //LED ljus blinkar snabbt
int fast2 = LEDPINFAST2; //LED ljus blinkar snabbt
int slow1 = LEDPINSLOW1; //LED ljus blinkar långsamt
int slow2 = LEDPINSLOW2; //LED ljus blinkar långsamt
int calibrationTime = 30. / / kalibrera PIR-sensorn
tiden när sensorn utgångar en låga impuls
länge osignerade int lowIn;
mängden millisekunder sensorn har låg
innan vi antar all rörelse har slutat
länge osignerade int paus = 100;
booleska lockLow = sant;
booleska takeLowTime;
int pirPin = 2; den digital pin ansluten till PIR-sensorns utgång
int motorPin = 11; Motoriska pin ansluten
/////////////////////////////
SETUP
void setup() {
Serial.BEGIN(9600);
pinMode (pirPin, ingång);
pinMode (motorPin, produktionen);
digitalWrite (pirPin, låg);
pinMode(fast1,OUTPUT);
pinMode(fast2,OUTPUT);
pinMode(slow1,OUTPUT);
pinMode(slow2,OUTPUT);
sensor kalibrera Skriv till Aduino program
Serial.Print ("kalibrera sensorn");
för (int jag = 0; jag < calibrationTime; i ++) {
Serial.Print(".");
Delay(1000);
}
Serial.println ("gjort");
Serial.println ("sensorn aktiv");
Delay(50);
}
////////////////////////////
LOOP
void loop() {//I vet att det finns bättre sätt att skriva den här strängen för irratic blinkande lampor - men jag är fortfarande lärande
IF(digitalRead(pirPin) == hög) {
analogWrite (slow2, 100);
Delay(1000);
analogWrite (slow2, låg);
Delay(10); {
digitalWrite (fort1, hög);
Delay(10);
digitalWrite (fort1, låg);
Delay(10);
digitalWrite (fast2, hög);
Delay(10);
digitalWrite (fast2, låg);
Delay(10);
digitalWrite (slow1, hög);
Delay(10);
digitalWrite (slow1, låg);
Delay(10);
digitalWrite (fort1, hög);
Delay(100);
digitalWrite (fort1, låg);
Delay(10);
digitalWrite (fast2, hög);
Delay(10);
digitalWrite (fast2, låg);
Delay(10);
digitalWrite (slow1, hög);
Delay(10);
digitalWrite (slow1, låg);
Delay(30);
digitalWrite (fort1, hög);
Delay(10);
digitalWrite (fort1, låg);
Delay(10);
digitalWrite (fast2, hög);
Delay(10);
digitalWrite (fast2, låg);
Delay(10);
digitalWrite (slow1, hög);
Delay(2000);
digitalWrite (slow1, låg);
Delay(10);
digitalWrite (fort1, hög);
Delay(10);
digitalWrite (fort1, låg);
Delay(10);
digitalWrite (fast2, hög);
Delay(10);
digitalWrite (fast2, låg);
Delay(10);
digitalWrite (slow1, hög);
Delay(10);
digitalWrite (slow1, låg);
Delay(30);
digitalWrite (fort1, hög);
Delay(10);
digitalWrite (fort1, låg);
Delay(10);
digitalWrite (fast2, hög);
Delay(10);
digitalWrite (fast2, låg);
Delay(10);
digitalWrite (slow1, hög);
Delay(500);
digitalWrite (slow1, låg);
digitalWrite (fort1, hög);
Delay(10);
digitalWrite (fort1, låg);
Delay(10);
digitalWrite (fast2, hög);
Delay(10);
digitalWrite (fast2, låg);
Delay(10);
digitalWrite (slow1, hög);
Delay(2000);
digitalWrite (slow1, låg);
digitalWrite (fort1, hög);
Delay(100);
digitalWrite (fort1, låg);
Delay(10);
digitalWrite (fast2, hög);
Delay(10);
digitalWrite (fast2, låg);
Delay(10);
digitalWrite (slow1, hög);
Delay(10);
digitalWrite (slow1, låg);
Delay(30);
digitalWrite (fort1, hög);
Delay(10);
digitalWrite (fort1, låg);
Delay(10);
digitalWrite (fast2, hög);
Delay(10);
digitalWrite (fast2, låg);
Delay(10);
digitalWrite (slow1, hög);
Delay(2000);
digitalWrite (slow1, låg);
Delay(10);
digitalWrite (fort1, hög);
Delay(10);
digitalWrite (fort1, låg);
Delay(10);
digitalWrite (fast2, hög);
Delay(10);
digitalWrite (fast2, låg);
Delay(10);
digitalWrite (slow1, hög);
Delay(10);
digitalWrite (slow1, låg);
Delay(30);
digitalWrite (fort1, hög);
Delay(10);
digitalWrite (fort1, låg);
Delay(10);
digitalWrite (fast2, hög);
Delay(10);
digitalWrite (fast2, låg);
Delay(10);
digitalWrite (slow1, hög);
Delay(500);
digitalWrite (slow1, låg);
digitalWrite (fort1, hög);
Delay(10);
digitalWrite (fort1, låg);
Delay(10);
digitalWrite (fast2, hög);
Delay(10);
digitalWrite (fast2, låg);
Delay(10);
digitalWrite (slow1, hög);
Delay(2000);
digitalWrite (slow1, låg);
analogWrite (slow2, 10);
Delay(5);
analogWrite (slow2, 50); //LED ljus på har halv ljusstyrka
Delay(10);
analogWrite (slow2, 100);
}
digitalWrite (motorPin, hög); {//the motor PIN-kod är på
Delay(1000); vänta en sekund
digitalWrite (motorPin, låg); motorn är avstängd
Delay(5000); vänta i fem sekunder
analogWrite (slow2, låg), //LED ljus ljus av
}
IF(lockLow) {//back till sensorn
PIR låg innan ytterligare produktionen görs:
lockLow = false;
Serial.println("---");
Serial.Print ("rörelse upptäckts på");
Serial.Print(Millis()/100);
Serial.println ("sec");
Delay(50);
}
takeLowTime = sant;
}
IF(digitalRead(pirPin) == låg) {
digitalWrite (motorPin, låg); PIR är låg då motorn är låg
IF(takeLowTime) {
lowIn = millis(); övergången hög till låg
takeLowTime = false;
}
om (! lockLow & & millis() - lowIn > pausa) {
gör säkert detta kodblock endast körs igen efter
ett nytt förslag sekvens har upptäckts
lockLow = sant;
Serial.Print ("motion slutade på"); utgång
Serial.Print((Millis() - paus) / 100);
Serial.println ("sec");
Delay(50);
}
}
}