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