Помогите разобраться.

JesterKing

✩✩✩✩✩✩✩
22 Фев 2021
14
0
Заголовок темы должен отражать содержимое. Исправь или тема будет удалена
Привет. Дело такое: у меня две нрф24, соответственно одна стоит на пульте другая на приемнике. На пульте джойстик, на приёмнике L298N. Не могу сделать так, чтобы двигатель крутился в одну и в другую сторону. Помогите ,пожалуйста, направьте в нужную сторону
C++:
//ПРИЁМНИК

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <Servo.h>
int in1 = 3;
int in2 = 4;
int motor;
RF24 radio(9, 10);
byte recieved_data[3];


Servo myservo;

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};

void setup() {
Serial.begin(9600); /
myservo.attach(2);
 
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);

motor = recieved_data[1] ;
 
  radio.begin();
  radio.setAutoAck(1);         
  radio.setRetries(0, 15);   
  radio.enableAckPayload();   
  radio.setPayloadSize(32);     

  radio.openReadingPipe(1, address[0]);     
  radio.setChannel(0x60); 

  radio.setPALevel (RF24_PA_MAX);
  radio.setDataRate (RF24_250KBPS);
 
 

  radio.powerUp();
  radio.startListening();
}

void loop() {
Serial.println(recieved_data[1]);

  
byte pipeNo;
while ( radio.available(&pipeNo)) { 
    radio.read( &recieved_data, sizeof(recieved_data) );     
    myservo.write(recieved_data[0]); 
    if(motor < 126){
      digitalWrite(in1 , 1);
      digitalWrite(in2 , 0);}
    if(motor > 130){
      digitalWrite(in1 , 0);
      digitalWrite(in2 , 1);}
    if (motor > 126 && motor < 130){
      digitalWrite(in1 , 0);
      digitalWrite(in2 , 0);}
      }}

//ПЕРЕДАТЧИК
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

RF24 radio(9, 10);


byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб


byte potent = 0;
byte motor = 1;

byte transmit_data[3];
byte latest_data[3];
boolean flag;

void setup() {
  Serial.begin(9600);



  radio.begin();
  radio.setAutoAck(1);         
  radio.setRetries(0, 15);   
  radio.enableAckPayload();   
  radio.setPayloadSize(32);     

  radio.openWritingPipe(address[0]);   
  radio.setChannel(0x60); 

  radio.setPALevel (RF24_PA_MAX);
  radio.setDataRate (RF24_250KBPS);
 
 

  radio.powerUp();
  radio.stopListening();
}

void loop() {

 
  transmit_data[0] = map(analogRead(potent), 0, 1023, 0, 180);
  transmit_data[1]= map(analogRead(motor),0,1023,0,255);
 

  for (int i = 0; i < 3; i++) {
    if (transmit_data[i] != latest_data[i]) {
      flag = 1;
      latest_data[i] = transmit_data[i];
    }
  }

  if (flag == 1) {
    radio.powerUp();
    radio.write(&transmit_data, sizeof(transmit_data));
    flag = 0;
    radio.powerDown();
  }

}
 

bort707

★★★★★★✩
21 Сен 2020
3,056
910
@JesterKing, вы думаете если один раз в строке 25 приравляли переменную motor первому элементу received_data - оно потом при каждом приеме новых данных будет меняться само?:)
 

JesterKing

✩✩✩✩✩✩✩
22 Фев 2021
14
0
@bort707, Таким образом?
C++:
if( motor < 126){
      digitalWrite(in1 , 1);
      digitalWrite(in2 , 0);
      motor = recieved_data[1];}
 

bort707

★★★★★★✩
21 Сен 2020
3,056
910
А переменная в условии обновляться не будет?
Я не пойму, что мешает прочитать значение из массива сразу, как вы приняли пакет?
посмотрите, в конце концов, примеры к библиотеке Нрф24
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,407
976
58
Марий-Эл
Здесь есть всё.
Могут быть только порты управления исполнительного устройства немного попутаны.
Экспериментировал, обратно мог не вернуть.
 

Вложения