#include #include #include #include #define AD 5 #define Dtime1 100 #define Dtime2 500 #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels #define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin) #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); volatile boolean TurnDetected; // need volatile for Interrupts volatile boolean rotationdirection; // CW or CCW rotation const int PinCLK = 2; // Generating interrupts using CLK signal const int PinDT = 3; // Reading DT signal const int PinSW = 4; // Reading Push Button switch const int ON = 1; const int OFF = 0; int HP2 = 0; int ad0 = 0 ; int nwch = 0; void delayoff() { digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); } void dsphp(int x) { if (x == 1) { display. println(F("SP2 On ")); } else { display. println(F("SP2 Off ")); } } void setup() { if (!display. begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial. println(F("SSD1306 allocation failed")); } display. clearDisplay(); display. setTextSize(1); // Normal 1:1 pixel scale display. setTextColor(SSD1306_WHITE); pinMode(AD, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); pinMode(5, INPUT); pinMode(PinCLK, INPUT); pinMode(PinDT, INPUT); pinMode(PinSW, INPUT); digitalWrite(PinSW, HIGH); // Pull-Up resistor for switch digitalWrite(5, HIGH); Serial. begin(9600); Serial. println("Start program"); delayoff(); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(9, HIGH); nwch = 1; display. clearDisplay(); display. setTextSize(2); display. setCursor(0, 0); display. println(F("IN 1 On ")); dsphp(HP2); display. display(); delay(500); } volatile int i = 0; void loop() { if (!(digitalRead(4))) { // check if button is pressed delay(500); if (HP2 == 0) { digitalWrite(6, LOW); digitalWrite(7, LOW); Serial. println(F("SP 2 On ")); HP2 = 1; display. clearDisplay(); display. setTextSize(2); display. setCursor(0, 0); display. println(F("SP 2 On ")); display. display(); Serial. println("SP 2 on" ); delay(500); } else { digitalWrite(6, HIGH); digitalWrite(7, HIGH); Serial. println("SP 2 off"); display. clearDisplay(); display. setCursor(0, 0); display. println(F("SP 2 off")); display. display(); HP2 = 0; } Serial. println(" pin 4 changed"); } if (!(digitalRead(2))) { // check if button is pressed pin4 delay(500); nwch++; Serial. println("pin2 button pressed"); if (nwch > 6) { nwch = 1 ; } Serial. print(" nwch="); Serial. println(nwch); TurnDetected = false; delayoff(); if (nwch == 1) { digitalWrite(8, HIGH); digitalWrite(9, HIGH); display. clearDisplay(); display. setTextSize(2); display. setCursor(0, 0); display. println(F("IN 1 On")); dsphp(HP2); display. display(); delay(500); } if (nwch == 2) { digitalWrite(9, HIGH); digitalWrite(10, LOW); display. clearDisplay(); display. setTextSize(2); display. setCursor(0, 0); display. println(F("IN 1&2 On")); dsphp(HP2); display. display(); delay(500); } if (nwch == 3) { digitalWrite(10, LOW); digitalWrite(11, LOW); display. clearDisplay(); display. setTextSize(2); display. setCursor(0, 0); display. println(F("IN 2 On")); dsphp(HP2); display. display(); delay(500); } if (nwch == 4) { digitalWrite(12, LOW); digitalWrite(13, LOW); display. clearDisplay(); display. setCursor(0, 0); display. setTextSize(2); display. println(F("IN 3 On")); dsphp(HP2); display. display(); delay(500); } if (nwch == 6) { digitalWrite(9, HIGH); digitalWrite(12, LOW); display. clearDisplay(); display. setCursor(0, 0); display. setTextSize(2); display. println(F("IN 3&1 On")); dsphp(HP2); display. display(); delay(500); } } if (nwch == 5) { ad0 = analogRead(0) ; Serial. println(ad0); display. setCursor(0, 0); display. println(F("\n")); display. println(ad0); display. display(); delay(50); if (ad0 > 5) { // delay 10ms to let the ADC recover: digitalWrite(12, HIGH); digitalWrite(13, HIGH); digitalWrite(8, HIGH); digitalWrite(9, HIGH); } else { digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(12, LOW); digitalWrite(13, LOW); } display. clearDisplay(); display. setTextSize(2); display. setCursor(0, 0); display. println(F("IN 1&3 DW")); dsphp(HP2); display. display(); Serial. println("relay on" ); delay(100); } }