#define LED1 3
#define LED2 5
#define LED3 6
#define LED4 9
#define MOTORA 10
#define MOTORB 11
#define CW 7
#define CCW 8
#define LED1_S A0
#define LED2_S A1
#define LED3_S A2
#define LED4_S A3
#define MOTOR_UP A4
#define MOTOR_DN A5
int brightness1 = 150;
int brightness2 = 150;
int brightness3 = 150;
int brightness4 = 150;
int fadeAmount1 = 3;
int fadeAmount2 = 3;
int fadeAmount3 = 3;
int fadeAmount4 = 3;
unsigned long btn_time1 = 0;
unsigned long btn_time2 = 0;
unsigned long btn_time3 = 0;
unsigned long btn_time4 = 0;
int debounce = 100;
unsigned long tick1 = 0;
unsigned long tick2 = 0;
unsigned long tick3 = 0;
unsigned long tick4 = 0;
unsigned long check_time = 0;
bool last_state1 = false;
bool last_state2 = false;
bool last_state3 = false;
bool last_state4 = false;
bool check_state = false;
void setup() {
Serial.begin(115200);
Serial.println("START NANO");
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(MOTORA, OUTPUT);
pinMode(MOTORB, OUTPUT);
pinMode(CW, OUTPUT);
pinMode(CCW, OUTPUT);
pinMode(LED1_S, INPUT);
pinMode(LED2_S, INPUT);
pinMode(LED3_S, INPUT);
pinMode(LED4_S, INPUT);
pinMode(MOTOR_UP, INPUT);
pinMode(MOTOR_DN, INPUT);
}
void STATE_MACHINE(int PIN, int PIN_S, bool &last_state, int &brightness, int &fadeAmount, unsigned long &btn_time, unsigned long &tick) {
while (digitalRead(PIN_S)) {
delay(debounce / 10);
Serial.print("last_state :: ");
Serial.println(last_state ? "1" : "0");
if(last_state){
fadeAmount = -fadeAmount;
}else{
fadeAmount = 3;
}
while (digitalRead(PIN_S)) {
if (digitalRead(PIN_S)) {
if (millis() - btn_time > debounce) {
btn_time = millis();
tick++;
}
if (tick > 8) {
brightness = brightness + fadeAmount;
if(brightness < 5) brightness = 5;
if(brightness > 255) brightness = 255;
analogWrite(PIN, brightness);
Serial.print("bt : fa \t");
Serial.print(brightness);
Serial.print(" : ");
Serial.println(fadeAmount);
check_state = true;
last_state = true;
}
}
delay(debounce / 2);
}
if (tick < 8 && tick > 2) last_state = !last_state;
check_time = millis();
}
if (tick < 8 && tick > 2) {
if (!last_state) {
for (int i = brightness; i > -1; i--) {
analogWrite(PIN, i);
delay(debounce / 30);
}
} else {
for (int i = 0; i < brightness; i += 5) {
analogWrite(PIN, i);
delay(debounce / 4);
}
}
}
tick = 0;
}
void MOTOR_CON(int APIN,int BPIN, int PIN_S, int DIR) {
if (digitalRead(PIN_S)) {
if (DIR == 1) {
digitalWrite(CW, HIGH);
digitalWrite(CCW, LOW);
analogWrite(APIN, 125);
analogWrite(BPIN, 0);
}else{
digitalWrite(CW, LOW);
digitalWrite(CCW, HIGH);
analogWrite(APIN, 0);
analogWrite(BPIN, 125);
}
while (digitalRead(PIN_S)) {
delay(debounce / 20);
}
check_time = millis();
}
digitalWrite(CCW, LOW);
digitalWrite(CW, LOW);
analogWrite(APIN, 0);
analogWrite(BPIN, 0);
}
void loop() {
STATE_MACHINE(LED1, LED1_S, last_state1, brightness1, fadeAmount1, btn_time1, tick1);
STATE_MACHINE(LED2, LED2_S, last_state2, brightness2, fadeAmount2, btn_time2, tick2);
STATE_MACHINE(LED3, LED3_S, last_state3, brightness3, fadeAmount3, btn_time3, tick3);
STATE_MACHINE(LED4, LED4_S, last_state4, brightness4, fadeAmount4, btn_time4, tick4);
MOTOR_CON(MOTORA,MOTORB, MOTOR_UP,1);
MOTOR_CON(MOTORA,MOTORB, MOTOR_DN,0);
}