Sabtu, 30 Januari 2010

Menampilkan Bilangan Float (Pecahan)

.
Habis Coding n mumpung ingat... (kemarin)
Okelah kalo lanjut...

Beberapa coding di internet mungkin telah anda baca mengenai cara menampilkan bilangan float (pecahan) seperti pada beberapa tutorial tentang cara mengakses sensor ultrasonik PING dan menampilkan bilangan pecahan hasil pembacaan jarak pada LCD / komputer.

Dan ketika saya sedang memprogram project Voltmeter digital. Saya sedikit bingung menampilkan bilangan float (pecahan).

Cara I : Menggunakan Sprintf
Saya coba menggunakan perintah sprint, cukup akurat untuk menampilkan pecahan hingga 6 angka dibelakang koma langkah-langkahnya yaitu :












  1. Pada project sudah di buat, klik Project-Configure.
  2. Pada tab (s)printf Features pilih float,width,precision hal ini menyebabkan perintah sprintf dapat menampilkan bilangan float (pecahan) dan mendukung lebih banyak jenis bilangan antara lain '+'. '-', '0' dan ' ' flag dan menggunakan sprintf menjadi lebih banyak fungsi seperti : 'c', 's', 'p', 'i', 'd', 'u', 'e', 'E', 'f', 'x', 'X', '%' (silahkan lihat help-nya).
  3. Atur nilai Data Stack Size menjadi lebih besar karena proses konversi nilai float agar dapat ditampilkan membutuhkan memori yang lebih besar.
Jika langkah diatas tidak dilakukan dan anda ingin menampilkan bilangan float (pecahan), tidak akan ada pesan ERROR ataupun WARNING yang terlihat tetapi program anda tidak akan berjalan. Pada LCD ataupun komunikasi serial tidak akan menampilkan apa-apa.

Setelah pengaturan selesai jalankan Coding berikut dan test pada serial atau LCD.
Mengapa tampilannya 0.123457 yang seharusnya 0.123456789 hal ini karena dibatasi oleh kompilernya sebanyak 6 digit dibelakang koma.

Pada digit terakhir merupakan pembulatan yaitu 0.123456789 dibulatkan menjadi 0.123457.
Coba anda ganti dengan 0.123456123 maka akan ditampilkan 0.123456.

Cara II : Dengan FTOA (Float to Array)
Cara ini lebih sederhana dengan Data Stack Size yang kecil (128) dan tidak perlu pengaturan apapun. Anda cukup memanggil library .
Sebelum mencoba kembalikan konfigurasi Data Stack Size dan (s)printf Feature seperti semula dan coba coding berikut ini :

fungsi ftoa ternyata menampilkan hal yang sama seperti sprintf dan hasilnya pun sama.

Cara ini lebih sederhana karena anda tidak perlu menambah Data Stack Size dan melakukan pengaturan lainnya.

Silahkan coba juga itoa dan fungsi lain pada library stdlib.
Baca Help CoViAVR.

Jangan lupa membaca tentang :
Matematika pd Bilangan Pecahan (float)

Met mencoba ;)

Topik yang Populer