Fejl i kode (Læst 442x)

Offline wernerdejong1972

  • Nyfødt El-Elsker
  • *
  • Indlæg: 1
  • Antal brugbare Indlæg: 0
    • Vis profil
Fejl i kode
« Dato: September 09, 2021, 17:18:33 »
Hej
Jeg prøver og få 2 arduinoer til at tale samme med nRF24L01.
Receiver har nedenstående kode. Når jeg trykker på en knap i sender side så burde receiveren giver en tekst i serialmonitor og LED_BUILTIN burde tænde. Når jeg så trykker på knappen så kommer der en besked i serialmonitoren, så det virker men LED_BUITIN tænder ikke. Jeg har også prøvet det med en pin men det virker heller ikke. Er der nogen der har en ide hvad jeg gøre forkert?
//RECEIVER
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte address[6] = "00001";
boolean button_state = 0;

void setup() {
   pinMode(LED_BUILTIN, OUTPUT);
 
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);   //Setting the address at which we will receive the data
  radio.setPALevel(RF24_PA_MIN);       //You can set this as minimum or maximum depending on the distance between the transmitter and receiver.
  radio.startListening();              //This sets the module as receiver
}
void loop()
{
  if (radio.available())              //Looking for the data.
  {
    char text[32] = "";                 //Saving the incoming data
    radio.read(&text, sizeof(text));    //Reading the data
    radio.read(&button_state, sizeof(button_state));    //Reading the data
    if (button_state == HIGH)
    {
      Serial.println(text);
      digitalWrite(LED_BUILTIN, HIGH);
       }
    else
    {
      Serial.println(text);
     digitalWrite(LED_BUILTIN, LOW);
    }
   
  }
  delay(5);
}

 

Online Jakobsen

  • Lavpas filter
  • ****
  • Indlæg: 280
  • Antal brugbare Indlæg: 42
    • Vis profil
Sv: Fejl i kode
« Svar #1 Dato: September 11, 2021, 09:27:21 »
Hej
Nu skriver du ikke noget hvilket arduino board du bruger.
Mit bedste bud er at den interne LED ikke sidder på der samme ben på alle Arduino Boards
Når du benytter LED_BUILTIN seer den predefineret til at være pin 13

Prøv at bruge  (med det rigtige PIN numer i stedet for LED_BUILTIN konstant)
pinMode(13, OUTPUT);

Du kan starte med at få blink til at virke og så gå tilbage til nRF24L0 koden
https://www.arduino.cc/en/Tutorial/BuiltInExamples/Blink

BTW nRF24L0 er super  :)

 

Offline bws

  • Lavpas filter
  • ****
  • Indlæg: 260
  • Antal brugbare Indlæg: 24
    • Vis profil
Sv: Fejl i kode
« Svar #2 Dato: September 12, 2021, 23:34:50 »
hej

det her kommer ikke til at virke:
    radio.read(&button_state, sizeof(button_state));

men hvad er det helt specifik du vil have den til ? er det når du sender en kommando at du vil have lysdioden til at tænde ? eller bare lyse når du har modtaget data ?

MVH

 

Online Jakobsen

  • Lavpas filter
  • ****
  • Indlæg: 280
  • Antal brugbare Indlæg: 42
    • Vis profil
Sv: Fejl i kode
« Svar #3 Dato: September 13, 2021, 10:14:23 »
det her kommer ikke til at virke:
    radio.read(&button_state, sizeof(button_state));

Hvis du søger efter  "radio.read(&button_state, sizeof(button_state)); "

Så kommer det faktisk op i en del tutorials på nettet så det kan godt være at det virker

https://www.hackster.io/lightthedreams/nrf24l01-for-communication-1-way-and-2-way-80e65c

Her sætter de også LED mere direkte med "int led_pin = 3;" og "digitalWrite(led_pin, HIGH);" istedet for "LED_BUILTIN"


Jeg antager at man sættet pointer adressen på "button" med størrelsen af data modtaget og dermed er den 0 hvis ingen og 1 hvis større end 0

I library RF24-master er der en funktion radio.available() som jo kunne bruges til det samme og som gør det lidt på samme måde

 /**
   * Check whether there are bytes available to be read
   * @code
   * if(radio.available()){
   *   radio.read(&data,sizeof(data));
   * }
   * @endcode
   * @return True if there is a payload available, false if none is
   */
  bool available(void);


Ja jeg tror OP gerne vil have at LED lyser hvis der er modtaget data.

Lad os se om vi stadig har OP med her  :)

 

Offline bws

  • Lavpas filter
  • ****
  • Indlæg: 260
  • Antal brugbare Indlæg: 24
    • Vis profil
Sv: Fejl i kode
« Svar #4 Dato: September 13, 2021, 13:57:47 »
det kan godt være at det virker, som Jakobsen siger, da i det lib han bruger, caster de åbenbart bare referencen til en byte pointer. Hvilket jeg synes lidt underlig måde at gøre det på :)

@wernerdejong1972 - prøv at skrive til din serial når den går ind i IF-sætningen, aller sådan noget her:

 if (button_state == HIGH)
    {
      Serial.println(text);
      Serial.println("button state HIGH");
      digitalWrite(LED_BUILTIN, HIGH);
       }
    else
    {
      Serial.println(text);
     digitalWrite(LED_BUILTIN, LOW);
      Serial.println("button state LOW");
    }

for at se om du faktisk får status på knappen sendt.