B400 Proyek EL3014 Sistem Mikroprosesor WiMinder
STEI ITB Anggota Kelompok Nama
NIM
Fuad Ismail
13214121
Freddy Isman
13213501
1. Pengantar Dokumen ini dibuat sebagai proposal pengembangan pembuatan “WiMinder” dan sebagai syarat kelengkapan dokumen pengembangan dari segi analisis dan perancangan. 1.1. Ringkasan Isi Dokumen Dokumen kali ini berisi mengenai implementasi dan proses pengembangan proyek lebih lanjt. Dokumen ini menjelaskan tahapan lebih lanjut dari dokumen-dokumen sebelumnya seperti latar belakang, spesifikasi, dan rancangan mengenai proyek yang akan dibuat. Dokumen ini secara garis besar terbagi menjadi beberapa pokok bahasan terkait dengan implementasi dan pengembangan proyek yang dilakukan. 1.2. Tujuan Penulisan Tujuan pembuatan dokumen kali ini adalah sebagai pemenuhan syarat kelengkapan penyusuna dokumen perancangan dan pengembangan proyek yang meliputi implementasi dan realisasi alat berdasarkan perancangan pada dokumen sebelumnya. Melengkapi tujuan umum tersebut, dokumen ini juga memiliki tujuan khusus, yaitu :
Mempermudah pemahaman pembaca mengenai alat yang akan dibuat
Sebagai acuan dalam pengerjaan proyek
Sebagai acuan dalam pengembangan proyek dalam jangka panjang
2. Realisasi Perancangan Bab ini menjelaskan mengenai sejauh mana pembuatan proyek telah dilaksanakan dan seperti apa pengembangan terkait pengerjaan proyek mengacu pada dokumen dan tahap-tahap yang telah dilalui sebelumnya. Realisasi perancangan ini terdiri dari realisasi pada setiap aspek, seperti aspek hardware maupun software guna menjelaskan bagaimana realisasi alat yang sedang dan telah dilaksanakan. Ilustrasi proyek “WiMinder” secara umum diberikan sebagai berikut.
Gambar 2.1 Ilustrasi WiMinder 2.1. Realisasi Aspek Hardware Realisasi hardware ini secara umum menampilkan bagaimana bentuk dan perwujudan dari alat yang sedang dibuat dan dikembangkan, realisasi hardwarenya secara umum diberikan sebagai berikut :
Realisasi devais pemancar (node)
Devais pemancar (node) nya akan berupa sebuah modul WiFi ESP8266-12E yang di set ke mode AP. Berikut adalah rangkaian devais pemancar (node) nya.
Gambar 2.1.1 Rangkaian Devais Pemancar (Node)
ESP8266-12E adalah modul elektronik yang memiliki kapabilitas WiFi baik sebagai client maupun sebagai Access Point. ESP8266 ini nantinya akan digunakan pada devais node yang berfungsi untuk memancarkan sinyal WiFi dengan AP name yang berbeda-beda. Agar dapat berfungsi semestinya, ESP8266-12E selain membutuhkan sumber tegangan baterai minimal sebesar 3.3V, juga membutuhkan banyak komponen pendukung untuk keperluan dasar (agar dapat berfungsi semestinya) serta agar dapat direset, dan diprogram. Tegangan kerja dari modul WiFi ESP8266 adalah antara 3-3.6 V, dengan demikian sebagai sumber dayanya akan digunakan baterai LiPo dengan tegangan 3.7 V dengan disertai
regulator tegangan 3.3V. Kapasitas beterai LiPo yang akan digunakan adalah sekitar 720 mAh.
Gambar 2.1.2 Baterai LiPo 3.7 V 720 mAh
Dengan rata-rata arus yang digunakan oleh ESP8266 sebesar 80 mAh, dan dengan duty cycle hidupnya devais pemancar sebesar 50 persen, diharapkan devais mampu menyala selama 18 jam non-stop, sebelum akhirnya perlu di charge. Nantinya keseluruhan komponen yang diperlukan dalam rangkaian devais pemancar ini akan diimplementasikan diatas sebuah PCB. Beberapa alternatif lain adalah. 1. Coin cell Bateri coin cell, misal CR2032, memiliki keuntungan yang besar dari segi ukuran. Namun persamalahan dari bateri coin cell adalah tegangannya yang hanya mencapai 3 V (dengan demikian akan diperlukan dua buah disertai regulator), serta kapasitasnya yang sangat rendah, yaitu hanya 240 mAh. Terlebih lagi bateri coin cell umumnya tidak dapat di recharge.
Gambar 2.1.3 Coin cell 3 V 240 mAh
2. AAA Alkaline Alternatif yang lebih mungkin adalah menggunakan 3 baterai AAA Alkaline 1.5 V dengan kapasitas 800-1200 mAh yang dipasang secara seri. Tentu dari segi kapasitas baterai ini yang terbaik. Namun baterai tipe ini yang bisa di charge tidak umum ditemukan dan harganya pun mahal. Selain itu, dari segi ukuran, baterai ini memiliki
ukuran terbesar jika dipasang seri 3 baterai. Namun, baterai ini mungkin akan lebih dipilih untuk digunakan saat prototyping.
Gambar 2.1.4 Baterai Alkaline AAA 1.5 V 800-1200 mAh
Realisasi devais penerima (wearable)
Untuk devais penerima, beberapa komponen penyusun dasarnya adalah modul WiFi ESP8266, mikrokontroler AVR (yang sudah terintegrasi dalam board Arduino), dot matrix sebagai display sederhana, dan buzzer. Dikarenakan mikrokontoler AVR yang digunakan membutuhkan tegangan 5 V, serta konsumsi daya nya jelas akan lebih besar dibandingkan penerima (dikarenakan banyaknya devais yang dioperasikan), akan digunakan 4 baterai AAA yang dipasang secara seri, sertadengan dua buah regulator, yaitu regulator 3.3 V dan regulator 5 V yang sudah terintegrasi dalam board Arduino. Rangkaian interkoneksi ESP8266 dengan mikrokontroler AVR, buzzer, serta display nya adalah sebagai berikut.
Gambar 2.1.5 Rangkaian Devais Penerima (Wearable)
Rangkaian di atas dapat dibagi menjadi beberapa komponen utama penyusunnya, diantaranya yaitu :
AVR ATMega328 (terintegrasi pada board Arduino UNO)
AVR ATMega328 pada Arduino UNO ini nantinya akan berfungsi sebagai unit pemrosesan utama dari WiMinder. Beberapa proses yang akan dihandle oleh AVR ini adalah a. Menghandle penginputan node baru melalui komputer
b. Menerima dan memproses data dari modul WiFiagar dapat digunakan untuk menentukan apakah ada barang yang tertinggal ataukah tidak serta untuk membantu pengguna dalam men-track kembali barang-barang nya yang hilang c. Mengontrol antarmuka input/output antar pengguna dengan devais wearable WiMinder Agar dapat berfungsi semestinya, Arduino UNO juga akan membutuhkan sumber tegangan dari baterai minimal sebesar 5 V, serta beberapa interkoneksi dengan subsistem-subsistem lainnya.
modul WiFi ESP8266-12E
ESP8266-12E adalah modul elektronik yang memiliki kapabilitas WiFi baik sebagai client maupun sebagai Access Point. ESP8266 ini nantinya akan digunakan pada devais wearable yang berfungsi untuk men-scan kuat sinyal dari tiap node-node serta mengirimkan data tersebut ke unit pemrosesan, yaitu Arduino Uno. Agar dapat berfungsi semestinya, ESP826612E selain membutuhkan sumber tegangan baterai minimal sebesar 3.3V, juga membutuhkan banyak komponen pendukung untuk keperluan dasar (agar dapat berfungsi semestinya) serta agar dapat direset, dan diprogram.
Dot Matrix
Dot Matrix digunakan sebagai devais untuk menampilkan informasi atau data dari devais lain yang terhubung dengan devais tersebut dalam resolusi yang terbatas. Tampilan Dot Matrix secara umum berupa sekumpulan LED yang tersusun secara rapi membentuk bidang rectangular, yang mana satu buah LED pada Dot Matrix menyatakan satu pixel resolusinya. Untuk implementasinya pada WiMinder, Dot Matrix berfungsi untuk menampilkan list dari barang-barang milik pengguna yang telah di embedded dengan modul WiFi yang telah disebutkan sebelumnya. Secara detail, untuk setiap barang milik pengguna yang ditampilkan pada Dot Matrix diwakili oleh sebuah LED (pixel) pada posisi tertentu. Posisi pixel yang berbeda mewakili barang yang berbeda pula. Untuk cara kerja tampilan pada Dot Matrix-nya, setiap LED berkedap-kedip dengan kecepatan tertentu disesuaikan dengan jarak barang yang diwakilinya terhadap pengguna. Semakin jauh jarak barang yang diwakilinya terhadap pengguna, maka kedap-kedip LED tersebut akan semakin lambat, dan demikian pula sebaliknya.
Buzzer
Buzzer merupakan devais yang berfungsi untuk memberikan sinyal pada pengguna berupa suara. Untuk implementasinya pada WiMinder, sinyal suara dari Buzzer disesuaikan dengan kedap-kedip dari LED (pixel) yang dipilih pada posisi tertentu. Oleh karena itu, maka devais dari Buzzer perlu diintegrasikan dengan board Arduino agar Arduino dapat menentukan bunyi buzzer yang disesuaikan dengan posisi LED (pixel) pada Dot Matrix yang dipilih.
2.2. Realisasi Aspek Software Pada aspek software ini dibahas mengenai perkembangan program yang dibuat dan akan digunakan. Pada praktiknya realisasi pada aspek ini juga tidak sepenuhnya tercapai sama seperti pada aspek lain. Sebelumnya, cara kerja program secara umum diilustrasikan oleh flowchart berikut.
Gambar 2.2.1 Flowchart Sistem
Untuk menunjukkan sejauh mana perkembangan realisasi aspek ini, berikut diberikan source code program yang telah dikembangkan.
Source code node.ino
#include "ESP8266WiFi.h"
#include <Wire.h> #define node_size 5 char* nodes[node_size] = {"Phone","Wallet","Key-1","Key2","Earphone"}; int nodes_signal[node_size] = {200, 200, 200, 200, 200}; String dataToSend = ""; char dataToSendArr[100] = ""; void setup() { Serial.begin(115200); Wire.begin(2,14); WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); Serial.println("Setup done"); } void loop() { for (int i = 0; i < node_size; i++){ nodes_signal[i] = 200; } Serial.println("scan start"); // WiFi.scanNetworks will return the number of networks found int n = WiFi.scanNetworks(); Serial.println("scan done"); if (n == 0) Serial.println("no networks found"); else { for (int i = 0; i < n; ++i) { for(int j = 0; j < node_size; j++){ if(WiFi.SSID(i) == nodes[j]) nodes_signal[j] = WiFi.RSSI(i); } } } dataToSend = ""; for(int i = 0; i < node_size; i++){ dataToSend += String(abs(nodes_signal[i])) + "*"; } dataToSend.toCharArray(dataToSendArr,100); Wire.beginTransmission(6); Wire.write(dataToSendArr); Wire.endTransmission(); delay(1); delay(5000); }
Source code wearable.ino
#undef main #define RST 12 #define CE 11 #define DC 10 #define DIN 9 #define CLK 8
// // // // //
PB4 PB3 PB2 PB1 PB0
#define #define #define #define
UP 7 ACTION 6 DOWN 5 BUZZER 3
// // // //
PD7 PD6 PD5 PD3
#include "Lcd5110.h"; #include <Wire.h> #define node_size 5 char* nodes[node_size] = {"Phone","Wallet","Key-1","Key2","Earphone"}; boolean nodes_ignore[node_size] = {false, true, true, true, true}; int nodes_signal[node_size] = {200,200,200,200,200}; int item_select = 0; int start_pos = 0; int select_pos = 0; int itemMissing = 0; boolean searching = false; void display_menu(){ LcdClearScreen(); LcdXY((84-10*6)/2,0); LcdWriteString("MY DEVICES"); LcdXY(0,1); LcdWriteString("----------------"); for(int i = 0; i < 4; i++){ LcdXY(0,i+2); if(i > node_size-1) break; if(i == select_pos){ LcdWriteStringInverted(nodes[start_pos+i]); }else{ LcdWriteString(nodes[start_pos+i]); } if(nodes_ignore[start_pos+i]){ LcdXY(84-7,i+2); LcdWriteString("X"); } } } void receiveEvent(int howMany){ String receivedData = ""; String tempData = ""; int itemNum = 0; while(Wire.available()){ char c = Wire.read(); receivedData += c; } Serial.println(receivedData); for(int i = 0; i < receivedData.length(); i++){ if(receivedData.charAt(i) != '*'){ tempData += receivedData.charAt(i); }else{ nodes_signal[itemNum] = tempData.toInt(); tempData = ""; itemNum++; } } if(!searching){
for(int i = 0; i < node_size; i++){ if(nodes_signal[i] > 60 && !nodes_ignore[i]){ itemMissing = i; LcdClearScreen(); LcdXY(0,0); for(int i = 0; i < 84*4; i++) LcdWriteData(pgm_read_byte(&alert[i])); LcdXY((84-6*strlen(nodes[itemMissing]))/2,4); LcdWriteString(nodes[itemMissing]); searching = true; analogWrite(BUZZER,100); while(PIND & 0b01000000); while(!(PIND & 0b01000000)); analogWrite(BUZZER,0); break; } } } if(searching){ LcdClearScreen(); char dataToDisplayArr[100]; String dataToDisplay = String(nodes_signal[itemMissing]); dataToDisplay.toCharArray(dataToDisplayArr,100); Serial.println(dataToDisplay); LcdXY(21,2); LcdWriteString("-"); LcdXY(28,2); LcdWriteString(dataToDisplayArr); LcdXY(47,2); LcdWriteString("dBm"); } } int main(void) { init(); Serial.begin(115200); Wire.begin(6); Wire.onReceive(receiveEvent); DDRB = (1<
0) item_select--; if(select_pos > 0){ select_pos--; }else{ if(start_pos > 0){ start_pos--; } }
display_menu(); }else if(!(PIND & 0b00100000) && !searching){ while(!(PIND & 0b00100000)); if(item_select < node_size-1){ item_select++; if(select_pos < 3){ select_pos++; }else{ if(start_pos < node_size-4){ start_pos++; } } } display_menu(); }else if(!(PIND & 0b01000000) && !searching){ while(!(PIND & 0b01000000)); nodes_ignore[item_select]=!nodes_ignore[item_select]; display_menu(); } if(!(PIND & 0b00100000) && searching){ while(!(PIND & 0b00100000)); searching = !searching; _delay_ms(100); } else if(!(PIND & 0b10000000) && searching){ while(!(PIND & 0b10000000)); nodes_ignore[itemMissing] = true; searching = !searching; _delay_ms(100); } _delay_ms(1); } return 0; }
Source code Lcd5110.h
#include #include const byte ASCII[][5] PROGMEM= { {0x00, 0x00, 0x00, 0x00, 0x00} ,{0x00, 0x00, 0x5f, 0x00, 0x00} ,{0x00, 0x07, 0x00, 0x07, 0x00} ,{0x14, 0x7f, 0x14, 0x7f, 0x14} ,{0x24, 0x2a, 0x7f, 0x2a, 0x12} ,{0x23, 0x13, 0x08, 0x64, 0x62} ,{0x36, 0x49, 0x55, 0x22, 0x50} ,{0x00, 0x05, 0x03, 0x00, 0x00} ,{0x00, 0x1c, 0x22, 0x41, 0x00} ,{0x00, 0x41, 0x22, 0x1c, 0x00} ,{0x14, 0x08, 0x3e, 0x08, 0x14} ,{0x08, 0x08, 0x3e, 0x08, 0x08} ,{0x00, 0x50, 0x30, 0x00, 0x00} ,{0x08, 0x08, 0x08, 0x08, 0x08}
// // // // // // // // // // // // // //
20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d
! " # $ % & ' ( ) * + , -
,{0x00, ,{0x20, ,{0x3e, ,{0x00, ,{0x42, ,{0x21, ,{0x18, ,{0x27, ,{0x3c, ,{0x01, ,{0x36, ,{0x06, ,{0x00, ,{0x00, ,{0x08, ,{0x14, ,{0x00, ,{0x02, ,{0x32, ,{0x7e, ,{0x7f, ,{0x3e, ,{0x7f, ,{0x7f, ,{0x7f, ,{0x3e, ,{0x7f, ,{0x00, ,{0x20, ,{0x7f, ,{0x7f, ,{0x7f, ,{0x7f, ,{0x3e, ,{0x7f, ,{0x3e, ,{0x7f, ,{0x46, ,{0x01, ,{0x3f, ,{0x1f, ,{0x3f, ,{0x63, ,{0x07, ,{0x61, ,{0x00, ,{0x02, ,{0x00, ,{0x04, ,{0x40, ,{0x00, ,{0x20, ,{0x7f, ,{0x38, ,{0x38, ,{0x38, ,{0x08, ,{0x0c, ,{0x7f, ,{0x00, ,{0x20,
0x60, 0x10, 0x51, 0x42, 0x61, 0x41, 0x14, 0x45, 0x4a, 0x71, 0x49, 0x49, 0x36, 0x56, 0x14, 0x14, 0x41, 0x01, 0x49, 0x11, 0x49, 0x41, 0x41, 0x49, 0x09, 0x41, 0x08, 0x41, 0x40, 0x08, 0x40, 0x02, 0x04, 0x41, 0x09, 0x41, 0x09, 0x49, 0x01, 0x40, 0x20, 0x40, 0x14, 0x08, 0x51, 0x7f, 0x04, 0x41, 0x02, 0x40, 0x01, 0x54, 0x48, 0x44, 0x44, 0x54, 0x7e, 0x52, 0x08, 0x44, 0x40,
0x60, 0x08, 0x49, 0x7f, 0x51, 0x45, 0x12, 0x45, 0x49, 0x09, 0x49, 0x49, 0x36, 0x36, 0x22, 0x14, 0x22, 0x51, 0x79, 0x11, 0x49, 0x41, 0x41, 0x49, 0x09, 0x49, 0x08, 0x7f, 0x41, 0x14, 0x40, 0x0c, 0x08, 0x41, 0x09, 0x51, 0x19, 0x49, 0x7f, 0x40, 0x40, 0x38, 0x08, 0x70, 0x49, 0x41, 0x08, 0x41, 0x01, 0x40, 0x02, 0x54, 0x44, 0x44, 0x44, 0x54, 0x09, 0x52, 0x04, 0x7d, 0x44,
0x00, 0x04, 0x45, 0x40, 0x49, 0x4b, 0x7f, 0x45, 0x49, 0x05, 0x49, 0x29, 0x00, 0x00, 0x41, 0x14, 0x14, 0x09, 0x41, 0x11, 0x49, 0x41, 0x22, 0x49, 0x09, 0x49, 0x08, 0x41, 0x3f, 0x22, 0x40, 0x02, 0x10, 0x41, 0x09, 0x21, 0x29, 0x49, 0x01, 0x40, 0x20, 0x40, 0x14, 0x08, 0x45, 0x41, 0x10, 0x7f, 0x02, 0x40, 0x04, 0x54, 0x44, 0x44, 0x48, 0x54, 0x01, 0x52, 0x04, 0x40, 0x3d,
0x00} 0x02} 0x3e} 0x00} 0x46} 0x31} 0x10} 0x39} 0x30} 0x03} 0x36} 0x1e} 0x00} 0x00} 0x00} 0x14} 0x08} 0x06} 0x3e} 0x7e} 0x36} 0x22} 0x1c} 0x41} 0x01} 0x7a} 0x7f} 0x00} 0x01} 0x41} 0x40} 0x7f} 0x7f} 0x3e} 0x06} 0x5e} 0x46} 0x31} 0x01} 0x3f} 0x1f} 0x3f} 0x63} 0x07} 0x43} 0x00} 0x20} 0x00} 0x04} 0x40} 0x00} 0x78} 0x38} 0x20} 0x7f} 0x18} 0x02} 0x3e} 0x78} 0x00} 0x00}
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 69 6a
. / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ � ] ^ _ ` a b c d e f g h i j
,{0x7f, ,{0x00, ,{0x7c, ,{0x7c, ,{0x38, ,{0x7c, ,{0x08, ,{0x7c, ,{0x48, ,{0x04, ,{0x3c, ,{0x1c, ,{0x3c, ,{0x44, ,{0x0c, ,{0x44, ,{0x00, ,{0x00, ,{0x00, ,{0x10, ,{0x78, }; const 0x00, 0x00, 0xE0, 0x1C, 0x0E, 0x07, 0x07, 0x1C, 0x70, 0x00, 0x00, 0x7C, 0x07, 0x49, 0x92, 0x00, 0x00, 0x00, 0x00, 0x07, 0x7C, 0x1F, 0x00, 0x00, 0xF6, 0x10, 0xF6, 0x00, 0xFF, 0x40, 0x00, 0xF0, 0xC0, 0x08, 0x07, 0x00, 0x0F,
0x10, 0x41, 0x04, 0x08, 0x44, 0x14, 0x14, 0x08, 0x54, 0x3f, 0x40, 0x20, 0x40, 0x28, 0x50, 0x64, 0x08, 0x00, 0x41, 0x08, 0x46,
0x28, 0x7f, 0x18, 0x04, 0x44, 0x14, 0x14, 0x04, 0x54, 0x44, 0x40, 0x40, 0x30, 0x10, 0x50, 0x54, 0x36, 0x7f, 0x36, 0x08, 0x41,
0x44, 0x40, 0x04, 0x04, 0x44, 0x14, 0x18, 0x04, 0x54, 0x40, 0x20, 0x20, 0x40, 0x28, 0x50, 0x4c, 0x41, 0x00, 0x08, 0x10, 0x46,
0x00} 0x00} 0x78} 0x78} 0x38} 0x08} 0x7c} 0x08} 0x20} 0x20} 0x7c} 0x1c} 0x3c} 0x44} 0x3c} 0x44} 0x00} 0x00} 0x00} 0x08} 0x78}
// // // // // // // // // // // // // // // // // // // // //
6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f
k l m n o p q r s t u v w x y z { | } ? ?
unsigned char wiminder [] PROGMEM= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xE0, 0x70, 0x70, 0x70, 0x38, 0x38, 0x38, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x38, 0x38, 0x38, 0x78, 0x70, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3C, 0x1E, 0x0F, 0x07, 0x03, 0x41, 0x21, 0x10, 0x88, 0x44, 0x22, 0x49, 0x49, 0x49, 0x89, 0x12, 0x22, 0x44, 0x88, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x1E, 0x3C, 0xF8, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF3, 0x00, 0x00, 0x00, 0xF6, 0x00, 0x00, 0x00, 0xE3, 0x10, 0x10, 0xE0, 0x00, 0x00, 0x00, 0xF6, 0x00, 0x00, 0x00, 0xF0, 0x20, 0x10, 0xC0, 0x20, 0x10, 0x10, 0x00, 0x00, 0xC0, 0xA0, 0x90, 0x90, 0xE0, 0x20, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x0F, 0x3F, 0xFF, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x07, 0x08, 0x08, 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00,
0x00, 0x00, 0x00, 0x1C, 0x1C, 0x1C, 0x07, 0x07, 0x07, 0x1C, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0xF8, 0x12, 0x92, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0xF0, 0xFC, 0xFF, 0x00, 0x80, 0x00, 0x20, 0xE0, 0x10, 0x10, 0xE0, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0xFF, 0xFC, 0x00, 0x07, 0x08, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x00,
0x00, 0x07, 0x08, 0x00, 0xC0, 0x00, 0xE0, 0x00, 0x00, 0x20, 0x24, 0x3E, 0x00, 0x00, 0x38, 0x03, 0x00, 0x01, 0x1C, 0x70, 0xE0, 0xE0, 0x70, 0x1C, 0x01, 0x00, };
0x00, 0x08, 0x00, 0x00, 0xF8, 0x00, 0xC0, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x03, 0x38, 0x70, 0xE0, 0xE0, 0x38, 0x1C, 0x01, 0x00,
0x0F, 0x08, 0x00, 0x00, 0xFF, 0x00, 0xC0, 0x00, 0x00, 0x1E, 0x00, 0x20, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x03, 0x38, 0x70, 0xE0, 0xE0, 0x38, 0x1C, 0x00, 0x00,
0x00, 0x08, 0x0F, 0x00, 0x3F, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x38, 0x70, 0xE0, 0xE0, 0x38, 0x1C, 0x00, 0x00,
0x00, 0x0F, 0x00, 0x00, 0x0F, 0x07, 0x80, 0x00, 0x1E, 0x3E, 0x04, 0x1C, 0x00, 0x80, 0x07, 0x00, 0x00, 0x07, 0x78, 0x70, 0xE0, 0xE0, 0x38, 0x0E, 0x00, 0x00,
const 0x00, 0x00, 0x00, 0x80, 0xF0, 0x7C, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x1E, 0xFF, 0x07, 0x00, 0x00, 0x00,
unsigned char alert [] PROGMEM= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xE0, 0xF0, 0xF8, 0xF8, 0xF8, 0x7C, 0x7C, 0x7C, 0x7C, 0xF8, 0xF8, 0xF8, 0xF0, 0xE0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xE0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x07, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0F, 0x1F, 0x3E, 0x3C, 0x78, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x22, 0x00, 0x3E, 0x0A, 0x1A, 0x22, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xE0, 0xF0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0E, 0x1E, 0x1C, 0x1C, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x70, 0x70, 0x70, 0x70, 0x0E, 0x07, 0x07, 0x07, 0x03, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7C, 0x7C, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0xFC, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0x1F, 0x0F, 0x01, 0x00, 0x00, 0x00, }; void void void void void void void void void void
0x00, 0x00, 0x00, 0x07, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0x1F, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0F, 0x1F, 0x01, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x1F, 0x1F, 0x1F, 0x1F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
LcdXY(int x, int y); LcdClearScreen(); LcdWriteString(char* characters); LcdWriteStringInverted(char* characters); LcdWriteCharacter(char character); LcdWriteCharacterInverted(char character); LcdWriteData(byte dat); LcdWriteCmd(byte cmd); myShiftOut(uint8_t val); LcdSetup();
void LcdXY(int x, int y) { LcdWriteCmd(0x80 | x); LcdWriteCmd(0x40 | y); } void LcdClearScreen() { LcdXY(0,0); for(int i=0; i < 504; i++) LcdWriteData(0x00); } void LcdWriteString(char *characters) { while(*characters) LcdWriteCharacter(*characters++); } void LcdWriteStringInverted(char *characters) { while(*characters) LcdWriteCharacterInverted(*characters++); } void LcdWriteCharacter(char character) { for(int i=0; i < 5; i++) LcdWriteData(pgm_read_byte(&(ASCII[character - 0x20][i]))); LcdWriteData(0x00); } void LcdWriteCharacterInverted(char character) { for(int i=0; i < 5; i++) LcdWriteData(~(pgm_read_byte(&(ASCII[character - 0x20][i])))); LcdWriteData(0xFF); } void LcdWriteData(byte dat) {
PORTB |= (1<
LCD set set LCD LCD LCD
extended commands LCD Vop (contrast) temp coefficent bias mode 1:40 basic commands all segments on