Arduino勉強会/0L-lbeDuinoで2代目GMC4を作ってみる
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[Arduino勉強会]]
#contents
2015/05/05からのアクセス回数 &counter;
** 2代目GMC4 [#ic48f574]
[[Arduino勉強会/0E-GMC4をArduinoで作ってみる]]で紹介したG...
もっと小さくて、電池でも動くGMC4が欲しいということで、
lbeDuinoに電卓シールドを追加して、GMC4を動かしてみました。
1号機にくらべ、2号機はとてもコンパクトで、電池シールドを...
動かせます。
&ref(GMC4-2.png);
*** 電卓シールドをつくる [#r386489e]
いつものようにテクノペンで、以下の様に基板をつくりました。
ブザーをD3に接続するため、完成版は下図の結線とは若干異な...
&ref(CalculatorShield_sch.png);
*** 電卓シールドの動作確認 [#od6f59d9]
電卓シールドの動作確認に以下のスケッチを動かしてみました。
#pre{{
#include "lbed.h"
#include "AQCM0802.h"
#include "Keypad.h"
// D8番ピンSDA, D9番ピンSCL
AQCM0802 lcd(D8, D9);
// 圧電スピーカー
Tone buzzer(D3);
// キーパッド
const byte rows = 5; // 5行
const byte cols = 4; // 4列
char keys[rows][cols] = {
{'S','I','R','T'},
{'C','D','E','F'},
{'8','9','A','B'},
{'4','5','6','7'},
{'0','1','2','3'}
};
PinName rowPins[rows] = {D12, D10, D7, D11, D2};
PinName colPins[cols] = {D4, D5, D6, D13};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, co...
void setup() {
lcd.setup();
lcd.print("I2C LCD");
}
void loop() {
char c =keypad.getKey();
if (c) {
buzzer.tone(440, 100);
lcd.locate(0, 1);
lcd.print(c);
}
wait_ms(100);
}
}}
何とか上手く動いているようです。
&ref(CalculatorSheild.png);
** GMC4を動かす [#b54c96db]
電卓シールドの確認ができたので、GMC4を動かしてみます。
キー配置は、以下の通りです。
&ref(keylayout.png);
*** GMC4スケッチ [#z7b7fb2d]
1号機では、LEDと7セグメントを使って表示していましたが、
2号機は、I2C版のLCD1個なので、表示制御は簡単です。
GMC4のスケッチは、以下の通りです。
#pre{{
#include "lbed.h"
#include <AQCM0802.h>
#include <Keypad.h>
#include "GMC4.h"
Display display;
KeyBoard keyBoard;
GMC4 gmc4(&keyBoard, &display);
byte lastCode;
byte addr;
byte mode;
byte key;
void setup() {
Serial.begin(9600);
display.setup();
lastCode = gmc4.resetAll();
display.setAddress(0);
display.setValue(0xF);
mode = PROGRAM;
}
void readProgram() {
while(Serial.available()) {
key = Serial.read();
if (key >= '0' && key <= '9')
lastCode = key - '0';
else if (key >= 'A' && key <= 'F')
lastCode = key - 'A' + 10;
else if (key == 'T') {
gmc4.longTone();
lastCode = gmc4.reset();
display.setAddress(gmc4.getAddr());
display.setValue(lastCode);
mode = PROGRAM;
}
lastCode = gmc4.incr(lastCode);
display.setAddress(gmc4.getAddr());
display.setValue(lastCode);
}
}
void loop() {
if (mode == PROGRAM || mode == STEP_LedOffBeepOff || mo...
if (Serial.available())
readProgram();
else
key = gmc4.getKey();
if (key != NO_KEY) {
if ((key >= '0' && key <= '9') || (key >= 'A' && ke...
addr = (lastCode > 0) ? lastCode << 4 : 0;
lastCode = gmc4.getCode();
addr += lastCode;
display.setValue(lastCode);
}
else {
switch (key) {
case 'S': // A SET
lastCode = gmc4.addrSet(addr);
display.setAddress(gmc4.getAddr());
display.setValue(lastCode);
break;
case 'I': // INCR
if(mode == PROGRAM) {
lastCode = gmc4.incr(lastCode);
display.setAddress(gmc4.getAddr());
display.setValue(lastCode);
}
else if (mode == STEP_LedOffBeepOff || mode =...
mode = gmc4.step();
if (mode == STEP_LedOnBeepOn)
display.setAddress(gmc4.getAddr());
}
break;
case 'R': // RUN
switch (lastCode) {
case 1:
mode = RUN_LedOffBeepOff;
break;
case 2:
mode = RUN_LedOnBeepOff;
break;
case 5:
mode = STEP_LedOffBeepOff;
break;
case 6:
mode = STEP_LedOnBeepOn;
break;
default:
mode = RUN_LedOnBeepOn;
}
gmc4.reset();
display.setAddress(gmc4.getAddr());
gmc4.setMode(mode);
break;
case 'T': // RESET
gmc4.longTone();
lastCode = gmc4.reset();
display.setAddress(gmc4.getAddr());
display.setValue(lastCode);
mode = PROGRAM;
break;
}
addr = 0;
}
}
display.drawValue();
display.drawAddr();
}
else {
mode = gmc4.step();
}
gmc4.draw();
}
}}
スケッチ全体をZipファイルにまとめてました。lbeDuinoと一緒...
- &ref(GMC4lbeDuino.zip);
*** GMC4を動かしてみる。 [#zb4f410b]
例によって、15秒タイマーを動かしてみます。
Arduinoのシリアルモニターから以下の文字列を入力して、送信...
#pre{{
A189EC313E9B1F13F02E7F15T
}}
&ref(Run_GMC4lbeDuino.png);
** コメント [#w714b6d5]
#vote(おもしろかった[7],そうでもない[0],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。勉強会で分から...
スパム防止に画像の文字列も入力してください。
#comment_kcaptcha
*** 補足 [#m1039628]
Arduino版では、パワーダウンスリープを入れて試したが、スリ...
また、WDTを使って定期的にWakeupするようにしるとRTCとの割...
ネット調べるとArduinoの割込関数は使いにくいみたい!
終了行:
[[Arduino勉強会]]
#contents
2015/05/05からのアクセス回数 &counter;
** 2代目GMC4 [#ic48f574]
[[Arduino勉強会/0E-GMC4をArduinoで作ってみる]]で紹介したG...
もっと小さくて、電池でも動くGMC4が欲しいということで、
lbeDuinoに電卓シールドを追加して、GMC4を動かしてみました。
1号機にくらべ、2号機はとてもコンパクトで、電池シールドを...
動かせます。
&ref(GMC4-2.png);
*** 電卓シールドをつくる [#r386489e]
いつものようにテクノペンで、以下の様に基板をつくりました。
ブザーをD3に接続するため、完成版は下図の結線とは若干異な...
&ref(CalculatorShield_sch.png);
*** 電卓シールドの動作確認 [#od6f59d9]
電卓シールドの動作確認に以下のスケッチを動かしてみました。
#pre{{
#include "lbed.h"
#include "AQCM0802.h"
#include "Keypad.h"
// D8番ピンSDA, D9番ピンSCL
AQCM0802 lcd(D8, D9);
// 圧電スピーカー
Tone buzzer(D3);
// キーパッド
const byte rows = 5; // 5行
const byte cols = 4; // 4列
char keys[rows][cols] = {
{'S','I','R','T'},
{'C','D','E','F'},
{'8','9','A','B'},
{'4','5','6','7'},
{'0','1','2','3'}
};
PinName rowPins[rows] = {D12, D10, D7, D11, D2};
PinName colPins[cols] = {D4, D5, D6, D13};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, co...
void setup() {
lcd.setup();
lcd.print("I2C LCD");
}
void loop() {
char c =keypad.getKey();
if (c) {
buzzer.tone(440, 100);
lcd.locate(0, 1);
lcd.print(c);
}
wait_ms(100);
}
}}
何とか上手く動いているようです。
&ref(CalculatorSheild.png);
** GMC4を動かす [#b54c96db]
電卓シールドの確認ができたので、GMC4を動かしてみます。
キー配置は、以下の通りです。
&ref(keylayout.png);
*** GMC4スケッチ [#z7b7fb2d]
1号機では、LEDと7セグメントを使って表示していましたが、
2号機は、I2C版のLCD1個なので、表示制御は簡単です。
GMC4のスケッチは、以下の通りです。
#pre{{
#include "lbed.h"
#include <AQCM0802.h>
#include <Keypad.h>
#include "GMC4.h"
Display display;
KeyBoard keyBoard;
GMC4 gmc4(&keyBoard, &display);
byte lastCode;
byte addr;
byte mode;
byte key;
void setup() {
Serial.begin(9600);
display.setup();
lastCode = gmc4.resetAll();
display.setAddress(0);
display.setValue(0xF);
mode = PROGRAM;
}
void readProgram() {
while(Serial.available()) {
key = Serial.read();
if (key >= '0' && key <= '9')
lastCode = key - '0';
else if (key >= 'A' && key <= 'F')
lastCode = key - 'A' + 10;
else if (key == 'T') {
gmc4.longTone();
lastCode = gmc4.reset();
display.setAddress(gmc4.getAddr());
display.setValue(lastCode);
mode = PROGRAM;
}
lastCode = gmc4.incr(lastCode);
display.setAddress(gmc4.getAddr());
display.setValue(lastCode);
}
}
void loop() {
if (mode == PROGRAM || mode == STEP_LedOffBeepOff || mo...
if (Serial.available())
readProgram();
else
key = gmc4.getKey();
if (key != NO_KEY) {
if ((key >= '0' && key <= '9') || (key >= 'A' && ke...
addr = (lastCode > 0) ? lastCode << 4 : 0;
lastCode = gmc4.getCode();
addr += lastCode;
display.setValue(lastCode);
}
else {
switch (key) {
case 'S': // A SET
lastCode = gmc4.addrSet(addr);
display.setAddress(gmc4.getAddr());
display.setValue(lastCode);
break;
case 'I': // INCR
if(mode == PROGRAM) {
lastCode = gmc4.incr(lastCode);
display.setAddress(gmc4.getAddr());
display.setValue(lastCode);
}
else if (mode == STEP_LedOffBeepOff || mode =...
mode = gmc4.step();
if (mode == STEP_LedOnBeepOn)
display.setAddress(gmc4.getAddr());
}
break;
case 'R': // RUN
switch (lastCode) {
case 1:
mode = RUN_LedOffBeepOff;
break;
case 2:
mode = RUN_LedOnBeepOff;
break;
case 5:
mode = STEP_LedOffBeepOff;
break;
case 6:
mode = STEP_LedOnBeepOn;
break;
default:
mode = RUN_LedOnBeepOn;
}
gmc4.reset();
display.setAddress(gmc4.getAddr());
gmc4.setMode(mode);
break;
case 'T': // RESET
gmc4.longTone();
lastCode = gmc4.reset();
display.setAddress(gmc4.getAddr());
display.setValue(lastCode);
mode = PROGRAM;
break;
}
addr = 0;
}
}
display.drawValue();
display.drawAddr();
}
else {
mode = gmc4.step();
}
gmc4.draw();
}
}}
スケッチ全体をZipファイルにまとめてました。lbeDuinoと一緒...
- &ref(GMC4lbeDuino.zip);
*** GMC4を動かしてみる。 [#zb4f410b]
例によって、15秒タイマーを動かしてみます。
Arduinoのシリアルモニターから以下の文字列を入力して、送信...
#pre{{
A189EC313E9B1F13F02E7F15T
}}
&ref(Run_GMC4lbeDuino.png);
** コメント [#w714b6d5]
#vote(おもしろかった[7],そうでもない[0],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。勉強会で分から...
スパム防止に画像の文字列も入力してください。
#comment_kcaptcha
*** 補足 [#m1039628]
Arduino版では、パワーダウンスリープを入れて試したが、スリ...
また、WDTを使って定期的にWakeupするようにしるとRTCとの割...
ネット調べるとArduinoの割込関数は使いにくいみたい!
ページ名:
SmartDoc