#include <ESP32Servo.h>
#define ServPin 26
#define knopPin 23
Servo pwmOutput;
#include <Adafruit_NeoPixel.h>
#define PIN 25
#define NUM_LEDS 16
Adafruit_NeoPixel ring = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
#define geel1 0
#define rood1 15
#define rood2 1
bool sluitenMotor= false;
unsigned long timeStampmotor1keerDicht;
unsigned long timeStampmotor1keerOpen;
bool openenGedaan;
void open() {
static unsigned long timeStampGeel;
static bool aanUit;
ring.setPixelColor(rood1, ring.Color(0, 0, 0));
ring.setPixelColor(rood2, ring.Color(0, 0, 0));
pwmOutput.write(180);
if(millis() - timeStampGeel >= 1000){
timeStampGeel = millis();
aanUit = !aanUit;}
if(aanUit == true){
ring.setPixelColor(geel1, ring.Color(255, 255, 0));
}else if(aanUit == false){
ring.setPixelColor(geel1, ring.Color(0, 0, 0));}
ring.show();
}
bool knop(){
bool statusKnop = digitalRead(knopPin);
static bool vorigeStatusKnop = false;
static bool knopSluiten = 0;
if(statusKnop == !vorigeStatusKnop){
vorigeStatusKnop = statusKnop;
if(statusKnop == 1){
knopSluiten = !knopSluiten;
sluitenMotor = true;
timeStampmotor1keerDicht = millis();
timeStampmotor1keerOpen = millis();
}
delay(5);
}
return knopSluiten;
}
void rKnipperen(){
static bool aanUitR;
static unsigned long timeStampRood;
if(millis() - timeStampRood >= 1000){
timeStampRood = millis();
aanUitR = !aanUitR;
if(aanUitR == true){
ring.setPixelColor(rood1, ring.Color(255, 0, 0));
ring.setPixelColor(rood2, ring.Color(0, 0, 0));
}else if(aanUitR == false){
ring.setPixelColor(rood1, ring.Color(0, 0, 0));
ring.setPixelColor(rood2, ring.Color(255, 0, 0));
}
}
ring.show();
}
void sluiten(){
openenGedaan = false;
ring.setPixelColor(geel1, ring.Color(0, 0, 0));
static unsigned long timeStampSluiten;
if(millis() - timeStampSluiten >= 1000){
timeStampSluiten = millis();
rKnipperen();
}
if((millis() - timeStampmotor1keerDicht >= 2000) && (sluitenMotor == true)){
sluitenMotor = false;
for(int i = 180; i >= 90; i--){
delay(10);
pwmOutput.write(i);
}
}
}
void openen(){
rKnipperen();
if(millis() - timeStampmotor1keerOpen >= 2000){
for(int i = 90; i <= 180; i++){
delay(10);
pwmOutput.write(i);
}
openenGedaan = true;
}
}
void setup() {
Serial.begin(115200);
ring.begin();
pwmOutput.setPeriodHertz(50);
pwmOutput.attach(26);
pinMode(knopPin, INPUT_PULLDOWN);
}
void loop() {
if(knop() == 1){
sluiten();
}else{
if(openenGedaan == false){
openen();
}else{
open();
}
}
}