[ニュース|十勇士クラブTV] プチコンとArduinoでデータ通信その2
2012年11月20日放送。前回の「プチコンとArduinoでデータ通信」の続き。
前回はフォトトランジスター2個で2ビットパラレル通信する所までやりましたが、今回はフォトトランジスター8個を基板にはんだ付けして、8ビットパラレル通信に挑戦しました。
※ただし、結果としてはうまく動きませんでした。後で調べた所によると、フォトトランジスターと内蔵プルアップ抵抗の兼ね合いで、入力値がArduinoのデジタル入力のしきい値を越えないようです。今後さらに調整してみます。前回と同様にアナログ入力を使った方がいいかもしれません。
●プチコン側の送信プログラム
前回のプログラムをさらに改造して、一度に8ビットずつパラレル送信するようにしました。Arduino側のフォトトランジスター基板に合わせて、点滅位置も変えています。
◇プチコンmkII用QRコード
1 | 2 |
![]() |
![]() |
●Arduino受信基板
Arduino用のユニバーサル基板(バニラシールド)を使って、フォトトランジスター8個と配線をはんだ付けしました。
Arduino Leonardoの内蔵プルアップ抵抗を使う事にして、基板上はフォトトランジスターだけです。
◇Arduino受信プログラム
/*
Leonardoのデジタル入力チェック
*/
int pin[8];
void setup() {
// 入力ピンを内部プルアップモードに
for(int i = 0; i <= 7; i++) {
pin[i] = i + 2;
pinMode(pin[i], INPUT_PULLUP);
}
// シリアルモニタセットアップ
Serial.begin(9600);
while (!Serial) ;
Serial.println("*** Start ***");
}
// === ループ ===
void loop() {
int inbyte = 0;
int bit[8];
// デジタルピンから8ビット読み込み
for(int i = 0; i <= 7; i++) {
bit[i] = digitalRead(pin[i]);
bitWrite(inbyte, i, bit[i]);
}
// シリアルモニタに入力値を表示
Serial.print(inbyte);
Serial.print("=B");
for(int i = 7; i >= 0; i--) {
Serial.print(bit[i]);
}
Serial.print("=[");
Serial.print(char(inbyte));
Serial.println("]");
delay(100);
}