2024年2月16日金曜日

nrf24l01 on Attiny84 transmitter and ArduinoUno receiver

 【電子工作/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 件のコメント:

コメントを投稿