#include <Servo.h>
Servo myservo;
int rPin = 13;
int gPin = 12;
int bPin = 11;
int butPin = 7;
int butLedPin = 2;
int servoPin =6;
unsigned long currentTime = 0;
unsigned long rPrev = 0;
int rTime = 1000;
int rState = LOW;
unsigned long gPrev = 0;
int gTime = 1000;
int gState = LOW;
unsigned long bPrev = 0;
int bTime = 1000;
int bState = LOW;
unsigned long butPrev = 0;
int butTime = 100;
int butLedState = LOW;
int butState;
int bright = 0;
int pos = 0;
int posIncre = 1;
unsigned long fPre = 0;
unsigned long sPre = 0;
int fTime = 10;
int sTime = 15;
void setup() {
Serial.begin(115200);
pinMode(rPin, OUTPUT);
pinMode(gPin, OUTPUT);
pinMode(bPin, OUTPUT);
pinMode(butPin, INPUT_PULLUP);
pinMode(butLedPin, OUTPUT);
myservo.attach(servoPin);
}
void loop() {
currentTime = millis();
blink();
button();
servo();
}
void blink () {
if (currentTime - rPrev >= rTime) {
rPrev = currentTime;
if (rState == LOW) {
rState = HIGH;
rTime = 2000;
} else {
rState = LOW;
rTime = 500;
}
digitalWrite(rPin, rState);
}
if (currentTime - gPrev >= gTime) {
gPrev = currentTime;
if (gState == LOW) {
gState = HIGH;
gTime = 1000;
} else {
gState = LOW;
gTime = 2000;
}
digitalWrite(gPin, gState);
}
if (currentTime - bPrev >= bTime) {
bPrev = currentTime;
if (bState == LOW) {
bState = HIGH;
bTime = 100;
} else {
bState = LOW;
bTime = 1000;
}
digitalWrite(bPin, bState);
}
}
void button () {
if (currentTime - butPrev >= butTime) {
butPrev = currentTime;
butState = digitalRead(butPin);
if (butState == LOW) {
butLedState = HIGH;
} else {
butLedState = LOW;
}
digitalWrite(butLedPin, butLedState);
}
}
void servo() {
if (currentTime - sPre >= sTime) {
sPre = currentTime;
pos += posIncre;
myservo.write(pos);
if (pos >= 180 || pos <= 0) {
posIncre = -posIncre;
}
}
}