[ニュース十勇士クラブTV] プチコンとArduinoでデータ通信その2


2012年11月20日放送。前回の「プチコンとArduinoでデータ通信」の続き。
前回はフォトトランジスター2個で2ビットパラレル通信する所までやりましたが、今回はフォトトランジスター8個を基板にはんだ付けして、8ビットパラレル通信に挑戦しました。

※ただし、結果としてはうまく動きませんでした。後で調べた所によると、フォトトランジスターと内蔵プルアップ抵抗の兼ね合いで、入力値がArduinoのデジタル入力のしきい値を越えないようです。今後さらに調整してみます。前回と同様にアナログ入力を使った方がいいかもしれません。

●プチコン側の送信プログラム

前回のプログラムをさらに改造して、一度に8ビットずつパラレル送信するようにしました。Arduino側のフォトトランジスター基板に合わせて、点滅位置も変えています。

121120-petitcom.jpg

◇プチコンmkII用QRコード

1 2
petitcom-arduino-qr1.png petitcom-arduino-qr2.png

●Arduino受信基板

Arduino用のユニバーサル基板(バニラシールド)を使って、フォトトランジスター8個と配線をはんだ付けしました。
Arduino Leonardoの内蔵プルアップ抵抗を使う事にして、基板上はフォトトランジスターだけです。

121120-arduino.jpg

121120-circuit.png

◇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);
}