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.project.semesin.com"));
atau jika menggunakan alamat
const PROGMEM char text[] = "https://www.project.semesin.com"; 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
Offset anggota struct
Ketika menggunakan memori EEPROM untuk menyimpan struktur data (struct), maka untuk merujuk data tertentu dapat menggunakan fungsi ‘offsetof’ (jika alamat struct di EEPROM = 0)
struct Setting { byte tokenSetting; byte jumlahDatabase; byte password[4]; }; Serial.println(offsetof(Setting, tokenSetting)); Serial.println(offsetof(Setting, jumlahDatabase));
Karakter Simbol untuk LCD Matrix
LCD karakter menyimpan font di dalam memory internalnya dengan penomoran 0 hingga 255. Sebagi contoh simbol derajat ‘°’ bernilai 223 (hex 0xDF) maka untuk mencetak karakter diluar char (0x80 – 0xFF) nilai tersebut di cast dulu menjadi char.
lcd.print((char)223);
Set baudrate esp8266
Penggunaan SoftwareSerial menjadi alternatif untuk komunikasi serial, namun menjadi tidak stabil pada baudrate yang tinggi. Seperti pada esp8266 yang lalu lintas komunikasi serial-nya besar akan sangat berpengaruh akibat ketidakstabilan ini. Untuk itu baudrate esp8288 mau tidak mau harus diturunkan menjadi 9600, caranya adalah dengan memberikan perintah AT command kepada esp8266 seperti berikut :
AT+UART_DEF=9600,8,1,0,0