09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
プロフィール

かずべい

Author:かずべい
かずべいのヘリライフへようこそ!
まだまだ初心者ですが楽しんでます。
所有機
T-REX450PRO(パチ物ばーかり)
・HKTAROT450-3GX
・TAROT450-3GX
・T-REX450L(3セル)
T-REX500EFL
T-REX550E(V2改)
T-REX600EFL
MultiCopter
・500mmY3 Tricopter type
・500mmFPV-Quad-X Type
JR Voyger50(エンジン機)
Walkela GeniusCP/V2
Phantom

最新記事

最新コメント

天気予報


-天気予報コム- -FC2-

最新トラックバック

月別アーカイブ

カテゴリ

来訪者数

リンク

検索フォーム

RSSリンクの表示

ブロとも申請フォーム

この人とブロともになる

QRコード

QR

スポンサーサイト

--.--.-- --:--|スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Arduinoで液晶コレクション

2014.01.06 23:27|工作

気が付いたら、Arduinoの液晶シールドが3枚に増えていた。

どれもピンアサインが違うため、一つづつ紹介していきます。

3枚揃えた集合写真です。

DSC01302_R.jpg 

順に紹介します。

まずは完全に自作したシールドです。

DSC01303_R.jpg 

液晶のほかにLEDも3つ付いています。

動作中の様子です。

DSC01304_R.jpg 

基本的にはUP側が1から9999までカウントして行き、それに同期してLEDが順位点滅するようになっています。

次は液晶以外に6つのSWが付いたものです。

DSC01305_R.jpg 

これについては最後に動画をアップします。

DSC01306_R.jpg 

これも動作は同じですが、SWであることを操作できるようにしています。

次はキットになっている物を、作ったものです。

DSC01307_R.jpg 

一番特徴がない物ですが、コントラストとブライトが調整できるようになっています。

DSC01308_R.jpg 

動作中の様子です。

最後に毎度おなじみのHobbyKingから購入したArduinoUNO R3です。

DSC01309_R.jpg  

全くのオリジナルのようですが、値段は送料込みで2000円弱です。

箱は無しですが、USBケーブルは付属していました。

これにもう一枚自作予定の液晶シールドをかぶせてみたいと思います。

それではSW月のシールドの動作状態の様子の動画です。



基本的にはSWキーを押すと、左右に数字の出力位置がずれるのと、UPとDownで表示の速度を変えています。

またSELECTで、デフォルトの表示位置と速度に戻るようにしています。

スケッチは以下の通りですが、初めてswichとcase文を使って書いてみました。

最初はなかなかうまくいかず試行錯誤の結果ですが、何とか目的は達成できました。

大昔にほんのちょっとC言語をかじったことがある程度ですので、だらだらしたスケッチになってしまいましたが、何かの参考になればどうぞ勝手に使ってください。

LCD_Up_Dn_Dig

/*
Sainsmart LCD Shield for Arduino
Key Grab v0.2
Written by jacky

www.sainsmart.com

Displays the currently pressed key on the LCD screen.

Key Codes (in left-to-right order):

None   - 0
Select - 1
Left   - 2
Up     - 3
Down   - 4
Right  - 5

*/

#include <LiquidCrystal.h>
#include <DFR_Key.h>

//Pin assignments for SainSmart LCD Keypad Shield
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//---------------------------------------------

/*
#define None   0
#define Select 1
#define Left   2
#define Up     3
#define Down   4
#define Right  5
*/

DFR_Key keypad;

int localKey = 0;
String keyString = "";

int up = 0;
int dn = 10000;
int time = 1000;
int clm = 6;

void setup()
{
  lcd.begin(16,2);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("LiquidCrystal");
  lcd.setCursor(0,1);
  lcd.print("Kazuaki Sako");
  delay(3000);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("UP=> ");
  lcd.setCursor(0,1);
  lcd.print("DN=> ");
 
  /*
  OPTIONAL
  keypad.setRate(x);
  Sets the sample rate at once every x milliseconds.
  Default: 10ms
  */
  keypad.setRate(10);
}

void None(){
  lcd.setCursor(12,0);
  lcd.print("None");
  lcd.setCursor(14,1);
  lcd.print(localKey);
}

void Select(){
  lcd.setCursor(12,0);
  lcd.print("Sele");
  lcd.setCursor(14,1);
  lcd.print(localKey);
  clm = 6;
  time = 1000;
}

void left(){ 
  lcd.setCursor(12,0);
  lcd.print("Left");
  lcd.setCursor(14,1);
  lcd.print(localKey);
  clm = clm -1;
    if(clm < 4){
      clm = 4;
    }
}

void UpUp(){
  lcd.setCursor(12,0);
  lcd.print("U__p");
  lcd.setCursor(14,1);
  lcd.print(localKey);
  time = time - 100;
    if(time < 100){
      time = 100;
    }
}

void Down(){
  lcd.setCursor(12,0);
  lcd.print("Down");
  lcd.setCursor(14,1);
  lcd.print(localKey);
  time = time + 100;
    if(time > 1500){
      time = 1500;
    }
}

void Right(){
  lcd.setCursor(12,0);
  lcd.print("Rigt");
  lcd.setCursor(14,1);
  lcd.print(localKey);
    clm = clm + 1;
    if(clm > 8){
      clm = 8;
    }
}

void sw_mode(int num){
  num = localKey;
  switch(num){
    case 1:
      Select();
      break;
    case 2:
      left();
      break;
    case 3:
      UpUp();
      break;
    case 4:
      Down();
      break;
    case 5:
      Right();
      break;
    default:
      break;
  }
}

void loop()
{
  /*
  keypad.getKey();
  Grabs the current key.
  Returns a non-zero integer corresponding to the pressed key,
  OR
  Returns 0 for no keys pressed,
  OR
  Returns -1 (sample wait) when no key is available to be sampled.
  */
 
  for(up=1;up<10000;up++){
    dn = dn--;
    localKey = keypad.getKey();
    if(localKey < 0){
      localKey = 0;
      lcd.setCursor(12,0);
      lcd.print("None");
    }
    lcd.setCursor(4,0);
    lcd.print("       ");
    lcd.setCursor(clm,0);
    lcd.print(up);
    lcd.setCursor(4,1);
    lcd.print("        ");
    lcd.setCursor(clm,1);
    lcd.print(dn);
    lcd.setCursor(14,1);
    lcd.print(localKey);
    if (localKey != SAMPLE_WAIT){
      sw_mode(localKey);
      lcd.setCursor(14,1);
      lcd.print(localKey);
    }
    delay(time);
  }
}

たったこれだけの動作をさせるのにも、これだけ多くのスケッチが必要なんですね。

まだまだ初心者なので、スケッチの不出来はご容赦くださいまし!

今日はここまでです。

また新しいシールドを作ったら、アップいたします。

つづく・・・

テーマ:ホビー・おもちゃ
ジャンル:趣味・実用

コメント

非公開コメント

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
現在の閲覧者数: