Trik pemograman arduino

Clock 1Hz

Clock 1Hz atau penanda detik tanpa rtc

long millisDetik;

void setup() {
  millisDetik = millis();
}

void loop() {
  if(millisDetik != millis() / 1000L)
  {
    millisDetik = millis() / 1000L;

    // Kode

  }
}

Menghemat RAM menggunakan flash string

Arduino memiliki memory ram yang kecil, salah satu langkah penghematan adalah dengan memasukkan konstanta text / string ke dalam flash seperti kode berikut:

  Serial.println(F("https://www.semesin.com/project"));

atau jika menggunakan alamat

const PROGMEM char text[] = "https://www.semesin.com/project";
void setup() {
  Serial.begin(9600);
  Serial.println((const __FlashStringHelper *)text);
}

Definisi nilai output

Nilai parameter fungsi digitalWrite relay (NC/NO) dan transistor/mosfet sering kali terbalik, untuk mempermudah pekerjaan nilainya LOW-nya lebih baik didefenisikan.

#define pinRelay   8
#define relayLOW   HIGH //relay dengan nilai kebalikan

void setup() {
  pinMode(pinRelay, OUTPUT);
}

void loop() {
  digitalWrite(pinRelay, relayLOW);//mati
  delay(1000);
  digitalWrite(pinRelay, !relayLOW);//hidup
  delay(1000);
}

Cast Float to Byte Array

Dalam komunikasi data berbentuk float, lebih baik mengirim data berupa byte array dari pada nilai string dari float

Serial.begin(9600);
float nilaiFloat = 0.15625;
byte *arrayByte;

arrayByte = (byte*)&nilaiFloat;
Serial.print(nilaiFloat);
Serial.print(" = ");
Serial.print(arrayByte[3],HEX);
Serial.print(' ');
Serial.print(arrayByte[2],HEX);
Serial.print(' ');
Serial.print(arrayByte[1],HEX);
Serial.print(' ');
Serial.println(arrayByte[0],HEX);

Aksi tombol repeat (tekan lama dan berulang)

Penggunaan tombol untuk merubah nilai settingan naik dan turun dengan fitur ‘tekan sekali-berubah sekali’ dan ‘tekan lama-berubah berulang’  (repeating button) bisa menggunakan metode berikut:

#define pinTombolUp         2
pinMode(pinTombolUp, INPUT_PULLUP);
if (!digitalRead(pinTombolUp))
{
  delay(50);//debounce
  bool tombolStart = true;
  while (!digitalRead(pinTombolUp))
  {


    // Aksi tombol disini


    if (tombolStart)
    {
      //tekan pertama delay 10*50 = 500ms
      for (byte d = 0; d < 10 && !digitalRead(pinTombolUp); d++)
      {
        delay(50);
      }
      tombolStart = false;
    }
    else
    {
      delay(100);//perulangan aksi dengan delay 100ms
    }
  }
}

Konstanta memory

Konstanta memory mikrokontroller pada arduino

  Serial.println(FLASHEND);//ukuran flash
  Serial.println(RAMEND);//ukuran ram
  Serial.println(XRAMEND);//ukuran ram tambahan
  Serial.println(E2END);//ukuran eeprom
Bagikan Link halaman ini :

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.