#include #include #include #include #include #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) // The pins for I2C are defined by the Wire-library. // On an arduino UNO: A4(SDA), A5(SCL) // On an arduino MEGA 2560: 20(SDA), 21(SCL) // On an arduino LEONARDO: 2(SDA), 3(SCL), ... #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); #define LOGO_HEIGHT 64 #define LOGO_WIDTH 64 static const unsigned char PROGMEM logo_bmp[] = { B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B11111111, B00001111, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B11111111, B00001111, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B11111111, B00001111, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B11111111, B00001111, B11110000, B00000000, B00000000, B00000000, B00000000, B00001111, B00000000, B00000000, B00001111, B00000000, B00000000, B00000000, B00000000, B00001111, B00000000, B00000000, B00001111, B00000000, B00000000, B00000000, B00000000, B00001111, B00000000, B00000000, B00001111, B00000000, B00000000, B00000000, B00000000, B00001111, B00000000, B00000000, B00001111, B00000000, B00000000, B00000000, B00000000, B11110000, B00001111, B00001111, B00000000, B11110000, B00000000, B00000000, B00000000, B11110000, B00001111, B00001111, B00000000, B11110000, B00000000, B00000000, B00000000, B11110000, B00001111, B00001111, B00000000, B11110000, B00000000, B00000000, B00000000, B11110000, B00001111, B00001111, B00000000, B11110000, B00000000, B00000000, B00000000, B11110000, B11111111, B00001111, B11110000, B11110000, B00000000, B00000000, B00000000, B11110000, B11111111, B00001111, B11110000, B11110000, B00000000, B00000000, B00000000, B11110000, B11111111, B00001111, B11110000, B11110000, B00000000, B00000000, B00000000, B11110000, B11111111, B00001111, B11110000, B11110000, B00000000, B00000000, B00000000, B00001111, B00000000, B11110000, B00001111, B00000000, B00000000, B00000000, B00000000, B00001111, B00000000, B11110000, B00001111, B00000000, B00000000, B00000000, B00000000, B00001111, B00000000, B11110000, B00001111, B00000000, B00000000, B00000000, B00000000, B00001111, B00000000, B11110000, B00001111, B00000000, B00000000, B00000000, B00000000, B00001111, B00001111, B11111111, B00001111, B00000000, B00000000, B00000000, B00000000, B00001111, B00001111, B11111111, B00001111, B00000000, B00000000, B00000000, B00000000, B00001111, B00001111, B11111111, B00001111, B00000000, B00000000, B00000000, B00000000, B00001111, B00001111, B11111111, B00001111, B00000000, B00000000, B00000000, B00000000, B00000000, B11111111, B00001111, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B11111111, B00001111, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B11111111, B00001111, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B11111111, B00001111, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B00001111, B00001111, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00001111, B00001111, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00001111, B00001111, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00001111, B00001111, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B11110000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, }; unsigned char MotorDelay = 1; unsigned char MotorDelayOld = 0; unsigned char MotorDelayEEPROM = 0; unsigned long previousMillis = 0; unsigned long previousMillisEti = 0; int UP = 0; int DOWN = 0; int ENTER = 0; int UP_OLD = 0; int DOWN_OLD = 0; int ENTER_OLD = 0; int gapDetected = 0; int run = 0; int finish = 1; unsigned long Motor; void setup() { pinMode(SCK, INPUT); pinMode(MOSI, INPUT); pinMode(MISO, INPUT); pinMode(12, OUTPUT); pinMode(11, INPUT); pinMode(7, INPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); Serial.begin(9600); // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } MotorDelayEEPROM = EEPROM.read(0); MotorDelay = MotorDelayEEPROM; testdrawbitmap(); // Draw a small bitmap image delay(2000); // Pause for 2 seconds // Clear the buffer display.clearDisplay(); display.display(); } void loop() { unsigned long currentMillis = millis(); UP = digitalRead(SCK); DOWN = digitalRead(MOSI); ENTER = digitalRead(MISO); if (MotorDelay != MotorDelayOld){ writeDisplay(); MotorDelayOld = MotorDelay; } if(UP == 1 && UP != UP_OLD){ MotorDelay++; } if(DOWN == 1 && DOWN != DOWN_OLD){ MotorDelay--; } if (ENTER == 1){ if (currentMillis - previousMillis >= 2000) { previousMillis = currentMillis; EEPROM.write(0, MotorDelay); MotorDelayEEPROM = EEPROM.read(0); writeDisplay(); MotorDelayOld = MotorDelay; } } else { previousMillis = currentMillis; } unsigned long currentMillisEti = millis(); Motor = MotorDelay * 20; if (digitalRead(11) == LOW && run == 0 && finish == 1){ run = 1; finish = 0; } if (run == 1) { digitalWrite(12, HIGH); if (digitalRead(7) == HIGH){ gapDetected = 1; } if(gapDetected == 1) { if (currentMillisEti - previousMillisEti >= Motor) { previousMillisEti = currentMillisEti; run = 0; } } else { previousMillisEti = currentMillisEti; } } else { digitalWrite(12, LOW); previousMillisEti = currentMillisEti; } if (run == 0 && digitalRead(11) == HIGH){ finish = 1; gapDetected = 0; } UP_OLD = UP; DOWN_OLD = DOWN; ENTER_OLD = ENTER; } void testdrawbitmap(void) { display.clearDisplay(); display.drawBitmap( (display.width() - LOGO_WIDTH ) / 2, (display.height() - LOGO_HEIGHT) / 2, logo_bmp, LOGO_WIDTH, LOGO_HEIGHT, 1); display.display(); } void writeDisplay(void) { display.setTextSize(2); display.setTextColor(SSD1306_WHITE); // Draw white text display.setCursor(0,0); // Start at top-left corner display.clearDisplay(); display.println(F("Delay: ")); display.println(MotorDelay); display.println(F("EEPROM: ")); display.println(MotorDelayEEPROM); display.display(); }