#include <Servo.h>
#include <Adafruit_NeoPixel.h>
// Pin määrittelyt
#define BUTTON_1_PIN 2
#define BUTTON_2_PIN 4
#define BUTTON_3_PIN 7 // Vasen 1 painike
#define RESET_BUTTON_PIN 8
#define EYE_RED_PIN 3
#define EYE_GREEN_PIN 5
#define EYE_BLUE_PIN 6
#define NEOPIXEL_PIN 11
// Servo-oliot
Servo servo1;
Servo servo3;
// Neopixel-olion luonti
#define NUM_PIXELS 1
Adafruit_NeoPixel pixels(NUM_PIXELS, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800);
// Painikkeiden tilamuuttujat
bool button1State = false;
bool button2State = false;
bool button3State = false; // Vasen 1 painike
bool resetButtonState = false;
// Servo-asentojen vakiot
#define CLOSED_POSITION 90
#define OPEN_POSITION 180
// Neopixel-värimuuttujat
#define PIXEL_COLOR_SPEED 10
#define FRIEND_ZONE_DURATION 180000 // 3 minuuttia
unsigned long friendZoneTimer = 0;
// Muuttuja servojen tilan seuraamiseen
bool servosOpen = false;
void setup() {
// Servojen alustus
servo1.attach(9);
servo3.attach(10);
// Neopixelin alustus
pixels.begin();
pixels.setBrightness(50); // Säädä kirkkautta tarvittaessa
// Painikkeiden määrittelyt
pinMode(BUTTON_1_PIN, INPUT_PULLUP);
pinMode(BUTTON_2_PIN, INPUT_PULLUP);
pinMode(BUTTON_3_PIN, INPUT_PULLUP); // Vasen 1 painike
pinMode(RESET_BUTTON_PIN, INPUT_PULLUP);
// Silmien ja siipien oletusasennot
servo1.write(CLOSED_POSITION);
servo3.write(CLOSED_POSITION);
analogWrite(EYE_RED_PIN, 255);
analogWrite(EYE_GREEN_PIN, 255);
analogWrite(EYE_BLUE_PIN, 0); // Alkuarvo: Keltainen
// Neopixelin alustus alkutilaan
pixels.setPixelColor(0, pixels.Color(255, 255, 0)); // Alkuarvo: Keltainen
pixels.show();
}
void loop() {
// Luetaan painikkeiden tilat
button1State = digitalRead(BUTTON_1_PIN);
button2State = digitalRead(BUTTON_2_PIN);
button3State = digitalRead(BUTTON_3_PIN); // Vasen 1 painike
resetButtonState = digitalRead(RESET_BUTTON_PIN);
// Tila 1: Ruuhkainen
if (button1State == LOW) {
servo1.write(CLOSED_POSITION);
servo3.write(CLOSED_POSITION);
analogWrite(EYE_RED_PIN, 255); // Punainen
analogWrite(EYE_GREEN_PIN, 0);
analogWrite(EYE_BLUE_PIN, 0);
pixels.setPixelColor(0, pixels.Color(255, 0, 0)); // Punainen
pixels.show();
servosOpen = false;
}
// Tila 2: Tilaa on
else if (button2State == LOW) {
servo1.write(OPEN_POSITION);
servo3.write(OPEN_POSITION);
analogWrite(EYE_RED_PIN, 0);
analogWrite(EYE_GREEN_PIN, 255); // Vihreä
analogWrite(EYE_BLUE_PIN, 0);
pixels.setPixelColor(0, pixels.Color(0, 255, 0)); // Vihreä
pixels.show();
servosOpen = true;
}
// Tila 3: Ystävä alueella
else if (button3State == LOW) {
for (int i = 0; i < 100; i++) {
if (servosOpen) {
servo1.write(CLOSED_POSITION);
servo3.write(CLOSED_POSITION);
servosOpen = false;
} else {
servo1.write(OPEN_POSITION);
servo3.write(OPEN_POSITION);
servosOpen = true;
}
delay(1000);
// Tarkistetaan reset-nappi
if (resetButtonState == LOW) {
servo1.write(CLOSED_POSITION);
servo3.write(CLOSED_POSITION);
while (digitalRead(RESET_BUTTON_PIN) == LOW) {} // Odota, kunnes nappi vapautetaan
return;
}
}
}
// Tila 4: Reset-nappi painettu
void loop() {
int buttonState = digitalRead(RESET_BUTTON_PIN);
if (buttonState == LOW) {
if (servoOpen) {
servo1.write(CLOSED_POSITION);
servoOpen = false;
} else {
servo1.write(OPEN_POSITION);
servoOpen = true;
}
delay(500); // Odota hetki, jotta napin painallus rekisteröidään kunnolla
}
}