#include #include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0); #include // ----------------------------- // 설정 부분 // ----------------------------- #define STEPS_PER_REV 1024 // 스텝모터 1회전 스텝수 (모터 종류에 맞게 변경) #define MOTOR_SPEED 60 // 스텝모터 속도 (rpm) #define BUTTON_SET_PIN 6 // 간격 설정 버튼 #define BUTTON_RUN_PIN 7 // 강제 연속 회전 버튼 // 모터 제어 핀 (예시) Stepper stepperMotor(STEPS_PER_REV, 11,9,10,8); // ----------------------------- // 전역 변수 // ----------------------------- uint8_t viewInter = 0; // 설정된 간격(시간 단위) unsigned long intervalMillis = 0; // 간격 (ms) unsigned long previousMillis = 0; // 마지막 동작 시각 unsigned long lastRunDuration = 0; // 마지막 6번 버튼 눌림 지속 시간(ms) unsigned long runStartMillis = 0; // 6번 버튼 눌림 시작 시각 bool Count=0; bool lastSetButtonState = false; bool lastRunButtonState = false; unsigned long buttonPressStart = 0; bool buttonHeld = false; // ----------------------------- // setup() // ----------------------------- void setup() { u8g2.begin(); pinMode(BUTTON_SET_PIN, INPUT_PULLUP); pinMode(BUTTON_RUN_PIN, INPUT_PULLUP); stepperMotor.setSpeed(MOTOR_SPEED); Serial.begin(9600); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_unifont_t_korean1); // 한글 폰트 u8g2.drawUTF8(25, 28, "*FeedCare*"); u8g2.drawUTF8(50, 47, "V1.0"); u8g2.sendBuffer(); delay(2000); } // ----------------------------- // loop() // ----------------------------- void loop() { unsigned long currentMillis = millis(); bool runButtonPressed = !digitalRead(BUTTON_RUN_PIN); if (!runButtonPressed) { Count=0; u8g2.clearBuffer(); u8g2.setFont(u8g2_font_9x15_tf); u8g2.setCursor(10, 28); u8g2.print("Set Interval"); u8g2.setCursor(35, 45); u8g2.print(viewInter); u8g2.setCursor(55, 45); u8g2.print("Hours"); u8g2.sendBuffer(); } // ----------------------------- // 7번 버튼: 간격 설정 // ----------------------------- bool setButtonPressed = !digitalRead(BUTTON_SET_PIN); // 눌림 감지 (LOW active) if (setButtonPressed && !lastSetButtonState) { buttonPressStart = currentMillis; buttonHeld = false; } if (setButtonPressed && (currentMillis - buttonPressStart > 1000) && !buttonHeld) { u8g2.clearBuffer(); u8g2.setFont(u8g2_font_9x15_tf); u8g2.setCursor(45, 37); u8g2.print("Done"); u8g2.sendBuffer(); delay(1000); buttonHeld = true; intervalMillis = (unsigned long)viewInter * 10000;//3600000UL; } if (!setButtonPressed && lastSetButtonState) { if (!buttonHeld) { viewInter++; if (viewInter > 24) viewInter = 0; } } lastSetButtonState = setButtonPressed; if (runButtonPressed && !lastRunButtonState) { runStartMillis = currentMillis; } if (runButtonPressed) { if(Count == 0){ u8g2.clearBuffer(); u8g2.setFont(u8g2_font_9x15_tf); u8g2.setCursor(15, 37); u8g2.print("Saving Qty.."); u8g2.sendBuffer(); } stepperMotor.step(1); delay(2); Count=1; } if (!runButtonPressed && lastRunButtonState) { lastRunDuration = currentMillis - runStartMillis; previousMillis = currentMillis; } lastRunButtonState = runButtonPressed; if (viewInter == 0 || intervalMillis == 0) { return; } if (currentMillis - previousMillis >= intervalMillis) { previousMillis = currentMillis; unsigned long startAuto = millis(); while (millis() - startAuto < lastRunDuration) { stepperMotor.step(1); delay(2); } } }