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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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" ); } 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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" ); } 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(); } |