#include #include int servo = 0; int s_target = 0; int s_delta = 3; #define buttonPin 4 #define barrierButton 5 int LED = HIGH; #define greenPin 2 #define redPin 3 #define ST_OFF 0 #define ST_ON 1 #define ST_PULSE 2 int status = ST_OFF; Bounce barrier(barrierButton,20); Bounce button(buttonPin,20); Servo s; //poczÄ…tkowa konfiguracja void setup() { s.attach(9); pinMode(greenPin, OUTPUT); pinMode(redPin, OUTPUT); // ustawienie pinu jako wejscie pinMode(buttonPin, INPUT); pinMode(barrierButton, INPUT); digitalWrite(buttonPin, HIGH); digitalWrite(barrierButton, HIGH); } void changeBarrier(){ if (s_target == 0){ s_target = 99; } else { s_target = 0; }; }; void adjust_servo() { int delta = s_target - servo; if ( abs(delta) > s_delta) { if (delta > 0 ) { servo += s_delta; } else { servo -= s_delta; }; }; s.write(servo); } void display_status() { int static pulse = LOW; int static count = 5; switch (status) { case ST_OFF: off(redPin); on(greenPin); // s_target = 0 break; case ST_ON: // s_target = 90; on(redPin); off(greenPin); break; case ST_PULSE: off(redPin); digitalWrite(greenPin, pulse); pulse = !pulse; delay(400); count--; if (count==0) { status=ST_ON; count=5; } } } void next_status() { switch (status) { case ST_OFF: status = ST_PULSE; break; case ST_ON: status = ST_OFF; break; case ST_PULSE: break; } } void on( int pin) { digitalWrite(pin,HIGH); } void off( int pin) { digitalWrite(pin,LOW); } void loop() { barrier.update(); button.update(); if (button.risingEdge()) { next_status(); }; display_status(); if (barrier.risingEdge()) { changeBarrier(); }; adjust_servo(); }