Wifi указывает на Arduino Nano


Бытовая техника:

  • Arduino NanoEthernet Shield Wiznet W5100
  • Nrf24l01 + PA + LNA
  • кнопки
  • LED diódy
  • детектор
  • Описание функциональности и использования:

  • Система предназначена для игр Airsoft / Paintball / Nerf Wars для игрового режима точки захвата.
  • В системе используется пара Arduino Nano для двух очков, на которых сражаются игроки, каждая из которых состоит из двух диодов, двух детекторов, двух модулей wifi nRF24l01 + PA + LNA. В дополнение к этим компонентам кнопки для каждой из команд также размещаются на досках.
  • Одна кнопка для команды 1 (желтая команда) и вторая для команды 2 (красная команда). В случае актера они нажимают кнопку, чтобы изменить цвет точки в соответствии с их командой.
  • Если одна команда занимает обе точки, детектор звучит в обеих точках (игра заканчивается или продолжается в соответствии с правилами организатора). Это может означать, например, только конец раунда или добавление очков. В режиме реального времени оба Arduina общаются с модулями nRF24l01 + PA + LNA. Ответ между двумя ардуинами составляет 1-5 мс.
  • Благодаря модулям nRF24l01 можно общаться с Arduin на огромных расстояниях сотен метров в непрерывной среде (nRF24l01 предлагает более 120 каналов для связи до 2,4 ГГц). С внешним источником 5v / 3,3v можно передавать до 1,1 километра.
  • приемник

    // nRF24L01 prijimac
    #include <SPI.h> //arduino kniznica pre SPI zbernicu
    #include "RF24.h" //kniznica pre moduly
    int odezva = 3; //globalna premenna pre odosielany stav timu
    int prijem = 4; //globalna premenna pre citany stav timu
    const int buzzer = 2; //pin pre hlasic
    const int cervenytim = 5; //pin pre cerveny button
    const int zltytim = 6;  //pin pre zlty button
    const int cervenaled = 7;
    const int zltaled = 8;
    #define CE 4 //chip state pin
    #define CS 3 //chip select pin
    RF24 nRF(CE, CS); //nrf s volitelnymi pinmi CE a CS
    byte adresaPrijimac[] = "prijimac00"; //adresa prijimac
    byte adresaVysilac[] = "vysilac00"; //adresa vysielac
    void setup() {
      Serial.begin(9600); //Serial monitor na 9600 baud/s
      pinMode(buzzer, OUTPUT); //hlasic nastavit ako vystup
        pinMode(cervenaled, OUTPUT);
      pinMode(zltaled, OUTPUT);
      pinMode(cervenytim, INPUT_PULLUP); //tlacidla ako vstup na pullup rezistor
      pinMode(zltytim, INPUT_PULLUP); //tlacidla ako vstup na pullup rezistor
      nRF.begin(); //zapnut komunikaciu s nRF modulom
      nRF.setDataRate( RF24_250KBPS ); //najnizsia rychlost pre najvacsiu moznu vzidalenost
      nRF.setPALevel(RF24_PA_HIGH); //napajacie napatie na high moznost MAX potrebuje externy zdroj na 5v (3.3v pri napojeni napriamo)
      nRF.openWritingPipe(adresaPrijimac); //zapisujeme na prijimac na jeho adresu
      nRF.openReadingPipe(1, adresaVysilac); //citame na svojej adrese na kanale XX
      nRF.startListening();
    }
    
    void loop() {
     if(odezva == prijem){
              
      tone( buzzer, 900, 800);
     
      delay(1000);
          }else{
            noTone(buzzer);
             int vystupcerveny = digitalRead(cervenytim);
      int vystupzlty = digitalRead(zltytim);
      if(vystupcerveny==LOW){
        odezva = 1;
        digitalWrite(cervenaled, HIGH);
        digitalWrite(zltaled, LOW);
        }else if(vystupzlty==LOW){
        odezva = 2;
         digitalWrite(cervenaled, LOW);
        digitalWrite(zltaled, HIGH);
        }
       
      if ( nRF.available()) {
        // čekání na příjem dat
        while (nRF.available()) {
          nRF.read( &prijem, sizeof(prijem) );
        }
        Serial.println("Prijata volba: ");
        Serial.println(prijem);
        Serial.println("Odozva: ");
        Serial.println(odezva);
        nRF.stopListening();
        nRF.write( &odezva, sizeof(odezva) );
        nRF.startListening();
      }
            }  
    
    }
    					 

    передатчик

    // nRF24L01 vysielac
    #include <SPI.h>
    #include "RF24.h"
    #define CE 4
    #define CS 3
    RF24 nRF(CE, CS);
    int odezva = 8;
    int prijem = 12;
    const int buzzer = 2;
    const int cervenytim = 5;
    const int zltytim = 6;
    const int cervenaled = 7;
    const int zltaled = 8;
    byte adresaPrijimac[]= "prijimac00";
    byte adresaVysilac[]= "vysilac00";
    void setup() {
      Serial.begin(9600);
      pinMode(buzzer, OUTPUT);
      pinMode(cervenaled, OUTPUT);
      pinMode(zltaled, OUTPUT);
      pinMode(cervenytim, INPUT_PULLUP);
      pinMode(zltytim, INPUT_PULLUP);
      nRF.begin();
      nRF.setDataRate( RF24_250KBPS );
      nRF.setPALevel(RF24_PA_HIGH);
      nRF.openWritingPipe(adresaVysilac);
      nRF.openReadingPipe(1,adresaPrijimac);
      nRF.startListening();
    }
    
    void loop() {
     if(odezva == prijem){
              
      tone( buzzer, 900, 800);
     
      delay(1000);
          }else{
            noTone;
            int vystupcerveny = digitalRead(cervenytim);
      int vystupzlty = digitalRead(zltytim);
      if(vystupcerveny==LOW){
        odezva = 1;
        digitalWrite(cervenaled, HIGH);
        digitalWrite(zltaled, LOW);
        }else if(vystupzlty==LOW){
        odezva = 2;
        digitalWrite(cervenaled, LOW);
        digitalWrite(zltaled, HIGH);
        }
        
        nRF.stopListening();
         nRF.write( &odezva, sizeof(odezva) );
        nRF.startListening();
     while (nRF.available()) {
          nRF.read( &prijem, sizeof(prijem) );
        }
        Serial.println("Prijata volba: ");
        Serial.println(prijem);
        Serial.println("Odozva: ");
        Serial.println(odezva);
        delay(50);
            
            
            }
      
      
      }