2015年8月29日 星期六

ROSA 系統開發 2 ─ 通訊驅動

http://4rdp.blogspot.com/2015/08/rosa-2.html?m=0

mBot 與 Arduino 的 pin 0 及 1 都是被用於 USB 通訊用,主要用於下載韌體 (firmware),所謂韌體、硬體和軟體的差異,簡單的說,硬體是純電子電路,軟體則與電子電路無關,而韌體是介於軟體與硬體之間,它主要是在直接控制硬體的。

// (C) 2015, Bridan Wang, CC BY-NC-SA 3.0 TW
// http://4rdp.blogspot.tw/search/label/ROSA%20(Arduino)
// pin 0,1   USB, BT
#define TARGET   mBot
#if TARGET == mBot
  #define BAUD  115200   // for mBlock

#elif TARGET == motoduino
  #define BAUD  57600    
#elif TARGET == UNO
  #define BAUD  115200   
#endif

void setup() {
// pin 0,1
// Open serial communications and wait for port to open:
Serial.begin(BAUD);
while (!Serial) {};  // wait for serial port to connect. 
Serial.println("Welcome to ROSA!");
}

void loop() {
}

2015年8月26日 星期三

訓練數學感 72 ─ 52 度金字塔(Pyramid)

http://4rdp.blogspot.com/2015/08/72-pyramid.html?m=0

圖片來自維基百科
埃及卡夫拉金字塔是人類文明偉大的建築物之一,查閱資料得知金字塔的四面角度為 52°,不知你是否曾細想為什麼就是這個角度,如果給你無數個同大小的正立方體,要如何才能堆出這樣的角度?

2015年8月22日 星期六

ROSA 系統開發 1 ─ 一個複雜程式怎麼寫?

http://4rdp.blogspot.com/2015/08/rosa-1.html?m=0

接下來將一系列專文說明 ROSA 的程式開發,複雜的東西就是要切塊逐一處理,因為 Arduino 有很多 pin 腳,每隻腳都是獨立運作,因此採功能模組方式開發,參考程式範例如下:

// (C) 2015, Bridan Wang, CC BY-NC-SA 3.0 TW
// http://4rdp.blogspot.tw/search/label/ROSA%20(Arduino)
// System
#define TARGET   mBot
#if TARGET == mBot
  #define DIGITAL    14
  #define ANALOG     8
#elif TARGET == motoduino
  #define DIGITAL    14
  #define ANALOG     6
#elif TARGET == UNO
  #define DIGITAL    14
  #define ANALOG     6
#endif
enum {    // CONFigure
  DOUT,
  DIN,
  DIN_UP,
  ADIN,
  ADIN_UP,
  PWM_,
  LED = 7,
  TONE,
  SERVO,
  I2C,
  SER_RX,
  SER_TX,
  IR_RX,
  IR_TX,
  XXXX
};
const byte  CFD[] PROGMEM = {     // DIGITAL + ANALOG   pin default 
  #if TARGET == mBot
    SER_RX, SER_TX, IR_RX, IR_TX, DIN,  DIN,  DIN,  DIN,
    TONE,   DIN,    DIN,   DIN,   DIN,  LED,
    ADIN,   ADIN,   ADIN,  ADIN,  ADIN, ADIN, ADIN, ADIN 
  #elif TARGET == motoduino
    SER_RX, SER_TX, DIN,  DIN,  SERVO, PWM_, PWM_, SERVO,
    SERVO,  PWM_,   DOUT, DOUT, DOUT,  DOUT,
    ADIN,   ADIN,   ADIN, ADIN, ADIN,  ADIN
  #elif TARGET == UNO
    SER_RX, SER_TX, IR_RX, IR_TX, DIN,  DIN,  DIN,  DIN,
    TONE,   DIN,    DIN,   DIN,   DIN,  LED,
    ADIN,   ADIN,   ADIN,  ADIN,  ADIN, ADIN
  #endif
};

2015年8月19日 星期三

ROSA 可以幫你與機器人談一場轟轟烈烈的戀愛

http://4rdp.blogspot.com/2015/08/rosa.html?m=0

續前文,玫瑰花是愛情的表徵,如果你想與機器人談一場轟轟烈烈的戀愛,當然要獻上一朵漂亮的玫瑰花,因此 ROSA 是你表達愛意最好的禮物。

有了 ROSA,你的機器人可以多工同步無等待控制,讓你的機器人女友高興得跳起舞來,不會有卡卡的感覺,你可以用有線 (USB) 或是無線 (如 Bluetooth) 傳給她「愛的訊息」。

ROSA 是用甜言蜜語 (訊息指令),讓你的機器人女友非常聽你的話,單身工程師一定要學起來!

好了,言歸正傳,

2015年8月15日 星期六

程式壓縮技巧 3 ─ 校調編譯器選項

http://4rdp.blogspot.com/2015/08/3.html?m=0

不同的程式編譯器有提供不同的程式編譯方法,可惜 Arduino 與 Python 並沒看見這樣選項設定。

一般而言,最佳化 (Optimize) 有兩種選項,一個是最小程式碼 (Code Size),另一為最快執行時間 (Exec Time)。


2015年8月12日 星期三

Arduino 程式空間比較

http://4rdp.blogspot.com/2015/08/arduino.html?m=0

這份技術文件對直接使用 Arduino 寫系統大程式的朋友應該會有些幫助,因為之前設計 ROSA 時把 RAM 寫爆掉,因此我需要重新思考,如果想將 mBot 含入 ROSA 功能,那麼 Arduino 還剩多少記憶空間可以給 ROSA 使用?

因此,我計算一下 Arduino 常用程式庫大約占用記憶體空間狀況如下:

2015年8月8日 星期六

程式設計像是一場可以回子重下的圍棋

http://4rdp.blogspot.com/2015/08/blog-post.html?m=0




這只是有感而發的記錄,程式設計像下一盤圍棋,

程式碼越寫越多,圍棋子也是越下越多。
寫程式條件式,像在思考棋子放那裡比較好,要放的巧。
程式寫錯了,就修修改改,像是在下一盤可以回子重下的圍棋。
程式架構好不好,就像佈局好不好。
解程式 bug,像在解殘局。
程式寫完時,就像棋局結束時。

2015年8月5日 星期三

訓練數學感 71 ─ 世界上最難的簡單幾何題

http://4rdp.blogspot.com/2015/08/71.html?m=0

小朋友假日吵著要網路連線,只好出這道最近蠻紅的幾何題,讓他想一想,居然用觀察法花 50 分鐘算出答案!
求角 AED 多少度?

難度 ✩

2015年8月1日 星期六

ROSA 的指令概述 (2015.8.1 版)

http://4rdp.blogspot.com/2015/08/rosa-201581.html?m=0

圖片引用自維基百科
為了減少 RAM 記憶空間需求,原第一版 ROSA 的指令概述作廢,此文改版重發。

續前文,接下來介紹 ROSA 的指令系統,因為 Arduino 控制器沒有任何鍵盤及螢幕,因此靠通訊的指令來傳達控制的訊息比較適當,所以採用前文所提的原則,使用簡單易懂的明碼文字指令,所有的英文大小寫字母都接受,為了便於說明 ROSA 相關指令語法,後面的說明解釋以大寫字母表示命令,小寫字母為該指令的參數項目,例如,

CONF pin,type1,type2,.....
CONF 是 configure 的縮寫,這指令用於設定控制器 pin 腳的用途,ROSA 對控制器 pin 代號定義與 Arduino 是一致的,也是以數字來編號,從號碼 0 開始,以 Uno 為例,上排 0 到 13 是數位的 pin,下排 A0 到 A5 是類比的 pin,ROSA 把編號訂在 200 到 205,也可以用 14 到 19,簡單說類比的腳位排在數位腳之後。(mBot 有 A6、A7)

這指令可以一次設定多隻 pin 腳,只要指定第一腳後,其它就接續設定,最多可連續設定 8 隻 pin 腳。type1 是開頭第一腳的型態,type2 就是相鄰第二腳的型態,type 也是以數字表示,型態定義為