Радиокнопки для брейнринга на NRF24L01

Pasqa

✩✩✩✩✩✩✩
30 Июн 2019
4
0
Недавно попросили сделать радиокнопки для брейнринга, хоть я не очень в ардуино ( разве что светодиодом помигать)))) попробовал сделать сие чудо.
Вьішло примерно вот так: Видео на тикток
Screenshot_20230621-102739_Telegram.jpgIMG_20230621_100934_688.jpg
ТЗ бьіло такое: когда игрок нажимает свою кнопку первьім, у него загораетсья диод на кнопке, а у остальньіх при нажимании уже не будет загоратся диод некоторое время. Также чтобьі у ведущего бьіл пульт с кнопкой для начала раунда (чтоб фальшстарна небьіло)
Подключал модуль радио по стандартной схеме:
завантаження.png
Кнопку управления подключал к 3-му пину.
4-ий пин бьіл как вьіход на светодиод
Код пульта управления:

C++:
#include <RF24.h>


RF24 radio(9, 10);  // CE, CSN


const uint64_t address = 0x32345678ABCDDEF0;
int dataToSend1 = 101;
int dataToSend2 = 202;
int dataToSend3 = 303;
int dataToSend4 = 404;
int dataToSend5 = 505;
int dataToSend6 = 606;
int receivedData;

void setup() {
 
   pinMode(3, INPUT_PULLUP);
  radio.begin();
  radio.setChannel(10);
  radio.setDataRate(RF24_2MBPS);
  radio.setPALevel(RF24_PA_MAX);
  radio.openReadingPipe(0, address);
  radio.startListening();
 
  Serial.begin(57600);
}

void loop() {
   if (digitalRead(3) == HIGH) {
    radio.startListening();
  if (radio.available()) {
    radio.read(&receivedData, sizeof(receivedData));
    Serial.println(receivedData);
    
    if (receivedData == 1) {
      radio.stopListening();
      radio.openWritingPipe(address);
     delay (1000);
      radio.write(&dataToSend1, sizeof(dataToSend1));
      radio.write(&dataToSend1, sizeof(dataToSend1));
      radio.write(&dataToSend1, sizeof(dataToSend1));
      radio.write(&dataToSend1, sizeof(dataToSend1));
      Serial.println(dataToSend1);
      delay (3000);
      radio.startListening();
    }
    if (receivedData == 2) {
      radio.stopListening();
      radio.openWritingPipe(address);
     delay (1000);
      radio.write(&dataToSend2, sizeof(dataToSend2));
       radio.write(&dataToSend2, sizeof(dataToSend2));
        radio.write(&dataToSend2, sizeof(dataToSend2));
         radio.write(&dataToSend2, sizeof(dataToSend2));
      Serial.println(dataToSend2);
       delay (5000);
      radio.startListening();
    }
     if (receivedData == 3) {
      radio.stopListening();
      radio.openWritingPipe(address);
     delay (1000);
      radio.write(&dataToSend3, sizeof(dataToSend3));
      radio.write(&dataToSend3, sizeof(dataToSend3));
      radio.write(&dataToSend3, sizeof(dataToSend3));
      radio.write(&dataToSend3, sizeof(dataToSend3));
      Serial.println(dataToSend3);
      delay (3000);
      radio.startListening();
    }
     if (receivedData == 4) {
      radio.stopListening();
      radio.openWritingPipe(address);
     delay (1000);
      radio.write(&dataToSend4, sizeof(dataToSend4));
      radio.write(&dataToSend4, sizeof(dataToSend4));
      radio.write(&dataToSend4, sizeof(dataToSend4));
      radio.write(&dataToSend4, sizeof(dataToSend4));
      Serial.println(dataToSend4);
      delay (3000);
      radio.startListening();
    }
     if (receivedData == 5) {
      radio.stopListening();
      radio.openWritingPipe(address);
     delay (1000);
      radio.write(&dataToSend5, sizeof(dataToSend5));
      radio.write(&dataToSend5, sizeof(dataToSend5));
      radio.write(&dataToSend5, sizeof(dataToSend5));
      radio.write(&dataToSend5, sizeof(dataToSend5));
      Serial.println(dataToSend5);
      delay (3000);
      radio.startListening();
    }
     if (receivedData == 6) {
      radio.stopListening();
      radio.openWritingPipe(address);
     delay (1000);
      radio.write(&dataToSend6, sizeof(dataToSend6));
      radio.write(&dataToSend6, sizeof(dataToSend6));
      radio.write(&dataToSend6, sizeof(dataToSend6));
      radio.write(&dataToSend6, sizeof(dataToSend6));
      Serial.println(dataToSend6);
      delay (3000);
      radio.startListening();
    }
    
    }
  }
  else {
    radio.stopListening();
      radio.openWritingPipe(address);
    
      radio.write(&receivedData, sizeof(receivedData));
      }
      }
Код для одной из кнопок:

C++:
#include <RF24.h>
RF24 radio(9, 10);  // CE, CSN
const uint64_t address = 0x32345678ABCDDEF0;
int transmitterNumber = 1;
int dataToSend;
void setup() {
  radio.begin();
  radio.setChannel(10);
 radio.setDataRate(RF24_2MBPS);
  radio.setPALevel(RF24_PA_MAX); 
  //radio.openWritingPipe(address);
   radio.openReadingPipe(0, address);
  radio.startListening();
  pinMode(3, INPUT_PULLUP);
  pinMode (4, OUTPUT);
   Serial.begin(57600);
}
void loop() {
  if (radio.available()) {
    radio.read(&dataToSend, sizeof(dataToSend));
    Serial.println("resived data");
    Serial.println(dataToSend);
     if (dataToSend == 101) {
       Serial.println("led 0n");
      digitalWrite (4, HIGH);
      delay (1500);
      Serial.println("led off");
     digitalWrite (4, LOW);
    }} 
  if (digitalRead(3) == HIGH) {
   Serial.println("bottom is pressed");
    
     radio.stopListening();
      radio.openWritingPipe(address);
      radio.write(&transmitterNumber, sizeof(transmitterNumber));
      
radio.startListening();
     radio.openReadingPipe(0, address);
  
     Serial.println("send data to master");
}}
корпус печатался на 3д принтере, кнопи бьіли без фиксации. За код не ругайте, я не очень в програмировании
 

Вложения

koksholeg93

✩✩✩✩✩✩✩
10 Окт 2023
1
0
Какие изменения нужно внести в код чтобы увеличить длительность горения светодиода.?
И почему-то у меня сброс не работает, приходится физически перезапускать приемник.
 

Pasqa

✩✩✩✩✩✩✩
30 Июн 2019
4
0
Какие изменения нужно внести в код чтобы увеличить длительность горения светодиода.?
Строка 26
И почему-то у меня сброс не работает, приходится физически перезапускать приемник.
ТУТ хз, сам долго игрался что бьі корректно работало