2016年12月30日 星期五

LinkIt Smart 7688 Duo + SeeedStudio Grove-LCD RGB Backlight 測試

****注意 Arduino IDE 使用1.6.7***** 

SeeedStudio  的 Grove-LCD  RGB Backlight 是一個16字 兩行 的文字型LCM,用I2C當資料傳輸介面比起一般常見的並排型LCM接饺少很多Grove-LCD  RGB Backlight 另一個特點是背光顏色理論上是全彩的缺點是電源需用5VLinkIt Smart 7688 Duo 的Grove接口只有3.3V要接再一起就要有點技巧

Grove-LCD  RGB Backlight 包裝內容一樣是一條線跟一個LCM主體


Grove 線材的一端紅色剪下然後和上杜邦針腳

  把Grove線完整的那端插在LCM上,有剪線的那端插在LinkIt Smart 7688 Duo 的底座I2C Grove接口把焊有針腳的紅色線插在Arduino相容插座的5V接口

到這裡下載libraries https://github.com/Seeed-Studio/Grove_LCD_RGB_Backlight

解壓縮後放在Arduino的libraries下

\arduino-1.6.7-windows\arduino-1.6.7\libraries

開啟ARDUINO 輸入以下程式然後上傳

//

#include <Wire.h>
#include "rgb_lcd.h"

rgb_lcd lcd;


void setup() 
{
    // set up the LCD's number of columns and rows:
    lcd.begin(16, 2);
}

void loop() 
{
   // Print a message to the LCD.
    lcd.setRGB(255, 255,255);
    lcd.print("Hello, world!");
    delay(1000);
    lcd.clear();
    
    lcd.setRGB(255, 0, 0);
    lcd.print("Backlight is red");
    delay(1000);
    lcd.clear();
    
    lcd.setRGB(0,255, 0);
    lcd.print("Backlight is green");
    delay(1000);
    lcd.clear();
    
    lcd.setRGB(0,0, 255);
    lcd.print("Backlight is blue");
    delay(1000);
    lcd.clear();
}


//

LCM就會用白色背光顯示Hello, world!



用綠色背光顯示Backlight is green


用藍色背光顯示Backlight is bule


用紅色背光顯示Backlight is red


Linkit Smart7688 Duo Arduino Bootloader 解磚



****注意 Arduino IDE 使用1.6.7***** 

  在上傳資料到Linkit Smart7688 Duo後發現Linkit Smart7688 Duo 的com 不見了Windows 裝置管理員出現無法辨識裝置

    用一般燒 Arduino bootload 的方法不管整麼試都出現錯誤換版子也沒用RESET 接腳用Pin10 跟SS 都試過了。





 只好用Linkit Smart7688 Duo 的  AVRDUDE from OpenWrt SDK試一下了。

開啟WinSCP 輸入登入Linkit Smart7688 Duo 的資訊。

  登入後把在C:\Users\XXX\AppData\Local\Arduino15\packages\LinkIt\hardware\avr\0.1.6\bootloaders\caterina目錄底下的這個檔案 "Caterina-smart7688.hex " 拖曳到 Linkit Smart7688 Duo的 root \。(XXX是登入電腦的使用者名稱)

開起WinSCP命令列。

.
      開啟命令列後輸入avrdude -p m32u4 -c linuxgpio -v -e -U flash:w:Caterina-smart7688.hex -U lock:w:0x0f:m 按 "Execute"


  按 "Execute" 會開始燒錄會出現很多100%也會跳出錯誤!!



    在Windows 也會出現 MediaTek LinkIt Smart 7688 Duo (Bootloader) 雖然有點怪但是Windows總算認得了。


開啟Arduino 的  Blink 範例 上傳到 LinkIt Smart 7688 Duo。


     上傳後COM 名稱也會恢復正常如果上傳過程出現Arduino需要輸入密碼就輸入登入LinkIt Smart 7688 Duo 的密碼。





2016年12月29日 星期四

LinkIt Smart 7688 Duo + Adafruit 2.4" TFT Breakout 測試

****注意 Arduino IDE 使用1.6.7***** 

 本來這系列都計畫用SeeedStduio Grove系列產品做的,但是 Grove 系列沒推出較高解析度的LCM,在希望友直接顯示的實驗下只好選用其他廠家的LCM模組。

     Adafruit 2.4" TFT 附帶沒編碼過的電阻式觸控,面板解析度為 240 X 320 對角 2.4英吋,主控IC 是ILI 9341 可用SPI或8Bit傳送資料,資料線和電源是3.3V或5V都可(一般外面買的ILI3941 LCM不只電源要求3.3V就連信號也要3.3V。

Adafruit 最大的特點就是包裝就是隨便綑一綑。


內容物就是一片LCM一個排針。


LCM 排針一邊是給8Bit資料傳輸用一邊是給SPI資料傳輸用,為了減少接腳就選用SPI焊接。


要用SPI傳輸LCM背後IM1.IM2.IM3 要用焊錫短路。


再來就接線

LCM  RST   >>  D5
LCM  DC     >>  D6
LCM  CS      >>  D7
LCM  MOSI  >> D8
LCM  MISO  >> D9
LCM  CLK    >>  D10
LCM  Y+       >>  A3
LCM  X-        >>  A2
LCM  Y-         >>  D3
LCM  X-        >>  D4


到這下載需要的 Library解壓縮後放在Arduino目錄下的\libraries\。

https://github.com/adafruit/Touch-Screen-Library
https://github.com/adafruit/Adafruit_ILI9341
https://github.com/adafruit/Adafruit-GFX-Library

  開啟Arduino 輸入以下程式碼。

//This example implements a simple slidi。ng On/Off button. The example
// demonstrates drawing and touch operations.
//
//Thanks to Adafruit forums member Asteroid for the original sketch!
//
#include <Adafruit_GFX.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_ILI9341.h>
#include <TouchScreen.h>

//觸控 X+ X- Y+ Y- pins
#define YP A3  // 只可以使用類比輸入 An !
#define XM A2  // 只可以使用類比輸入 An !
#define YM 3   //數位 I/O
#define XP 4   //數位 I/O
//觸控面板校正原始資料
#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 920
#define TS_MAXY 940

#define MINPRESSURE 10
#define MAXPRESSURE 1000

// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// For the one we're using, its 300 ohms across the X plate

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

#define TFT_RST   5
#define TFT_DC    6
#define TFT_CS    7
#define TFT_MOSI  8
#define TFT_MISO  9
#define TFT_CLK   10

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);

boolean RecordOn = false;

#define FRAME_X 70
#define FRAME_Y 80
#define FRAME_W 200
#define FRAME_H 100

#define REDBUTTON_X FRAME_X
#define REDBUTTON_Y FRAME_Y
#define REDBUTTON_W (FRAME_W/2)
#define REDBUTTON_H FRAME_H

#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W)
#define GREENBUTTON_Y FRAME_Y
#define GREENBUTTON_W (FRAME_W/2)
#define GREENBUTTON_H FRAME_H

void drawFrame()
{
  tft.drawRect(FRAME_X, FRAME_Y, FRAME_W, FRAME_H, ILI9341_BLACK);
}

void redBtn()
{
  tft.fillRect(REDBUTTON_X, REDBUTTON_Y, REDBUTTON_W, REDBUTTON_H, ILI9341_RED);
  tft.fillRect(GREENBUTTON_X, GREENBUTTON_Y, GREENBUTTON_W, GREENBUTTON_H, ILI9341_BLUE);
  drawFrame();
  tft.setCursor(GREENBUTTON_X + 6 , GREENBUTTON_Y + (GREENBUTTON_H/2));
  tft.setTextColor(ILI9341_WHITE);
  tft.setTextSize(5);
  tft.println("ON");
  RecordOn = false;
}

void greenBtn()
{
  tft.fillRect(GREENBUTTON_X, GREENBUTTON_Y, GREENBUTTON_W, GREENBUTTON_H, ILI9341_GREEN);
  tft.fillRect(REDBUTTON_X, REDBUTTON_Y, REDBUTTON_W, REDBUTTON_H, ILI9341_BLUE);
  drawFrame();
  tft.setCursor(REDBUTTON_X + 6 , REDBUTTON_Y + (REDBUTTON_H/2));
  tft.setTextColor(ILI9341_WHITE);
  tft.setTextSize(5);
  tft.println("OFF");
  RecordOn = true;
}

void setup(void)
{
 pinMode(13, OUTPUT);

  tft.begin();

  tft.fillScreen(ILI9341_BLACK);
  // origin = left,top landscape (USB left upper)
  tft.setRotation(1);
  redBtn();
}

void loop()
{
   // Retrieve a point
  TSPoint p = ts.getPoint();

  // See if there's any  touch data for us
  if (p.z > MINPRESSURE && p.z < MAXPRESSURE)
  {
    // Scale using the calibration #'s
    // and rotate coordinate system
    p.x = map(p.x, TS_MINY, TS_MAXY, 0, tft.height());
    p.y = map(p.y, TS_MINX, TS_MAXX, 0, tft.width());
    int y = tft.height() - p.x;
    int x = p.y;

    if (RecordOn)
    {
      if((x > REDBUTTON_X) && (x < (REDBUTTON_X + REDBUTTON_W))) {
        if ((y > REDBUTTON_Y) && (y <= (REDBUTTON_Y + REDBUTTON_H))) {
           digitalWrite(13, LOW);
          redBtn();
        }
      }
    }
    else //Record is off (RecordOn == false)
    {
      if((x > GREENBUTTON_X) && (x < (GREENBUTTON_X + GREENBUTTON_W))) {
        if ((y > GREENBUTTON_Y) && (y <= (GREENBUTTON_Y + GREENBUTTON_H))) {
           digitalWrite(13, HIGH);
          greenBtn();
        }
      }
    }

     }
}

按上傳LCM就會顯示ON綠燈時LinkIt Smart 7688 Duo 版上的D13LED就會亮,按一下LCM的OFF。


    當紅燈亮起時LinkIt Smart 7688 Duo 版上的D13LED就會熄滅。再按一下LCM的 ON LCM就會顯示綠燈 LinkIt Smart 7688 Duo 版上的D13LED就會亮。


參考資料:https://www.adafruit.com/

2016年12月23日 星期五

LinkIt Smart 7688 Duo + 4D systems gen4-uLCD-43DT 初體驗

****注意 Arduino IDE 使用1.6.7***** 

     LinkIt Smart 7688 Duo 雖然簡單易懂但是要處理圖形的使用介面時就顯現能力不足就要靠外接智慧型螢幕來解決這次使用的是 4D Systems 出品的43.吋 gen4-uLCD-43DT

gen4-uLCD-43DT 




4D-Arduino-Adaptor-Shield-II




將LCM連接到電腦





連接到電腦時會安裝COM 驅動程式LCM 會出現測試畫面。


 先到這裡下載Library,放在 C ***\arduino-1.6.7\libraries 下

https://github.com/4dsystems/ViSi-Genie-Arduino-Library

再到這裡下載 4D Systems 的開發程式 Workshop-4-IDE 

http://www.4dsystems.com.au/product/10/120/Development/4D_Workshop_4_IDE/
.

安裝好 Workshop-4-IDE 後開啟 Workshop-4 就可開始畫出想要的Arduino的使用者介面了

1. 按 New 開一個新檔案
2.選擇使用的LCM gen4-uLCD-43DT
3.調整LCM 方向
4.按Next



5.使用ViSi Genie 。



6.進入編輯畫面後先點選Comms 。



7.選擇正確的COM後會變連色燈,點選回Home。


8.點選Gauges 將 Angular Meter 圖示拖曳到左邊的虛擬 LCM上。


9.調整Angular Meter到想要的位置與大小



10.調整Angular Meter 的最大值到3300



11.點選 Digits 拖曳 Led Digits 到左邊的虛擬 LCM上。


12.調整Led Digits到想要的位置與大小


13.將SD卡插入電腦
14.按(Bulid)Copy/Load 




15.選擇SD卡槽位



16.寫入SD卡完成後將SD卡裝回LCM



17.再次接上電源虛擬LCM上畫面就出現在螢幕上了



18 . 將 4D-Arduino-Adaptor-Shield-II 裝在LinkIt Smart 7688 Duo 





19. LinkIt Smart 7688 Duo 占用了Serial0 ,Arduino-Shield 須將跳線換到Pin2與Pin3的位置



20. 開啟Arduino IDE 輸入以下程式碼然後上傳


#include <genieArduino.h>
#include <SoftwareSerial.h>
Genie genie ;
SoftwareSerial DisplaySerial  (2,3);  // 使用軟體 Serial
# define RESETLINE 4                 // Reset 腳位設定為Pin4

  int Voltage;                      
  int sensorPin = A0;               // 設定A0為類比輸入
  
void setup() 

  DisplaySerial.begin(9600);   //設定軟體Serial為9600
   genie.Begin(DisplaySerial); //設定LCM與軟體Serial 同步
  pinMode(4, OUTPUT);   // Reset LCM
  digitalWrite(4, 1);   
  delay(100);
  digitalWrite(4, 0);  
  delay (3500);         
}

void loop() 

  Voltage = ((3.3 * analogRead(sensorPin) * 1000) / 1024) ;   //將讀到的二進位電壓值轉為10進位
  genie.WriteObject(GENIE_OBJ_LED_DIGITS, 0x00, Voltage);     //將電壓值寫入LCM 的Leddigits0 的欄位
  genie.WriteObject(GENIE_OBJ_ANGULAR_METER, 0x00, Voltage);  //將電壓值寫入LCM 的Angularmeter0 的欄位
  delay(50);

}

21.將 gen4-uLCD-43DT 與 LinkIt Smart 7688 Duo 接再一起
.

22.通電後將 Arduino A0Pin 接到3.3V Pin 就可看到3.3V的電壓值顯示在LCM螢幕上



23.將 Arduino A0Pin 接到可調整的電源上就可看到電壓值顯示在LCM螢幕上注意不可超過3.3V



參考資料 : http://www.4dsystems.com.au/appnotes