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();
}