上一期 ROSA 開發處理了日期與時間,因為 Nokia 5110 LCD 可顯示 48 x 84 pixels,所以它可顯示 6 x 14 字元,因此弄一個功能選單,本文就此說明。
第一行顯示日期時間,第二行顯示選單標題以反黑標示,第三到第六行為選單內容,另外左邊保留一 > 符號,用來表示選擇某個選項。
#include "..\ROSA_DEFINE.h"
#if defined(DISPLAY_NONE)
#define ledPin 13 // 第13隻接腳控制 LED 明滅。
byte state = 0;
void ROSA_DISPLAY_SETUP() {
// put your setup code here, to run once:
pinMode(ledPin, OUTPUT);
}
void ROSA_DISPLAY_LOOP() {
state = 1 - state;
if (state==0)
digitalWrite(ledPin, LOW); // 設定PIN13腳位為低電位= 0V ,LED 熄滅
else
digitalWrite(ledPin, HIGH); // 設定PIN13腳位為高電位= 5V ,LED 發亮
}
void ROSA_DISPLAY_DATE() {
}
void ROSA_DISPLAY_TIME() {
}
#elif defined(DISPLAY_5110)
#include
#include
Adafruit_PCD8544 display = Adafruit_PCD8544(9, 10, 11, 13, 12);
char items[5];
char select;
void ROSA_DISPLAY_SETUP() {
// put your setup code here, to run once:
display.begin();
// init done
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(BLACK);
}
void ROSA_DISPLAY_LOOP() {
display.clearDisplay();
display.setCursor(0,0);
display.print(PRODUCT);
display.setTextColor(WHITE, BLACK); // 'inverted' text
display.println(VERSION);
display.setTextColor(BLACK);
display.setCursor(0,30);
//display.display();
}
void ROSA_DISPLAY_DATE() {
char buf[5];
sprintf(buf, "2%03d.", year);
display.print(buf);
sprintf(buf, "%02d.", month);
display.print(buf);
sprintf(buf, "%02d", day);
display.println(buf);
display.display();
}
void ROSA_DISPLAY_TIME() {
char buf[3];
sprintf(buf, "%02d:", hour);
display.print(buf);
sprintf(buf, "%02d:", minute);
display.print(buf);
sprintf(buf, "%02d", second);
display.println(buf);
display.display();
}
void ROSA_DISPLAY_DATE_TIME(byte location) {
char buf[3];
if (location == 0) {
display.clearDisplay();
display.setCursor(0,0);
display.setTextColor(BLACK);
}
sprintf(buf, "%02d.", month);
display.print(buf);
sprintf(buf, "%02d ", day);
display.print(buf);
sprintf(buf, "%02d:", hour);
display.print(buf);
sprintf(buf, "%02d:", minute);
display.print(buf);
sprintf(buf, "%02d", second);
display.print(buf);
display.display();
}
#define ROSA_MENU(hd, it1, it2, it3, it4, sel) {items[0]=hd; items[1]=it1; items[2]=it2; items[3]=it3; items[4]=it4; select=sel;}
#define MENU_TEXT(ln) {for (byte i=0 ; i<12 ; i++){display.print((char) pgm_read_byte(&MENUTEXT[ln][i]));}}
void ROSA_DISPLAY_MENU() {
display.setTextColor(WHITE, BLACK); // 'inverted' text
display.setCursor(0,8);
display.print(" ");
MENU_TEXT(items[0]);
display.setTextColor(BLACK);
display.setCursor(12,16);
MENU_TEXT(items[1]);
display.setCursor(12,24);
MENU_TEXT(items[2]);
display.setCursor(12,32);
MENU_TEXT(items[3]);
display.setCursor(12,40);
MENU_TEXT(items[4]);
display.setCursor(0,(select+1)*8);
display.print(">");
display.display();
}
#endif
對於程式設計有興趣的朋友,可以透過這專案的進行,學習 ROSA 開發是如何逐步建置,只要比對每個版本的差異,就知道程式變動的情形。各位在參考 ROSA 開發的同時,你可以一邊構思,未來你會怎樣利用這些基本功能設計自己的作品。
本程式放在 ROSA_v2019.1.18.zip,有興趣的朋友可以透過下列連結取得:
https://docs.google.com/forms/d/e/1FAIpQLScqMLIi7bPF-XLTFVplfGU6lGte1P2Y7Sjur4lC_kDZDyYEEw/viewform
沒有留言:
張貼留言