GWだったので秋葉原で買ったArduinoエントリーキットで遊びました。
なんだかんだで半年ぐらい寝かしてたのかorz
もっと早くやれよ・・・
ぼくはへっぽこプログラマーなので
一番最初にやることといえばHello Worldしか思いつかないのだけれど
電子工作やハードな人たちはLチカというらしい。
LEDチカチカの略?
というわけでやってみた。
プログラムはサンプルの
File -> Example -> Basics -> Blinkをそのまま
簡単,簡単と思いきや・・・
- ブレッドボード触るの久しぶりすぎてアタフタw
- 抵抗の色の読み方がわかんねーw
- LEDの向きはナニがプラスで、どれがマイナスなのw
とかなんか無駄に時間がかかりましたw
だけどブレッドボードにジャンパーをポチポチ刺すの楽しいわー!
なんとかLチカが終わったのでいっぱい光らしてみる。
エントリーキットについてたLEDを全部光らせる。
プログラムはサンプルとか見ながら適当に書いた。
C言語っぽく書けるので簡単,簡単
void setup() {
for(int i = 2; i <= 8; i++){
pinMode(i, OUTPUT);
}
Serial.begin(9600);
Serial.println("setupDone");
}
void loop() {
for(int i = 2; i <= 8; i++){
digitalWrite(i, HIGH);
delay(150);
digitalWrite(i, LOW);
delay(15);
}
for(int i = 8; i >= 2; i--){
digitalWrite(i, HIGH);
delay(150);
digitalWrite(i, LOW);
delay(15);
}
}
なんか0番と1番端子に刺したらLED光っぱなしという悲しいことになったので2番から8番使ってます。
うーん、なんでだろう。
グーグル先生に聞いてみたらなんかRubyから直接Arduinoとやりとりできるらしい。
なにそれすごい、ということで下記のサイトを参考に遊んでみる。
Funnelっていうニュータイプっぽいライブラリをつかえばいいらしいけど、WindowsとMac用っぽいので別の方法を探す。
そのまんまシリアル通信できるらしいのでgem install
なんかruby-serialportは失敗したのでserialportを入れる。
gem install ruby-serialport
gem install serialport
Arduino側のプログラムは参考サイトのやつをコピッとなー
int incomingByte = 0;
int ledPin = 13;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
incomingByte = Serial.read();
Serial.print("I received: ");
int ledBlinkTime = (incomingByte - 48) * 1000;
Serial.println(ledBlinkTime);
digitalWrite(ledPin, HIGH);
delay(ledBlinkTime);
digitalWrite(ledPin, LOW);
delay(1000);
}
}
んでおもむろにpryを起動して
[1] pry(main)> require 'serialport'=> true
[2] pry(main)> sp = SerialPort.new("/dev/ttyACM0", 9600, 8, 1, SerialPort::NONE)
=>
[3] pry(main)> sp.putc '3'
=> "3"
[4] pry(main)>
pryでインタラクティブにArduinoとお話できるとか凄すぎる!
電子工作敷居が高いなーって思ってたけれど
こんなにも簡単だなんて!
エントリーキットに入ってたLCDをブレッドボードにとりつける。
これで文字が出力できる。
Lチカも良いけどやっぱりHello Worldだよねということで
Rubyから送った文字をArduinoに表示させました。
Arduino側のプログラムはこれ
#include <LiquidCrystal.h>
int incomingByte;
char inByte;
String inMsg;
LiquidCrystal lcd(7,8,9,10,11,12,13);
void setup()
{
lcd.begin(2, 16);
lcd.clear();
lcd.print("*Hello World*");
lcd.setCursor(1, 1);
lcd.print("homuhomu");
Serial.begin(9600);
Serial.println("setupDone");
}
void loop()
{
if (Serial.available() > 0) {
inByte = Serial.read();
if((inByte >= 65 && inByte <= 90) || (inByte >= 97 && inByte <= 122)
|| (inByte >= 48 && inByte <= 57) || (inByte == 43)
|| (inByte == 61) || (inByte == 63)){
inMsg.concat(inByte);
}
}
if (inByte == 10 || inByte == 13){
inByte = 0;
lcd.clear();
lcd.print(inMsg);
inMsg = "";
}
}
んでpryを起動してっと
[1] pry(main)> require 'serialport'
=> true
[2] pry(main)> sp = SerialPort.new("/dev/ttyACM0", 9600, 8, 1, SerialPort::NONE)
=>
[3] pry(main)> sp.puts "homuhomu"
=> nil
ほむー!
Rubyとお話できるってことはTwitterのuserstreamを監視してメンションが来たらLEDをチカチカして
相手のIDを表示するとかすぐできちゃうわけだ!
逆にArduinoのセンサの値をRubyに渡せば・・・
うは、夢がひろがりんぐ
センサーとか色々電子部品が欲しくなっちまったぜw
Arduino楽しい!
たわごと
umitterのザオラルに失敗したというか、やる気がでないというか、部屋の掃除が捗るよね!
一気に変えないで少しずつやるかー