Sistem blink alarm dengan arduino

Dalam proses perulangan dengan delay, seringkali kita harus menunggu proses tersebut hingga selesai. terdapat beberapa metode untuk menghentikan/memotong perulangan tersebut diantaranya:

  1. Metode interrupt
  2. Metode millis (tanpa for-loop secara langsung).

Berukut ini saya sertakan sketch dengan metode millis, cara kerjanya sbb:

  1. tekan ‘m’ untuk mulai LED blinking (100 kali)
  2. tekan ‘b’ untuk menghentikan proses perulangan LED blinking

nb: melalui serial monitor (setting baudrate 9600, no ending line)

Komponen pengujian yang digunakan:

  1. 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.semesin.com/project");
}

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.semesin.com/project");
}

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