今回は TouchShield Slide に用意されている文字表示や、その他の API を見ていきたいと思います。紹介しきれない関数や詳細についてはリファレンスを参照してください。

■文字を表示する
 TouchSheild Slide で文字を表示する方法には、text()関数、HersheyDrawCString()関数、dispPutXLargeNumString()関数の3通りがあります。スケッチと動作結果の写真を見てください。スケッチでは background() 関数で背景を黒にし、text 関数で三つの数字を表示してから、文字色を stroke() 関数で赤に変更し、数字と文字列を表示しています。上下中央付近のtestの文字が大きいのがわかると思います。これは、text() 関数の四つめの引数で高さを指定しているからです。

 右上の TEST の文字列は、HersheyDrawCString() 関数を使って表示しています。引数は左から順番に、フォントのID(名前)、位置のx座標とy座標、表示文字列、文字の高さ、文字の向き(0が通常の向き)、文字の太さ(現在は無視される)の八つです。

 下の大きな数字(12345)は、dispPutXLargeNumString() 関数で表示しています。引数は、表示する数字の文字列、位置のx座標とy座標、文字色、背景色です。
#include "HersheyFonts.h"

const COLOR cWHITE = {0xff, 0xff, 0xff};
const COLOR cBLUE = {0x0, 0x0, 0xff};

void setup()
{
  background(0, 0, 0);
  text((int)321, 5, 5); //print the integer 321 at pixel location 5,5
  text((double)122.345, 50,   20); //print the double 122.345 at pixel location 50,50
  text((long)7654321,   100,  40); //print the long 7654321 at pixel location 100,100

  stroke(255, 0, 0);
  text((float)4321.456, 150,  60); //print the float 4321.456 at pixel location 150,150
  text("no pony!", 200, 80); // print the character string “no pony!” at pixel location 200,200
  text("test", 0, 100, 20);  // print the character string "test" at pixel location 0, 100 with height 20

//  HersheyDrawCString(kHersheyFont_Cursive, 40, 120, "Test Cursive", 20, 0, 1);
//  HersheyDrawCString(kHersheyFont_TimesRoman, 0, 10, "TEST", 20, 0, 1);
  HersheyDrawCString(kHersheyFont_RowmanTriplex, 160, 20, "TEST", 20, 0, 1);
  dispPutXLargeNumString("12345", 0, 140, cWHITE, cBLUE);
}

void loop()
{
}

fig3-1.jpg■Hersheyfonts
 Herysheyfonts は文字がきれいで、複数のフォントを切り替えて使えるのですが、メモリを消費するので、必要なフォントを組み込むようになっています。http://www.cbxdragbike.com/arduino/liquidwaredocs/fonts.html に、使えるフォントの一部が掲載されています。デフォルトでは、RomanTriplex のみが組み込まれています。

 Antipasto Arduino IDE の hardware\arduino\cores\touchshield\src\components\board の中に HersheyFonts.h ヘッダ・ファイルがあるので、この中で必要なフォントをの #define 行のコメントアウトを外して組み込みます。たとえば、Cursive フォントを有効にし、
    #define    _ENABLE_HERSHEY_CURSIVE_            //*    4656 bytes

 スケッチで、
  HersheyDrawCString(kHersheyFont_Cursive, 40, 120, "Test Cursive", 20, 0, 1);

とすると、写真のようになります。なお Hersheyfonts についてのドキュメントは、http://www.liquidware.com/wikipages/name/HersheyFonts にあります。

fig3-2.JPG
■ボタンをつくる TButton
 タッチ・パネル上に定型的なボタンを作る TButton が用意されています。使い方は簡単で、下の例のように、表示したい文字列、左上のx座標とy座標を指定して初期化した変数を使うだけです。
 ボタンを表示するには Paint() 関数を、押されているかを確認するには GetTouch() 関数を使います。SetForeground()関数とSetBackground()関数を使うと、ボタンの表示色を変えることもできます。
#include 

TButton ok = TButton("Ok",20,80);
TButton cancel = TButton("Cancel",80,80);

void setup() {
  ok.Paint();
  
  cancel.SetForeground(255, 0, 0);
  cancel.SetBackground(0, 0, 255);
  cancel.Paint();
}

void loop() {
  if (ok.GetTouch()) {
    stroke(255);
    fill(0);
    text("Pressed 'Ok'    ", 10, 30);
  }

  if (cancel.GetTouch()) {
    stroke(255);
    fill(0);
    text("Pressed 'Cancel'", 10, 30);
  }
}





■バーグラフを表示する BarGraph
 バーグラフを表示する BarGraph があります。こちらは、グラフの名前、表示位置のx座標とy座標で初期化し、setValue()関数を呼び出すとバーが表示されます。簡単に視覚化したいときに使えそうです。以下は、Examples → BarGraph → RandomThree にあるサンプル・スケッチです。ランダムな長さのバーを表示しています。
/**
 * This example displays a three bar graphs on the
 * screen of a Liquidware TouchShield Slide
 *  http://www.liquidware.com/shop/show/TSL/TouchShield+Slide
 *
 * By: Chris Ladden, avrman@gmail.com
 */
#include <BarGraph.h>

BarGraph barA = BarGraph("BarA", 60, 20);
BarGraph barB = BarGraph("BarB", 60, 90);
BarGraph barC = BarGraph("BarC",60, 170);

void setup() {
}

void loop(){

    barA.setValue(random(-5,60));
    delay(random(0,30));

    barB.setValue(random(-5,60));
    delay(random(0,30));

    barC.setValue(random(-5,60));
    delay(random(0,30));
}




■Arduino と TouchShield Slide の通信
 Arduino と TouchShield Slide の通信は、Arduino 側はソフトウェア・シリアル・ライブラリを使い、TouchShield Slide 側は通常のシリアル・ライブラリを使うことになります。まず、TouchShield Slide を外して、次のスケッチを Arduino に書き込みます。
// Arduino side
#include 

#define RX_PIN 3
#define TX_PIN 2

SoftwareSerial mySerial = SoftwareSerial(RX_PIN, TX_PIN);

void setup() {
  pinMode(RX_PIN, INPUT);
  pinMode(TX_PIN, OUTPUT);
  mySerial.begin(9600);
}

void loop() {
  int val = mySerial.read();
  val ++;
  mySerial.print(val, BYTE);
}

 書き終わったら、TouchShield Slide に次のスケッチを書き込みます。
// TouchShield Slide side

void setup()
{
  Serial.begin(9600);
  text("Waiting for 2sec", 10, 50);
  delay(2000);
  text("Start           ", 10, 50);
  Serial.print(0, BYTE);
}

void loop()
{
  if (Serial.available()) {
    int val = Serial.read();
    text(val, 10, 60);
    Serial.print(val, BYTE);
  }
}

 上の二つのスケッチでは、TouchShield Slideから、1バイト送信をし、Arduinoが受け取ると1足して、TouchShield Slide へ1バイトを送ります。TouchShield Slide では受け取った数字を表示し、またArduinoへ送ることを繰り返します。



 通信の方法は、ほかにも考えられます。例が Example の中にあるのでチェックしてみてください。

(光永 法明)



トラックバック(0)

このブログ記事を参照しているブログ一覧: TouchShield Slide の API (2/2) <3>

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/5083







newハイパー・マイコンmbedでインターネット電子工作


マイコンと電子工作 No.6


マイコンと電子工作 No.4


マイコンと電子工作No.1
サポート・ページはこちら