#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
// Servot
Servo servo1;
Servo servo3;
// Neopixel-olion luonti
#define NUM_PIXELS 1
Adafruit_NeoPixel pixels(NUM_PIXELS, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800);
// Servo-asentojen vakiot
#define CLOSED_POSITION 90
#define OPEN_POSITION 180
// Debounce aika hätäseis-napille
#define DEBOUNCE_TIME 50
void setServos(int position1, int position3) {
servo1.write(position1);
servo3.write(position3);
delay(500); // Pieni viive varmistaaksesi, että servot saavuttavat asennon
}
void setup() {
// Servojen alustus
servo1.attach(9);
servo3.attach(10);
setServos(CLOSED_POSITION, CLOSED_POSITION); // Alkuarvo asetettu servon suuntaisesti: suljettu asento(closed position)
// Neopixelin alustus aloitustila keltainen
pixels.begin();
pixels.setBrightness(255); // Säädä kirkkautta tarvittaessa
pixels.setPixelColor(0, pixels.Color(255, 255, 0)); // Alkuarvo: Keltainen
pixels.show();
// Aseta silmien alkutila keltaiseksi
analogWrite(EYE_RED_PIN, 255);
analogWrite(EYE_GREEN_PIN, 255);
analogWrite(EYE_BLUE_PIN, 0);
// 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);
}
void loop() {
// Luetaan painikkeiden tilat
int button1State = digitalRead(BUTTON_1_PIN);
int button2State = digitalRead(BUTTON_2_PIN);
int button3State = digitalRead(BUTTON_3_PIN); // Vasen 1 painike
// Halt-napin tarkistus
static unsigned long lastResetTime = 0;
int resetButtonState = digitalRead(RESET_BUTTON_PIN);
if (resetButtonState == LOW && millis() - lastResetTime > DEBOUNCE_TIME) {
// Pysäytä servot
setServos(CLOSED_POSITION, CLOSED_POSITION);
// Aseta viimeisin aika
lastResetTime = millis();
}
// Tila 1: Ruuhkainen
if (button1State == LOW) {
setServos(CLOSED_POSITION, 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();
}
// Tila 2: Tilaa on
else if (button2State == LOW) {
setServos(-OPEN_POSITION, OPEN_POSITION); // servo1 menee -180, servo3 menee 180
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();
}
// Tila 3: Ystävä alueella
else if (button3State == LOW) {
analogWrite(EYE_RED_PIN, 0);
analogWrite(EYE_GREEN_PIN, 0);
analogWrite(EYE_BLUE_PIN, 255); // Sininen
pixels.setPixelColor(0, pixels.Color(0, 0, 255)); // Sininen
pixels.show();
for (int i = 0; i < 1000; i++) {
static int servosOpen = 0;
if (servosOpen == 1) {
setServos(CLOSED_POSITION, CLOSED_POSITION);
servosOpen = 0;
} else {
setServos(-OPEN_POSITION, OPEN_POSITION);
servosOpen = 1;
}
delay(1000); // Lyhyt viive siipien välillä
}
}
}