前提・実現したいこと
ArduinoとArduinoをSPI通信をしたいのですが、どのように通信したいいでしょう?
実験的に...
スレーブ側に接続された2個のスイッチA,Bがあり
スイッチAが押されるごとに変数のカウントが増えていき
0→1→2→3→4→5→0→1
という感じになり5に到達すると次は0になるという仕組みで
スイッチBに関してもAと同様です。(A,Bは独立した変数でカウントしていきます)
マスタ側は常に0x01というデータを送り
---ボタンが押されていない時は0x01をスレーブが返して
---ボタンが押されると0x02を返すというようになり
0x02をマスタが受信すると0x03をさらに送信して
押された番号のデータを送信する(Aが押されれば8bit目を1にしてBが押されれば7bit目を1にする)
Aボタンが3回押されたなら
1000 0011
Bボタンが1回押されたら
0100 0001
というようなデータをスレーブが送信して
送信が終わればまた0x01を送信するという状態に戻るようにしようとしていますが、
何か他によい方法がありますか?
ボタンが押された時の動作(表の上から下に動作)
マスタ | スレーブ |
---|---|
0x01 | |
0x02 | |
0x03 | |
0x△△ | |
0x01 |
ボタンが押されない時の動作
マスタ | スレーブ |
---|---|
0x01 | |
0x01 |
発生している問題・エラーメッセージ・該当のソースコード
スレーブ側のみ
boolean Sdata_State=false;//受信データありの時"true"になる uint16_t Sdata=0;//受信データ格納 void loop() { //通信するスレーブのSSをLOWレベル //setup関数に最初の1回送信する int sdt = SPI.transfer(0);//受信する if(0x01==sdt)//スイッチ変化なし SPI.transfer(0x01); if(Sdata_State==true){ Sdata=SPI.transfer(0); Sdata_State=false; } if(0x02==sdt){//スイッチ変化あり SPI.transfer(0x03); Sdata_State=true; } Sdata=Sdata-10;//検波的な何か Serial.println(Sdata); if(Sdata_State==false) Sdata=0; delay(10); } void SetSSPin(int SSval) { digitalWrite(SSPin, SSval); }
回答1件
あなたの回答
tips
プレビュー