lautist
This commit is contained in:
parent
5f88ae6820
commit
e95f7a08b0
277
this_is_what_happens_when_you_hand_an_ardurino_to_a_sperg.cpp
Normal file
277
this_is_what_happens_when_you_hand_an_ardurino_to_a_sperg.cpp
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
#include <Servo.h>
|
||||||
|
#include <Wire.h>
|
||||||
|
#include <LiquidCrystal_I2C.h>
|
||||||
|
#include <Keypad.h>
|
||||||
|
|
||||||
|
#define ledGreen 10
|
||||||
|
#define ledRed 11
|
||||||
|
#define servo 12
|
||||||
|
#define pir A0
|
||||||
|
#define speaker A1
|
||||||
|
|
||||||
|
//Keypadhoz
|
||||||
|
char keymap[4][4] =
|
||||||
|
{
|
||||||
|
{'1', '2', '3', 'A'},
|
||||||
|
{'4', '5', '6', 'B'},
|
||||||
|
{'7', '8', '9', 'C'},
|
||||||
|
{'*', '0', '#', 'D'}
|
||||||
|
};
|
||||||
|
|
||||||
|
byte rowPins[4] = {2, 3, 4, 5};
|
||||||
|
byte colPins[4] = {6, 7, 8, 9};
|
||||||
|
|
||||||
|
Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, 4, 4);
|
||||||
|
|
||||||
|
Servo myservo;
|
||||||
|
LiquidCrystal_I2C lcd(32, 16, 2);
|
||||||
|
int pirValue = 0; // Riasztóhoz
|
||||||
|
int previousMillis = 0;
|
||||||
|
int interval = 150;
|
||||||
|
int state = 0;
|
||||||
|
char key;
|
||||||
|
String code = "";
|
||||||
|
int ledState = LOW;
|
||||||
|
|
||||||
|
int offState() //Kikapcsolt állapot
|
||||||
|
{
|
||||||
|
digitalWrite(ledGreen, LOW);
|
||||||
|
lcd.noBacklight();
|
||||||
|
lcd.clear();
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
key = myKeypad.getKey();
|
||||||
|
if (key == 'D')
|
||||||
|
{
|
||||||
|
state = 1;
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int onState() //Bekapcsolt, nem készenléti állapot
|
||||||
|
{
|
||||||
|
initialiseLCD();
|
||||||
|
myservo.write(180);
|
||||||
|
lcd.backlight();
|
||||||
|
lcd.print("Security code:");
|
||||||
|
lcd.setCursor(0, 1);
|
||||||
|
int wrongCodeCounter = 0;
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
key = myKeypad.getKey();
|
||||||
|
switch (key)
|
||||||
|
{
|
||||||
|
case 'D':
|
||||||
|
state = 0;
|
||||||
|
return state;
|
||||||
|
break;
|
||||||
|
case 'C':
|
||||||
|
initialiseLCD();
|
||||||
|
break;
|
||||||
|
case 'A':
|
||||||
|
if (code == "911")
|
||||||
|
{
|
||||||
|
state = 2;
|
||||||
|
return state;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
handleInvalidCode();
|
||||||
|
wrongCodeCounter++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
if (code.length() < 3 && key != NO_KEY)
|
||||||
|
{
|
||||||
|
code += key;
|
||||||
|
lcd.print(key);
|
||||||
|
}
|
||||||
|
if (wrongCodeCounter >= 3)
|
||||||
|
{
|
||||||
|
state = 4;
|
||||||
|
return state;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int standbyState() //Bekapcsolt, készenléti állapot
|
||||||
|
{
|
||||||
|
initialiseLCD();
|
||||||
|
lcd.print("Ready to serve");
|
||||||
|
myservo.write(0);
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
key = myKeypad.getKey();
|
||||||
|
checkKey(key);
|
||||||
|
pirValue = analogRead(pir);
|
||||||
|
if (pirValue > 100)
|
||||||
|
{
|
||||||
|
state = 3;
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int alarmState() //Riasztási állapot
|
||||||
|
{
|
||||||
|
initialiseLCD();
|
||||||
|
lcd.print("INTRUDER HERE");
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
//LED + Hangszóró
|
||||||
|
unsigned long currentMillis = millis();
|
||||||
|
if (currentMillis - previousMillis >= interval)
|
||||||
|
{
|
||||||
|
previousMillis = currentMillis;
|
||||||
|
tone(speaker, 500, 100);
|
||||||
|
delay(300);
|
||||||
|
tone(speaker, 440, 150);
|
||||||
|
delay(300);
|
||||||
|
alarmLights();
|
||||||
|
digitalWrite(ledRed, ledState);
|
||||||
|
}
|
||||||
|
|
||||||
|
key = myKeypad.getKey();
|
||||||
|
checkKey(key);
|
||||||
|
if (state == 4)
|
||||||
|
{
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void lockDownState() // Lezárt riasztási állapot
|
||||||
|
{
|
||||||
|
initialiseLCD();
|
||||||
|
lcd.print("CLOSED");
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
//LED + Hangszóró
|
||||||
|
unsigned long currentMillis = millis();
|
||||||
|
if (currentMillis - previousMillis >= interval)
|
||||||
|
{
|
||||||
|
previousMillis = currentMillis;
|
||||||
|
tone(speaker, 440, 150);
|
||||||
|
alarmLights();
|
||||||
|
digitalWrite(ledRed, ledState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void alarmLights()
|
||||||
|
{
|
||||||
|
if (ledState == LOW)
|
||||||
|
{
|
||||||
|
ledState = HIGH;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ledState = LOW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void initialiseLCD()
|
||||||
|
{
|
||||||
|
lcd.clear();
|
||||||
|
code = "";
|
||||||
|
digitalWrite(ledGreen, LOW);
|
||||||
|
digitalWrite(ledRed, HIGH);
|
||||||
|
}
|
||||||
|
|
||||||
|
void checkKey(char key)
|
||||||
|
{
|
||||||
|
int wrongCodeCounter = 0;
|
||||||
|
switch (key)
|
||||||
|
{
|
||||||
|
case 'D':
|
||||||
|
state = 1;
|
||||||
|
break;
|
||||||
|
case 'C':
|
||||||
|
initialiseLCD();
|
||||||
|
break;
|
||||||
|
case 'A':
|
||||||
|
if (code == "911")
|
||||||
|
{
|
||||||
|
state = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
handleInvalidCode();
|
||||||
|
wrongCodeCounter++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (code.length() < 3 && key != NO_KEY && key != 'D')
|
||||||
|
{
|
||||||
|
code += key;
|
||||||
|
lcd.print(key);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (wrongCodeCounter >= 3)
|
||||||
|
{
|
||||||
|
state = 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleInvalidCode()
|
||||||
|
{
|
||||||
|
code = "";
|
||||||
|
lcd.clear();
|
||||||
|
lcd.print("Invalid code!");
|
||||||
|
delay(2000);
|
||||||
|
lcd.clear();
|
||||||
|
lcd.print("Try again!");
|
||||||
|
delay(2000);
|
||||||
|
lcd.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
Serial.begin(9600);
|
||||||
|
pinMode(ledGreen, OUTPUT);
|
||||||
|
pinMode(ledRed, OUTPUT);
|
||||||
|
pinMode(pir, INPUT);
|
||||||
|
pinMode(speaker, OUTPUT);
|
||||||
|
myservo.attach(servo);
|
||||||
|
lcd.begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
offState();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
onState();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
standbyState();
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
alarmState();
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
lockDownState();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
lcd.print("Guru meditation!");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user