Skocz do zawartości
jas123

problem z nRF24L01

Pomocna odpowiedź

Dzień dobry wgrałem sobie przykład z internetu , który ma za zadanie  poruszać servem na jednym arduino za pomocą joysticka na drugim arduino(jest jeszcze dioda i przycisk ale tego nie podłączałem).  Całość działa , ale problem w tym że po kilku sekundach nagle przestaje działać jedyne co pomaga to reset transmitera . Jaka może być tego przyczyna ?

kody:

//transmiter
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define led 5
RF24 radio(7, 8); // CE, CSN
const byte addresses[][6] = {"qscvb", "qwert"};
boolean buttonState = 0;
void setup() {
  pinMode(5, OUTPUT);
  radio.begin();
  radio.openWritingPipe(addresses[1]); 
  radio.openReadingPipe(1, addresses[0]); 
  radio.setPALevel(RF24_PA_MIN);
}
void loop() {
  delay(5);
  radio.stopListening();
  int potValue = analogRead(A0);
  int angleValue = map(potValue, 0, 1023, 0, 180);
  radio.write(&angleValue, sizeof(angleValue));
  delay(5);
  radio.startListening();
  while (!radio.available());
  radio.read(&buttonState, sizeof(buttonState));
  if (buttonState == HIGH) {
    digitalWrite(led, HIGH);
  }
  else {
    digitalWrite(led, LOW);
  }
}
//recriver
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
#define button 4
RF24 radio(7, 8); // CE, CSN
const byte addresses[][6] = {"qscvb", "qwert"};
Servo myServo;
boolean buttonState = 0;
void setup() {
  pinMode(button, INPUT);
  myServo.attach(5);
  radio.begin();
  radio.openWritingPipe(addresses[0]);
  radio.openReadingPipe(1, addresses[1]); 
  radio.setPALevel(RF24_PA_MIN);
}
void loop() {
  delay(5);
  radio.startListening();
  if ( radio.available()) {
    while (radio.available()) {
      int angleV = 0;
      radio.read(&angleV, sizeof(angleV));
      myServo.write(angleV);
    }
    delay(5);
    radio.stopListening();
    buttonState = digitalRead(button);
    radio.write(&buttonState, sizeof(buttonState));
  }
}

 

Udostępnij ten post


Link to post
Share on other sites

Może dodaj do tego kodu jakieś logowanie, żebyś widział gdzie się zatrzymuje?

Udostępnij ten post


Link to post
Share on other sites

jak to się robi?

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Wpisz np. w kluczowych momentach

Serial.println("1");

Serial.println("2");

Serial.println("3");

itd.

Po tym, co się ostatnie wyświetli w konsoli, będziesz wiedział gdzie stanęło... 

Edytowano przez SOYER
  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

wpisałem w 7 miejscach i zatrzymuje się na 6 

//transmiter
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define led 5
RF24 radio(7, 8); // CE, CSN
const byte addresses[][6] = {"qscvb", "qwert"};
boolean buttonState = 0;
void setup() {
  Serial.begin(9600);
  pinMode(5, OUTPUT);
  Serial.println("1");
  radio.begin();
  radio.openWritingPipe(addresses[1]); 
  Serial.println("2");
  radio.openReadingPipe(1, addresses[0]); 
  radio.setPALevel(RF24_PA_MIN);
  Serial.println("3");
}
void loop() {
  delay(5);
  Serial.println("4");
  
  radio.stopListening();
  int potValue = analogRead(A0);
  int angleValue = map(potValue, 0, 1023, 0, 180);
  radio.write(&angleValue, sizeof(angleValue));
  delay(5);
  Serial.println("5");
  radio.startListening();
  Serial.println("6");
  while (!radio.available());
  radio.read(&buttonState, sizeof(buttonState));
  Serial.println("7");
  if (buttonState == HIGH) {
    digitalWrite(led, HIGH);
  }
  else {
    digitalWrite(led, LOW);
  }
}

może dlatego że nie wcisnąłem microswitcha którego nawet nie podłączyłem

Udostępnij ten post


Link to post
Share on other sites

A ty rozumiesz co ten program robi tak w ogóle?

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Teraz już wiem mniej więcej , i gdy usunąłem część z guzikiem na którym się zatrzymywał program to zaczęło działać . Dzięki za odpowiedzi.

Edytowano przez jas123

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Jakim guzikiem??

Zastanawiam sie jak to się wgrało

"radio.read(&buttonState, sizeof(buttonState));"

inaczej "radio.read(&bool, sizeof(bool));" a powinno być (&text, sizeof(text));

 

Edytowano przez Jarewa

Udostępnij ten post


Link to post
Share on other sites
6 minut temu, Jarewa napisał:

inaczej "radio.read(&boll, sizeof(bool));" a powinno być (&text, sizeof(text));

Wyjaśnij dlaczego uważasz całkiem prawidłową konstrukcję za nieprawidłową i skąd wziąłeś jakiś "text".

 

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...