2017年3月30日 星期四

編程概念認識:變數(Variable)

我們在編寫程式時,經常需要儲存大量不同的數據,這個時候,我們會用上變數(Variable)。變數是指程式在執行過程中,它的「內容」會隨著程式而改變。想像變數是一個「容器」,它是專門用來「儲放資料」的地方。使用變數可以向系統要求配置適當的主記憶體空間,也可以減少邏輯上的錯誤。

例如:A = B + 1,其中 A、B 則是變數,其內容是可以改變的。

執行的過程變數的內容變化
A = 0; B = 1;
A = B + 1;

宣告變數的步驟

在不同的程式編寫中,會有不同的宣告方法,一般都會先宣告變數種類:
/* C, Java */
int i = 0;
char c = 'a';
float f = 0.123;

/* C++ */
String s = "hi";


亦有一些是不用宣告變數種類的,例如:

/* Python */
counter = 100
miles = 1000.0
name = "John"

/* PHP */
$counter = 100;
$miles = 1000.0;
$name = "Peter";


而在 mBlock 中,我們是不用宣告變數種類的。要宣告變數,我們可以在「程式區」->「資料和指令」->「做一個變數」:

然後宣告變數的名稱:

「適用所有的角色」代表「全域性變數(Global Variable)」,我們一般會使用這種變數,使用時比較方便,但因為任何地方都可以改變它的值,出錯的機會亦因此提高。「僅適用本角色」代表「區域性變數(Local Variable)」,由於使用彈性低,因此較為少用。

變數的使用

成功宣告變數之後,我們可以在「資料和指令」中找到剛剛宣告的變數和變數的相關積木:
積木功能
取得變數當前的值
將變數設為「N」
變數改變為「變數+N」

2017年3月28日 星期二

Makeblock電子模組手冊:WiFi 模組

簡介

Me WiFi 模組的主要部件為 ESP8266 模組,ESP8266 是一款超低功耗的 UART-WiFi 透傳模組,支援無線 802.11 b/g/n 標準,作業電壓為3.3V。Me WiFi 模組內置電平轉換,將 5V轉為 3.3V,可以通過設置連接 WiFi,來製作 WiFi 遙控小車,遙控檯燈等。本模組介面是藍/灰色色標,需要通過 RJ25 連接主機板上的標有藍色或者灰色的介面。

技術規格

  • 作業電壓:5V
  • 支援無線:802.11 b/g/n 標準
  • 頻率範圍:2.412GHz~2.484GHz
  • 作業電流:50mA
  • 峰值電流:200mA
  • 工作溫度:-25℃ ~ 80℃
  • 晶片型號:ESP8266

特點

  • 作業模式:STA(工作站模式)+ AP(熱點模式)
  • 內置 TCP/IP 協議
  • 支持 WEP/WPA/WPA2/WPA2–PSK 加密
  • 模組的白色區域是與金屬梁接觸的參考區域
  • 具有反接保護,電源反接不會損壞IC
  • 支援 Arduino IDE 程式設計,並且提供資料庫來簡化程式設計
  • 使用 RJ25 介面連線方便
  • 配有接頭支援絕大多數 Arduino 系列主控板

引腳定義

Me WiFi 模組有四個針腳的接頭,每個針腳的功能如下表:

序號引腳功能
1GND接地
2VCC接電源
3TX串口資料發送口
4RX串口資料接收口

連接模式

以 RJ25 連接

由於 Me WiFi 模組介面是藍/灰色色標,當使用 RJ25 介面時,需要連接到主控板上帶有藍色或灰色色標的連接埠。以 Makeblock Orion 為例,可以連接到3、4、5、6號連接埠,如下圖:


以杜邦線連接

當使用杜邦線連接到 Arduino Uno 主控板時,模組 TX、RX 引腳需要分別連接到 RX、TX口上,如下圖所示:

原理解析

Me WiFi 模組支援 STA/AP/STA+AP 三種工作模式。

  • STA 模式:模組通過路由器連接互聯網,手機或電腦通過互聯網實現對設備的遠端控制。
  • AP 模式:模組作為熱點,實現手機或電腦直接與模組通信,實現局域網無線控制。
  • STA+AP 模式:兩種模式的共存模式,即可以通過互聯網控制可實現無縫切換,方便操作。

連接好模組後,紅色電源燈亮,約1秒後,藍色 Link 指示燈閃爍(閃爍代表正常啟動,但未連接)。當連接設備成功,並進行一次資料發送後,指示燈常亮,模組接收資料時藍色接收指示燈閃爍。撥動開關用於選擇模式,Work 和 PROG 工作模式,Work 是正常工作狀態(平時應在這個狀態),PROG 是程式設計模式,切換模式時需要重啟。
模組上電時,在配置模式(Work模式)下模組WiFi信號為:“ESP(+晶片ID號)”,無密碼。在瀏覽器輸入 WiFi 擴展板位址:192.168.4.1,打開配置頁面即可進行配置。

編程指南

mBlock 程式設計

Me WiFi 模組暫不支援以 mBlock 編程。

Arduino 程式設計

如果使用 Arduino 程式設計,需要使用資源庫Makeblock-Library-master來控制WiFi模組。

Me WiFi 模組指令列表:

指令說明
MeWifi (uint8_tport);選擇連接埠
int available()判斷是否接收到資料
char read()讀取接收的數據
char write(outData)輸出資料

程式範例

#include "MeOrion.h" /* 本範例以Me Orion作主控板 */
#include <SoftwareSerial.h>

MeWifi Wifi(PORT_5); /* 本範例中以連接埠5連接Me WiFi模組 */

void setup() {
  Serial.begin(9600);
  Wifi.begin(9600);
  Serial.println("Wifi Start!");
}

void loop() {
  char inDat;
  char outDat;
  if(Wifi.available()) {
    char c = Wifi.read();
    Serial.print(c);
  }
  if(Serial.available()) {
    outDat = Serial.read();
    Wifi.write(outDat);
  }
}

其他

重設Me WiFi模組

如果曾經設定 Me WiFi 模組,但忘記密碼或無法連接,可嘗試依以下方法重設 Me WiFi 模組:
  1. 選擇「Work 模式」,藍燈會慢慢閃燦。
  2. 拔下 Me WiFi 模組的 RJ25 連接,以令它電源關閉。
  3. 重新連接 Me WiFi 模組的 RJ25 連接,以令它電源開啟。
  4. 轉換到「PROG 模式」。
  5. 等候一會,藍燈會快速閃燦。
  6. 然後將模式轉換到「Work 模式」,並拔下及重新連接 Me WiFi 模組的 RJ25 連接,以令它重新啟動。

2017年3月27日 星期一

Makeblock電子模組手冊:2.2吋 TFT 液晶屏

簡介

Me TFT 液晶屏模組主要由一個 LCD 顯示屏組成,並通過串口(Serial)與主控板通訊,從而顯示大小不同、顏色不同的字體和圖形。本模組由 MCU 及暫存記憶晶片集成,暫存記憶晶片內儲存了漢字、字母及圖形,可以通過串行端口輕鬆使用。本模組的介面是藍/灰色色標,說明是雙數位介面,需要連接到主控板上藍色或灰色標識的介面。

技術規格

  • 作業電壓:5V
  • 支援觸控:不支援
  • 螢幕尺寸:2.2"
  • 螢幕解析度:320(寬) x 240(高)
  • 控制模式:串口連接(Serial Port)
  • 預設鮑率(Baud Rate):9600
  • 模組大小:78mm (L) x 48mm (W) x 18mm (H)

特點

  • 暫存記憶體容量:2M
  • 只佔2個 IO 口(串口腳)
  • 支援自動抽取式24點陣、32點陣、48點陣、64點陣漢字
  • 支持點、線、圓、方框、填充方框等繪圖
  • 支援 JPG 格式真彩圖形的顯示
  • 模組的白色區域是與金屬梁接觸的參考區域
  • 支援 4 個不同方向展示
  • 使用 RJ25 介面連線方便
  • 配有接頭支援絕大多數 Arduino 系列主控板

引腳定義

Me TFT 液晶屏模組端口有四個引腳,其功能如下:

序號引腳功能
1TX連接埠數據發送口
2RX連接埠數據接收口
3VCC接電源
4GND接地

連接模式

以RJ25連接

由於 Me TFT 液晶屏模組介面是藍/灰色色標,當使用 RJ25 介面時,需要連接到主控板上帶有藍色或灰色色標的連接埠。以 Makeblock Orion 為例,可以連接到3、4、5、6號連接埠,如下圖:

以杜邦線連接

當使用杜邦線連接到 Arduino Uno 主控板時,模組 TX、RX 引腳需要分別連接到 RX、TX 口上,如下圖所示:

原理解析

Me TFT 液晶屏模組含電壓轉換器、STM32 晶片和串列 Flash 2M 記憶體。相比其他顯示器,它只需要兩個串口進行通信,操作簡單,容易連接。可以通過專用的串口助手設置傳輸串列傳輸速率,並將想要顯示的圖片處理好後存入 Flash 中,在自己的專案中實現開機圖片顯示,圖片的切換等功能。除此之外,還可以支援背景圖與漢字疊加,圖形操作介面顯示。應用場景包含:萬年曆,電壓電流錶等。

編程指南

mBlock 程式設計

Me TFT 液晶屏可以通過下載擴充功能「Me TFT」來使用 mBlock 積木。


功能除了自選特別顏色外,大部份功能已經齊備:


Arduino 程式設計

如果使用 Arduino 程式設計,需要使用資源庫 Makeblock-Library-master 來控制TFT液晶屏。

Me TFT 液晶屏模組指令列表:

指令說明
MeSerial(uint8_tport);選擇連接埠
CLS(c);用c顏色清屏
SBC(c);設置背景色c,顯示漢字等時無點陣時填的顏色
SCC(c,n);設定自選顏色,其中c是顏色序號(0 ~ 63),
n是64K色的數值(0 ~ 65535)。
PS(x,y,c);在(x,y)的地方畫一個顏色c的點
PL(x1,y1,x2,y2,c);從(x1,y1)用顏色c畫一條直線到(x2,y2)
BOX(x1,y1,x2,y2,c);用顏色c畫一個方框,左上角(x1,y1)到右下角(x2,y2)
BOXF(x1,y1,x2,y2,c);用顏色c畫一個實心方框,左上角(x1,y1)到右下角(x2,y2)
PIC(x,y,n);在(x,y)處畫第n幅圖
CIR(x,y,r,c);在(x,y)處用顏色c畫一個半徑r的圓
(x,y)為圓心
DS12(x,y,'顯示內容字串',c);在(x,y)處用顏色c顯示一行12點陣字
DS16(x,y,'顯示內容字串',c);在(x,y)處用顏色c顯示一行16點陣字
DS24(x,y,'顯示內容字串',c);在(x,y)處用顏色c顯示一行24點陣字
DS32(x,y,'顯示內容字串',c);在(x,y)處用顏色c顯示一行32點陣字
DS48(x,y,'顯示內容字串',c);在(x,y)處用顏色c顯示一行48點陣字
DS64(x,y,'顯示內容字串',c);在(x,y)處用顏色c顯示一行64點陣字
DRn;設置螢幕顯示的方向;n為0~3,分別對應屏的4個方向,
可以使用此調整橫豎屏顯示;
DR0; 橫屏顯示
DR1; 豎屏顯示
DR2; 橫屏倒立
DR3; 豎屏倒立
注意:
  1. 指令內的逗號後不可加入空格,否則不能正常顯示。
  2. 語句中用的 x 和 y 是指螢幕的座標,其x的值由0 ~ 319,而y的值則由0 ~ 239。
    (0, 0) 是橫向左上角的位置。
  3. 語句中用的c是色彩索引號,顏色是由RGB構成的,系統支援的64K色其實是65536中顏色,使用16位元二進位(2位元組)組成,16位元,分成:R紅色5位;G綠色6位;B藍色5位元,就是俗稱RGB565模式;常規的電腦顏色描述是由3位元組組成,每位元組一色,比如紅色描述為:0xFF0000;綠色描述為0x00FF00;而藍色描述為0x0000FF,就是俗稱RGB888模式。



  4. Me TFT 液晶屏模組內置有18種(0 ~ 17)可供使用:

程式範例

#include "MeOrion.h" /* 本範例以Me Orion作主控板 */
#include <SoftwareSerial.h>

MeSerial TFTScreen(PORT_4); /* 本範例中以連接埠4連接Me TFT 液晶屏模組 */

void setup() {
    TFTScreen.begin(9600); /* 設定Me TFT 液晶屏模組的Buad Rate至9600 */
}

void loop() {
    TFTScreen.print("CLS(0);"); /*先用黑色清屏*/
    TFTScreen.print("DR0;");    /* 設置橫屏顯示 */
    TFTScreen.println("DS64(64,104,'Hello world!',4);"); /* 注意每頁最後一行須用println指令 */
    delay(1000);

    /* 可以多頁顯示,但須記得每頁清屏 */
}

其他

RGB888 轉換成 RGB565

int rgb888_to_rgb565(int r8, int g8, int b8) {
    int r5 = (r8 * 249 + 1014) >> 11;
    int g6 = (g8 * 253 + 505) >> 10;
    int b5 = (b8 * 249 + 1014) >> 11;
    return r5 * 2048 + g6 * 32 + b5; /* 回傳 0 ~ 65535 之間的數,可直接用於〝SCC(c,n);〞的指令內 */
}