Dalam proses perulangan dengan delay, seringkali kita harus menunggu proses tersebut hingga selesai. terdapat beberapa metode untuk menghentikan/memotong perulangan tersebut diantaranya:
- Metode interrupt
- Metode millis (tanpa for-loop secara langsung).
Berukut ini saya sertakan sketch dengan metode millis, cara kerjanya sbb:
- tekan ‘m’ untuk mulai LED blinking (100 kali)
- tekan ‘b’ untuk menghentikan proses perulangan LED blinking
nb: melalui serial monitor (setting baudrate 9600, no ending line)
Komponen pengujian yang digunakan:
- Arduino UNO (internal LED)
sketch dengan millis():
Metode serial available:
char input = 0; int counter = 0; long MillisValue = 0; int timeDelay = 500;//dalam milisecond bool pinState = false; void setup() { Serial.begin(9600); pinMode(LED_BUILTIN,OUTPUT); Serial.println("Tekan 'm' untuk mulai, dan 'b' untuk berhenti"); Serial.println("https://www.project.semesin.com"); } void loop() { if(Serial.available()) { input = Serial.read(); Serial.println(input); } if(input=='m')//mulai { counter = 200; // dikali 2 (on-off-on = 3) MillisValue = millis(); input = 0; Serial.println("Mulai"); } else if(input=='b')//berhenti { counter = 0; input = 0; digitalWrite(LED_BUILTIN, LOW); Serial.println("Berhenti"); } if(counter && ((MillisValue + timeDelay) < millis())) { counter--; pinState = !pinState; digitalWrite(LED_BUILTIN, pinState); MillisValue = millis(); } }
metode serialEvent:
char input = 0; int counter = 0; long MillisValue = 0; int timeDelay = 500;//dalam milisecond bool pinState = false; void setup() { Serial.begin(115200); pinMode(LED_BUILTIN,OUTPUT); Serial.println("Tekan 'm' untuk mulai, dan 'b' untuk berhenti"); Serial.println("https://www.project.semesin.com"); } void loop() { if(input=='m')//mulai { counter = 200; // dikali 2 (on-off-on = 3) MillisValue = millis(); input = 0; Serial.println("Mulai"); } else if(input=='b')//berhenti { counter = 0; input = 0; digitalWrite(LED_BUILTIN, LOW); Serial.println("Berhenti"); } if(counter && ((MillisValue + timeDelay) < millis())) { counter--; pinState = !pinState; digitalWrite(LED_BUILTIN, pinState); MillisValue = millis(); } } void serialEvent() { input = Serial.read(); }