繼上一回的主角BTCom Project--用Android手機傳送命令(簡訊)到Arduino板子後。小孩問我: 拔鼻,你在幹甚麼?
想成為Maker,但最害怕被親朋好友問「哩到對喜爹銃蝦會?」…
雖然我腦袋浮現的解釋是: 我期望能建立未來更美好智的慧生活環境! 「智慧城市」蘊藏著1.5兆美元商機啊! 有錢大家賺,走出代工、共創價值。…
但…
老實說,在仍然處於一事無成的泥淖中,無業遊民、擺攤、創業者跟Maker之間端看自己「面對/處理事情角度的差異」而已,此外沒甚麼不同。申請信用卡時,一律被勾「自由業」。慘!
為了跟小孩解釋功能,印了一些場景的紙張並剪了剛好可以套入LCD1602的洞洞。因為沒有彩色印表機,只好印黑白的。真正成熟的Maker,或許該入手3D印表機來印才對!
首先套用第一張場景示意圖,請發揮想像力,手持著手機,用第一人稱的視角。我說: 將來老爸的「機器人商鋪」外面會掛一片大的LCD面板,門口會有店的App QR Code,客人或路人可以透過QR Code下載App,就可以在店外的LCD看板留言了!
接著套用第二張場景示意圖,我說: 將來老爸賺大錢,開會捐一些大型LCD看板在車站、機場、商店街等公共場所。路人可以透過QR Code下載App,就可以留言了給需要的人。
再套用第三張場景示意圖,我說: 接下來老爸可以研發超大型拼接LCD,讓朋友開廣告公司,在全國各重要路口、建築物佈置這些超高解析度、超低成本的LCD廣告看板,解決LCD產能過剩的問題,讓有需要的人透過「一通簡訊就能全台灣同步留言」給目標族群。比如說: 你可以跟Hock全台同步示愛!
很多人想學Coding,各種程式語言千百種(國/英文都學不好了,還…),但不得其門而入。老實說,我也是不求甚解,只要能拼湊出符合需求的功能就好。我相信,只要將知識分享出去,會有人比你更強並改良它,然後你能豁然開朗,共創價值,這是正向循環。
BTCom: Android 程式規劃
這一回的主角跟上一回一樣,程式碼也不用變(只是可稍微修改讓LCD1602能秀兩排字)。 如果懶得寫程式可以使用下面QR Code下載,若有Bug煩請告知,感恩!
BTCom: Arduino Uno 板程式規劃
Arduino BTCom範例程式: 用LCD1602顯示結果
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I
// the maximum received command length from an Android system (over the bluetooth)
#define MAX_BTCMDLEN 128
// 建立一個軟體模擬的序列埠; 不要接反了!
// HC-06 Arduino
// TX RX/Pin10
// RX TX/Pin11
SoftwareSerial BTSerial(10,11); // Arduino RX/TX
// Addr, En, Rw, Rs, d4,d5,d6,d7 backlight, polarity
LiquidCrystal_I
byte cmd[MAX_BTCMDLEN]; // received 128 bytes from an Android system
int len = 0; // received command length
void setup() {
Serial.begin(9600); // Arduino起始鮑率:9600
BTSerial.begin(9600); // HC-06 出廠的鮑率:每個藍牙晶片的鮑率都不太一樣,請務必確認
// 初始化LCD1602
lcd.begin(16, 2);
lcd.backlight();
}
void loop() {
int insize, ii;
int tick=0;
// Bluetooth command listening
cmd[0] = '\0';
len = 0;
while ( tick<MAX_BTCMDLEN ) { // 因為包率同為9600, Android送過來的字元可能被切成數份
if ( (insize=(BTSerial.available()))>0 ){ // 讀取藍牙訊息
for ( ii=0; ii<insize; ii++ ){
cmd[(len++)%MAX_BTCMDLEN]=char(BTSerial.read());
}
}
else {
tick++;
}
}
// 用LCD1602顯示從Android手機傳過來的訊息
lcdShow(cmd);
}
// 用LCD1602顯示從Android手機傳過來的訊息
void lcdShow(char* msg) {
char str[17], str2[17]; // LCD1602不捲動時使能秀16個字元2排
len = strlen(msg);
lcd.clear();
if ( len>0 ) {
sprintf(str,"%s",msg);
if ( len>15 ) {
str[16]=’\0
sprintf(str2,"%s",msg+16);
lcd.setCursor(0,0); lcd.print(str);
lcd.setCursor(0,1); lcd.print(str2);
} else {
lcd.setCursor(0,0); lcd.print(str);
}
}
}
|
最後我小孩給我的結論是: 我覺得你的創意不是很好,不過已經算很厲害了! 因為你才剛學而已不是嗎? (聽起來還蠻欣慰的)