Skocz do zawartości

problem z nRF24L01


jas123

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));
  }
}

 

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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

Link do komentarza
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
Link do komentarza
Share on other sites

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
Link do komentarza
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".

 

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.