ArduinoはPICより高価だが使い勝手は断然良い。

雨の今朝は通常出勤です。


Arduino UNO R3を2台使ってI2C Master Slave接続の検証です。

Masterから指令を送り、Slaveがこれを受けてプログラムを実行。

Slaveのプログラムが完了してからSlaveがMasterに信号を返送して終わると言うものです。ソースコードは以下の通りです。

Master側:

Wire.beginTransmission(slave_address);
Wire.write(shirei) ;
Wire.endTransmission(false); // ココがポイント
Wire.requestFrom(slave_address,1);
while (Wire.available()) {
signal_from_slave = Wire.read();
Serial.write(signal_from_slave);
}
Serial.println();
Wire.endTransmission();

Slave側:

void receiveEvent(int n)
{
shirei= 0;
for (int i=0; i < n; i++)
{
if(Wire.available())
{
shirei = Wire.read();
Serial.print(shirei,HEX);
Serial.print(" ");
}
Serial.println();
// 以下shirei値に応じた処理
}

void requestEvent()
{
Serial.println("recept request.");
if (shirei == 0) // shirei値に応じた返値設定
{
signal_from_slave = 0x00;
}
if (shirei == 1)
{
signal_from_slave = 0x01;
}
Wire.write(signal_from_slave);
}

void setup() {
Serial.begin(9600);
Wire.begin(address);
// マスタへ返値を送信する割込関数の設定
Wire.onRequest(requestEvent);
// マスタから指令を受信する割込関数の設定
Wire.onReceive(receiveEvent);
Serial.println("i2c slave test");
}

Master側のWire.endTransmission(false);のfalseオプションがミソで、これにより、クロックストレッチが設定されるものと思っています。

Arduino UNO R3は3,240円。一方PIC16F1829は370円と10倍近い値段の開きがあります。

でも、使いやすさや公開情報量の豊富さではPICを圧倒しています。


ただ、極めて残念なのは本チャンのパソコンでArduino UNO R3(Leonardも然り)が全く使えないことです。

依然としてノーパソでプログラムローディング等を行わざるを得ません。


今日は夕食が外食になりました。


肉丼定食です。
コンピュータ | - | -