Clock 1Hz
Clock 1Hz atau penanda detik tanpa rtc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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:
1 |
atau jika menggunakan alamat
1 2 3 4 5 | 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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:
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 | #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
1 2 3 4 | 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)
1 2 3 4 5 6 7 8 9 | 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.
1 | 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