【電子工作/Arduino】ATtiny84で動かすミニ無線コントローラー『TinyPad』を作ってみました! | ぶらり@web走り書き (burariweb.info) このとおりにせんとうごかん!つまりmiso,mosiを逆に配線するのが肝でした! 実感したのは、トランスミッタはいいけどレシーバにはつかいづらい! 電波が届いているか否かをシリアルデバッグ困難にて
----- transmitter by attiny84- receiver by arduino uno -----
// transmitter
// for attiny84
#include <SPI.h> // ライブラリのインクルード
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(PA0, PA1); // CE,CSNピンの指定
const byte address[6] = "00001"; // データを送信するアドレス
int SW_PIN = 8; // pb2 is 8, pa7,pa2,pa3 ok
bool SW_state = 1;
int SW1_PIN = PA7; // pb2 is 8, pa7,pa2,pa3 ok
bool SW1_state = 1;
int Data[2];
void setup() {
pinMode(SW_PIN, INPUT_PULLUP); // スイッチをプルアップで使用
pinMode(SW1_PIN, INPUT_PULLUP); // スイッチをプルアップで使用
radio.begin(); // 無線オブジェクトの初期化
radio.openWritingPipe(address); // データ送信先のアドレスを指定
radio.setPALevel(RF24_PA_MIN); // 出力を最小に
radio.stopListening(); // 送信側として設定
}
void loop(){
SW_state = digitalRead(SW_PIN); // スイッチの状態を読み取る
if(SW_state==LOW)
{
Data[0]=100;
}
else if(SW_state==HIGH){
Data[0]=10;
}
SW1_state = digitalRead(SW1_PIN); // スイッチの状態を読み取る
if(SW1_state==LOW)
{
Data[1]=100;
}
else if(SW1_state==HIGH){
Data[1]=10;
}
radio.write(&Data, sizeof(Data)); // スイッチの状態配列を送信する
delay(10);
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
// receiver
// for uno
#include <SPI.h> // ライブラリのインクルード
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE,CSNピンの指定
const byte address[6] = "00001"; // データを受信するアドレス
int LED_PIN = 2;
int LED1_PIN = 3;
int Data[2];
void setup() {
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN,HIGH);
delay(500);
digitalWrite(LED_PIN,LOW);
pinMode(LED1_PIN, OUTPUT);
digitalWrite(LED1_PIN,HIGH);
delay(500);
digitalWrite(LED1_PIN,LOW);
radio.begin(); // 無線オブジェクトの初期化
radio.openReadingPipe(0, address); // データ受信アドレスを指定
radio.setPALevel(RF24_PA_MIN); // 出力を最小に
radio.startListening(); // 受信側として設定
Serial.begin(9600);
}
void loop(){
if (radio.available()){
radio.read(&Data, sizeof(Data)); // スイッチの状態を受信して表示する
Serial.print(Data[0]);
Serial.print(" ");
Serial.println(Data[1]);
if(Data[0] == 10){
digitalWrite(LED_PIN, LOW);
} else if(Data[0]==100) {
digitalWrite(LED_PIN, HIGH);
}
if(Data[1] == 10){
digitalWrite(LED1_PIN, LOW);
} else if(Data[1]==100) {
digitalWrite(LED1_PIN, HIGH);
}
}
delay(10);
}
0 件のコメント:
コメントを投稿