Close

Nrf24l01 ovládání lodi – problém s kódem

Úvodní stránka Fórum Hardware Arduino Nrf24l01 ovládání lodi – problém s kódem

Označeno štítky: 

Aktuálně je na stránce zobrazen 1 příspěvek (celkem z 1)
  • Autor
    Příspěvky
  • #7273
    kennyslav
    Účastník

    Zdravím, postavil jsem loď a dálkové ovládání se snahou ovládat loď pomocí nrf24l01. Na ovladači jsou dva joysticky a 3 tlačítka přes rezistory na jeden vstup. Jsem nováček, co se arduina týče, takže první co jsem udělal bylo, že jsem navštívil google a hledal kód pro nrf s joystickem a servem. Po vyzkoušení několika programů mi konečně jeden začal fungovat, nicméně byl jen pro jeden joystick, tak jsem ho poupravil podle mých potřeb, jenže, program už nefunguje. Arduina se nechtějí vůbec spojit. Když odpojím CE a CSN z nrf tak se arduina spojí, ale na přijímači jsou samozřejmě divná čísla.

    Přijímač:

    /*
     * If you use the serial monitor for debugging remember to ster the baud rate to 115200.
     * The modules are set to only one-way communication. That means that the controller can only transmit and the tank can only receive.
     * If you wish to change this for two-way communication there is plenty of documentation to do so on the internet and in examples.
     * 
     * This program receives the X and Y values and processes it into movement.
     */
    #include <SPI.h>  
    #include "RF24.h" 
    #include <VarSpeedServo.h>
    VarSpeedServo myServo;
    
    #define wait 1
    #define time 10
    int freq = 0;
    
    RF24 myRadio (7,8); 
    struct package
    {
      int X1=1;
      int Y1=1;
      int X2=1;
      int Y2=1;
      int F=1;
    };
    
    byte addresses[][6] = {"0"}; 
    int OUT0 = 3;
    int OUT1 = 5;
    int OUT2 = 6;
    int OUT3 = 7;
    int OUT4 = 8;
    
    typedef struct package Package;
    Package data;
    
    void setup() 
    {
      Serial.begin(115200);
      delay(1000);
      myServo.attach(6);
       
      myRadio.begin(); 
      myRadio.setChannel(100); 
      myRadio.setPALevel(RF24_PA_MAX);
      myRadio.setDataRate( RF24_250KBPS ) ; 
      myRadio.openReadingPipe(1, addresses[0]);
      myRadio.startListening();
      pinMode(OUT0, OUTPUT);
      pinMode(OUT1, OUTPUT);
      pinMode(OUT2, OUTPUT);
      pinMode(OUT3, OUTPUT);
      pinMode(OUT4, OUTPUT);
      analogWrite(OUT0, 0);
      analogWrite(OUT1, 0);
      analogWrite(OUT2, 0);
      analogWrite(OUT3, 0);
      analogWrite(OUT4, 0);
    }
    
    void loop()  
    {
     
      if ( myRadio.available()) 
      {analogWrite(OUT4, 255);
        while (myRadio.available())
        {
          myRadio.read( &data, sizeof(data) );
        }
        Serial.print("X_Left:");
      Serial.print(data.X1);
      Serial.print("    Y_Left:");
      Serial.print(data.Y1);
      Serial.print("    X_Right:");
      Serial.print(data.X2);
      Serial.print("    Y_Right:");
      Serial.print(data.Y2);
      Serial.print("    Function:");
      Serial.println(data.F);
    
      }
      
      }

    Vysílač:

    /*
     * If you use the serial monitor for debugging remember to ster the baud rate to 115200.
     * The modules are set to only one-way communication. That means that the controller can only transmit and the tank can only receive.
     * If you wish to change this for two-way communication there is plenty of documentation to do so on the internet and in examples.
     * 
     * This program reads the analog input of the joystick and sends it in packets to te tank.
     */
    #include <SPI.h>  
    #include "RF24.h"
    #define TIME1 500
    
      int LED1 = 2 ;
      int LED2 = 3 ;
      int LED3 = 4 ;
      int G_LED = 5;
      int R_LED = 6;
    
    RF24 myRadio (7,8);
    byte addresses[][6] = {"0"};
    
    struct package
    {
      int X1=1;
      int Y1=1;
      int X2=1;
      int Y2=1;
      int F=1;
      
      
    };
    
    typedef struct package Package;
    Package data;
    unsigned long Time1; 
    
    void setup()
    {
    
      pinMode(LED1, OUTPUT);
      pinMode(LED2, OUTPUT);
      pinMode(LED3, OUTPUT);
      pinMode(G_LED, OUTPUT);
      pinMode(R_LED, OUTPUT);
    
      Time1 = millis();
       
      
      Serial.begin(115200);
      delay(100);
      myRadio.begin();  
      myRadio.setChannel(100); 
      myRadio.setPALevel(RF24_PA_MIN);
      myRadio.setDataRate( RF24_250KBPS ) ; 
      myRadio.openWritingPipe( addresses[0]);
      delay(100);
     
    }
    
    void loop()
    {
    
      myRadio.write(&data, sizeof(data)); 
    
      Serial.print("X_Left:");
      Serial.print(data.X1);
      Serial.print("    Y_Left:");
      Serial.print(data.Y1);
      Serial.print("    X_Right:");
      Serial.print(data.X2);
      Serial.print("    Y_Right:"); 
      Serial.print(data.Y2);
      Serial.print("    Function:");
      Serial.println(data.F);
      data.X1 = analogRead(A0);
      data.Y1 = analogRead(A1);
      data.X2 = analogRead(A2);
      data.Y2 = analogRead(A3);
      data.F = analogRead(A4);
      if ( myRadio.available()) 
      {digitalWrite(G_LED, HIGH);}
      if(millis() >= Time1)    // je-li aktualni cas >= casova znacka 1
      { 
        digitalWrite(R_LED, !digitalRead(R_LED)); // zmen stav LED1
        Time1 = Time1 + TIME1;                  // posun casovou znacku o 500ms
      }
    
       if (data.F >875 && data.F <895  || data.F >925 && data.F <945  || data.F >915 && data.F <925 || data.F >940 && data.F <1023) 
      {digitalWrite(LED1, HIGH);}
      else digitalWrite(LED1, LOW);
     
        if (data.F >775 && data.F <795  || data.F >925 && data.F <945 || data.F >850 && data.F <880 || data.F >940 && data.F <1023) 
      {digitalWrite(LED2, HIGH);}
       else digitalWrite(LED2, LOW);
    
        if (data.F >695 && data.F <720  || data.F >915 && data.F <925|| data.F >850 && data.F <880  || data.F >940 && data.F <1023) 
      {digitalWrite(LED3, HIGH);}
       else digitalWrite(LED3, LOW);
      
      delay(100);
    }
Aktuálně je na stránce zobrazen 1 příspěvek (celkem z 1)
  • Pro reakci na toto téma se musíte přihlásit.