반응형
콩나물자동재배기 최종 코드 완성
많은 시행착오를 거친 끝에 콩나물자동재배기 최종 코드를 완성했습니다. 펌프 IN, OUT 구조를 확인하는데도 여러 번의 시도를 거쳤고, 물량을 맞추는 시도도 많았습니다. 결국 1회에 30초, 하루 6회로 결정했습니다.
const int pumpPin1 = 10;
const int pumpPin2 = 6;
const int switchPin = 2; // 스위치 연결 핀
const unsigned long PUMP_ON_TIME = 30000UL; // 30초
const unsigned long INTERVAL = 14370000UL; // 4시간 - 30초
unsigned long previousMillis = 0;
bool pumpRunning = false;
unsigned long pumpStartMillis = 0;
void setup() {
pinMode(pumpPin1, OUTPUT);
pinMode(pumpPin2, OUTPUT);
pinMode(switchPin, INPUT_PULLUP); // 내부 풀업 사용
digitalWrite(pumpPin1, LOW);
digitalWrite(pumpPin2, LOW);
}
void loop() {
unsigned long currentMillis = millis();
// 1. 자동 급수 시작 조건: 4시간 경과
if (!pumpRunning && (currentMillis - previousMillis >= INTERVAL)) {
startPump(currentMillis);
}
// 2. 수동 급수 시작 조건: 스위치를 누르면
// INPUT_PULLUP 방식이므로 평소 HIGH, 누르면 LOW
if (!pumpRunning && digitalRead(switchPin) == LOW) {
startPump(currentMillis);
}
// 3. 펌프가 켜져 있는 상태에서 20초가 지나면 정지
if (pumpRunning && (currentMillis - pumpStartMillis >= PUMP_ON_TIME)) {
stopPump(currentMillis);
}
}
void startPump(unsigned long now) {
digitalWrite(pumpPin1, HIGH);
digitalWrite(pumpPin2, LOW);
pumpRunning = true;
pumpStartMillis = now;
}
void stopPump(unsigned long now) {
digitalWrite(pumpPin1, LOW);
digitalWrite(pumpPin2, LOW);
pumpRunning = false;
previousMillis = now; // 여기서부터 다시 4시간 계산
}

또한 버튼을 하나 둬서 버튼 신호가 가면 바로 30초간 물이 주어지도록 추가했습니다. 과정에서 인공지능의 도움을 많이 받았습니다.
반응형
'컴퓨터 활용 > 노년에 즐기는 코딩' 카테고리의 다른 글
| ebook-convert 완전 정리 (1) | 2026.03.02 |
|---|---|
| 와이파이 백업 디바이스란 무엇인가? (1) | 2026.02.28 |
| USB 미니 가습기 DIY 키트 (0) | 2026.02.27 |
| 웹서버 복구 대신 데이터베이스 활용한 전자책 발간 (1) | 2026.02.21 |
| [클라우드] 구글 클라우드 경고 해결 과정 (0) | 2026.02.04 |
댓글