January 20, 2010

MySQL - Selisih Tanggal

Perintah:

SELECT (date(sysdate())-date(waktu)) AS selisih FROM trx
berjalan dengan hasil yg sesuai harapan pada MySQL Windows, namun tidak bisa dijalankan di MySQL pada sistem operasi GNU/Linux.

Pada MySQL sistem operasi tersebut, nilai kalkulasi selisih tanggal selalu sama dengan nol, padahal untuk tanggal yang berbeda, seharusnya bernilai bukan nol.

Setelah berpusing-pusing ria dan membuka-buka MySQL 5.0 Reference, disertai dengan serangkaian trial and error. Akhirnya ketemu juga solusinya, yaitu mengubah metode date calculation mejadi sebagai berikut:
SELECT DATEDIFF(SYSDATE(),waktu) AS selisih FROM trx

January 15, 2010

Cursor mouse loncat-loncat

Bagi pengguna ubuntu, adakah yang sering mengalami terkadang cursor mouse loncat-loncat? Sangat mengganggu bukan? Jika iya, mungkin hal berikut bisa menjadi solusinya.

Pertama buka file konfigurasi xorg.conf dengan perintah berikut:
$ sudo gedit /etc/X11/xorg.conf

Cari kelompok baris yang menunjukkan device mouse anda, kemudian ganti protocol-nya menjadi auto.

Jika sudah simpan file tersebut, kemudian lakukan logoff atau restart komputer anda. Dan hasilnya, rasakan hidup lebih nyaman tanpa mouse yang meloncat-loncat.

January 10, 2010

AVR - Konversi Double ke String

Pada pemrograman mikrokontroler AVR 8-bit (contoh ATmega8) dengan menggunakan compiler avr-gcc, mungkin sebagian newbie agak bingung bagaimana cara melakukan konversi variable dengan tipe double menjadi string (array of char). Semisal kita melakukan perhitungan sebagai berikut:

double v_sekarang;
v_sekarang = ((ADCH << 8) + ADCL) * 0.0048828125;

Hasil dari rumus diatas, jelas adalah variable double (bilangan tidak bulat).

Untuk dapat ditampilkan ke LCD atau dikirim ke UART (dalam bentuk string), tentunya bilangan tersebut diatas perlu dikonversi terlebih dahulu. Caranya adalah sebagai berikut:

  • Pada kode program, tambahkan header stdlib.h
    #include <stdlib.h>
    
  • Buat variable array of char sepanjang presisi yang anda inginkan. Misal jika hasil perhitungan adalah range dari 0.000 hingga 9.999, maka dibutuhkan 5 karakter pada array. Supaya lebih aman compiler mengalokasikan memory, tambahlah minimal satu karakter untuk menyimpan termination string.
    char v_char[6];
    
  • Lakukan konversi dari double ke string dengan menggunakan fungsi dtostrf().
    dtostrf(v_sekarang,1,3,v_char);
    
    dengan 1 adalah panjang bilangan di depan koma, dan 3 adalah panjang bilangan di belakang koma.

Variable string hasil konversi yang berbentuk array of char telah didapatkan, anda bisa langsung menampilkan ke LCD, atau dikirim melalui UART.

Jika ditulis kembali, kode program adalah sebagai berikut:
...
//pada header
#include <stdlib.h>
...
//pada variable global
double v_sekarang;
char v_char[6];
...
...
//pada tubuh program
v_sekarang = ((ADCH << 8) + ADCL) * 0.0048828125; //konversi ADC
dtostrf(v_sekarang,1,3,v_char); //double to string
uart_puts(v_char); //kirim ke UART
...
...