Помогите со скетчем

JesterKing

✩✩✩✩✩✩✩
22 Фев 2021
14
0
Заголовок темы должен отражать содержимое. Переформулируй или тема будет удалена
Всем привет. Связал две ардуино через NRF24L01, для того чтобы управлять серво через джойстик . Проблема: серво работает некоторое время, а потом резко перестает. Начинает работать только после отключения питания или вообще не работает. В чем может быть проблема?
C++:
ПУЛЬТ:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define led 3
RF24 radio(9, 10); // CE, CSN
const byte addresses[][6] = {"00001", "00002"};
boolean buttonState = 0;
void setup() {
  pinMode(12, OUTPUT);
  radio.begin();
  radio.openWritingPipe(addresses[1]); // 00002
  radio.openReadingPipe(1, addresses[0]); // 00001
  radio.setPALevel(RF24_PA_MIN);
  delay(3000);
}
void loop() {
  delay(10);
  radio.stopListening();
  int potValue = analogRead(A1);
  int angleValue = map(potValue, 0, 1023, 0, 180);
  radio.write(&angleValue, sizeof(angleValue));
  delay(10);
  radio.startListening();
  while (!radio.available());
  radio.read(&buttonState, sizeof(buttonState));
  if (buttonState == HIGH) {
    digitalWrite(led, HIGH);
  }
  else {
    digitalWrite(led, LOW);
  }
}
ПРИЕМНИК:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
#define button 2
RF24 radio(9, 10); // CE, CSN
const byte addresses[][6] = {"00001", "00002"};
Servo myServo;
boolean buttonState = 0;
void setup() {
  pinMode(button, INPUT);
  myServo.attach(7);
  radio.begin();
  radio.openWritingPipe(addresses[0]); // 00001
  radio.openReadingPipe(1, addresses[1]); // 00002
  radio.setPALevel(RF24_PA_MIN);
  delay(2000);
}
void loop() {
  delay(10);
  radio.startListening();
  if ( radio.available()) {
    while (radio.available()) {
      int angleV = 0;
      radio.read(&angleV, sizeof(angleV));
      myServo.write(angleV);
    }
    delay(10);
    radio.stopListening();
    buttonState = digitalRead(button);
    radio.write(&buttonState, sizeof(buttonState));
  }
}
 
Изменено:

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
L298N управляет щёточными двигателями (ну или шаговыми в полуручном режиме). Как они могут заменить сервопривод?
 

bort707

★★★★★★✩
21 Сен 2020
3,066
915
Криво написано.
сочетание строк 49 и 111 вводят ваши приемники в клинч :) - то есть ситуацию, когда оба приемника зависают, взаимно ожидая сообщения друг от друга.
Никогда не надо ставить жестких условий. что новое сообщение посылается только в ответ на посылку с другой стороны.. Иногда сообщения теряются - и тогда такие условия завесят программу. что у вас, видимо, и приоисходит.