教科書のp42です。ここでは新しいことがいくつか出てきます。そして私は思わずハマりそうになってしまいました(時間を必要以上に使ってしまうこと)。まずは深追いはせずに、色々と試して、次の段階に進むのがいいと思います。いや、やっぱり深く行きたいという人は、一緒に学習して行きましょう。ここは第一の関門と言って良いでしょう。
ここでの課題はシリアル通信を利用してoもしくはpの入力によりLEDを点灯消灯させること、さらにbの入力時にはLEDが10回点滅するというスケッチです。シリアル通信とは「言葉でおしゃべりをしてくれる」ということです。どうやらこれができると、こちらかの入力を理解したり、また相手のことをより簡単に理解して液晶とかに表示させたり、別の機器やPCとつなぐことができます。そして私が重宝しているのは、スケッチの怪しいところに入れて、スケッチがどこまでちゃんと動いていかを見極めるために、喋ってもらっています。例えばLED点灯するはずなのに、しない場合は、LED点灯を命令している直前に「LED点灯!」みたいな独り言を喋ってもらいます。そうやって、どこでスケッチが壊れているかを見極める判断ができます。
ここで利用するコマンドは以下の通りで、太字については理解を深めるために、さらに調べて見ました。教科書で学習が済んだら、スケッチは自分で最初から書いてみるのは、良い学習方法です。教科書の見ずに書く練習をするときには、参考としてこのコマンドリストを利用するといいでしょう。個人的にはif文が最初に出てくるのかと思いましたが、switchをここでは利用しています。いつか高橋先生に教えてもらおうかと思います。
int inputchar; intはデーターのタイプを示します。そのあとに続くinputcharは代名詞で、inputcharのデータータイプを整数型と定めています。この代名詞は好きなように決めていいのです。ミゲル先生曰く、「あとで誰がみてもわかるものが良い」と言われましたが、ここをgundamと入れてもスケッチは動きます。intの詳しい説明は英文ここ、日本語はここにあります。なぜvoid loop()で定義しなければならないわかりません。このあと、検証したいと思います。
検証1- int inputcharの働き
int inputchar; のままで、oとp以外の文字を入れ場合
int inputchar; のままで、oとp文字を複数入れた場合: 指示通りに動いている
ということは何文字入れてもスケッチが動くということです。予想は一文字しか受けれないでした。
検証2- int inputcharの置き換え
検証3- int inputcharの置き換え
word inputchar; とした場合、問題なく動きました?????
if (inputchar != -1)は全く意味がわかりません。教科書によるとif文により-1でなかった(!=)場合にのみを意味しているようです。
もうこの辺でやめておきます。謎は後できっとわかることでしょう。
#009【49歳から始めるArduino -黒帯を目指せ】番外編 Arduino初心者クラスに参加
#011【49歳から始めるArduino -黒帯を目指す】黄帯編1-2 Lチカでなぜ抵抗がいるのか?
ここでの課題はシリアル通信を利用してoもしくはpの入力によりLEDを点灯消灯させること、さらにbの入力時にはLEDが10回点滅するというスケッチです。シリアル通信とは「言葉でおしゃべりをしてくれる」ということです。どうやらこれができると、こちらかの入力を理解したり、また相手のことをより簡単に理解して液晶とかに表示させたり、別の機器やPCとつなぐことができます。そして私が重宝しているのは、スケッチの怪しいところに入れて、スケッチがどこまでちゃんと動いていかを見極めるために、喋ってもらっています。例えばLED点灯するはずなのに、しない場合は、LED点灯を命令している直前に「LED点灯!」みたいな独り言を喋ってもらいます。そうやって、どこでスケッチが壊れているかを見極める判断ができます。
ここで利用するコマンドは以下の通りで、太字については理解を深めるために、さらに調べて見ました。教科書で学習が済んだら、スケッチは自分で最初から書いてみるのは、良い学習方法です。教科書の見ずに書く練習をするときには、参考としてこのコマンドリストを利用するといいでしょう。個人的にはif文が最初に出てくるのかと思いましたが、switchをここでは利用しています。いつか高橋先生に教えてもらおうかと思います。
- #define
- void setup()
- void loop()
- pinMode()
- Serial.begin()
- int inputchar;
- switch()
- inputchar
- Serial.read()
- case
- Serial.print()
- digitalWrite
- "LED ON\n"
- break;
int inputchar; intはデーターのタイプを示します。そのあとに続くinputcharは代名詞で、inputcharのデータータイプを整数型と定めています。この代名詞は好きなように決めていいのです。ミゲル先生曰く、「あとで誰がみてもわかるものが良い」と言われましたが、ここをgundamと入れてもスケッチは動きます。intの詳しい説明は英文ここ、日本語はここにあります。なぜvoid loop()で定義しなければならないわかりません。このあと、検証したいと思います。
検証1- int inputcharの働き
int inputchar; のままで、oとp以外の文字を入れ場合
- 英文字: 反応なし
- 2英文字: 反応なし
- 一桁の数字: 反応なし
- 二桁の数字: 反応なし
- 三桁の数字: 反応なし
int inputchar; のままで、oとp文字を複数入れた場合: 指示通りに動いている
ということは何文字入れてもスケッチが動くということです。予想は一文字しか受けれないでした。
検証2- int inputcharの置き換え
- int inputchar;を削除した場合はコンパイルエラーとなりました
- char inputchar; とした場合、問題なく動きました(そのように見えているだけかもしれません)
検証3- int inputcharの置き換え
word inputchar; とした場合、問題なく動きました?????
if (inputchar != -1)は全く意味がわかりません。教科書によるとif文により-1でなかった(!=)場合にのみを意味しているようです。
もうこの辺でやめておきます。謎は後できっとわかることでしょう。
#009【49歳から始めるArduino -黒帯を目指せ】番外編 Arduino初心者クラスに参加
#011【49歳から始めるArduino -黒帯を目指す】黄帯編1-2 Lチカでなぜ抵抗がいるのか?
- 参考にしている本ははこちら: arudinoで電子工作を始めよう
- 高橋隆雄先生のブログはこちら: 高橋隆雄の何やかんや
- 利用しているキットはこちら:Arduino エントリーキット(Uno版)- Physical Computing Lab と Arduino拡張キット- Physical Computing Lab
おまけ1:p42のスケッチ1に追記して、入力がoとp以外はメッセージを出して、正しい入力を催促することができます。
スケッチはこちらです。色付き部分を追加しました。ちなみにIDEからスケッチをコピーペーすると、こんな感じになります。他の人は行毎に色が違ったりしていました。簡単にできる方法ってあるのでしょうか?Syntax Highlighterとgoogle-code-prettifyを使う方法があるようですが、ピンときませんというか手間がかかりそうな感じです。
#define LED 13
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
int inputchar;
inputchar = Serial.read();
if(inputchar != -1){
switch(inputchar){
case 'o':
Serial.println("LED ON");
digitalWrite(LED, HIGH);
break;
case 'p':
Serial.println("LED OFF");
digitalWrite(LED,LOW);
break;
default:
Serial.println("What's wrong with you? Input 'o'or 'p'please?");
}
}
}
おまけ2:p46のスケッチ2に追記して、入力がo、pそしてb以外はメッセージを出して、正しい入力を催促することができます。シリアルモニターでは10回点滅中の回数を表示させました。0が1回目となるので、0に1を足して、表示させています(色付き部分)。なんか良い感じですね。
#define LED 13
void blink10(){
int i;
for(i=0;i<10;i++){
Serial.print("LED blinking: ");
Serial.println(i+1);
digitalWrite(LED,HIGH);
delay(200);
digitalWrite(LED,LOW);
}
}
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
int inputchar;
inputchar = Serial.read();
if(inputchar != -1){
switch(inputchar){
//Turn on LED
case 'o':
Serial.println("LED ON");
digitalWrite(LED, HIGH);
break;
//Pause LED
case 'p':
Serial.println("LED OFF");
digitalWrite(LED,LOW);
break;
//Blink 10 times
case 'b':
Serial.println("Blinking LED 10 times");
blink10();
break;
default:
Serial.println("What's wrong with you? Input 'o'',''p' 'or b'please?");
}
Serial.println("READY");
}
}
#011【49歳から始めるArduino -黒帯を目指す】黄帯編1-2 Lチカでなぜ抵抗がいるのか?
- 参考にしている本ははこちら: Arduinoで電子工作を始めよう
- 高橋隆雄先生のブログはこちら: 高橋隆雄の何やかんや
- 利用しているキットはこちら:Arduino エントリーキット(Uno版)- Physical Computing Lab と Arduino拡張キット- Physical Computing Lab
コメント