Помогите дописать код

Тема в разделе "Arduino & Shields", создана пользователем arduino123, 29 сен 2021.

  1. arduino123

    arduino123 Нуб

    Есть две ардунки с nrf 24 . Один модуль на пульте с джойстиком , второй стоит с L298N. Проблема в том, что мотор не реагирует на джойстик. Помогите , пожалуйста разобраться...
    Код (C++):
    TX

    #include <SPI.h>
    #include "nRF24L01.h"
    #include "RF24.h"
    #define JOY1 A0
    #define JOY2 A1

    RF24 radio(9, 10);


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




    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() {
      Serial.println(analogRead(JOY2));

      transmit_data[0] = map(analogRead(JOY1), 0, 1023, 0, 180);
      transmit_data[1]=  map(analogRead(JOY2),0,1023,0,255);

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

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

    }


    RX


    #include <SPI.h>
    #include "nRF24L01.h"
    #include "RF24.h"
    #include <Servo.h>
    #define IN1 6
    #define IN2 7
    #define ENA 8

    RF24 radio(9, 10);
    byte recieved_data[3];
    int pwm;
    int motor;

    Servo myservo;

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

    void setup() {
    Serial.begin(9600);
    myservo.attach(2);
    motor = recieved_data[1];
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(ENA, OUTPUT);

      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]);
     
     
        valX = recieved_data[1];
     
     
     
     
        if(valX > 126 && valX < 130){
           digitalWrite(IN1, 0);
           digitalWrite(IN2, 0);
           analogWrite(ENA, 0 );}
        if(valX > 130) {
           valX = map(valX, 130, 255, 0, 255)
           digitalWrite(IN1, 1);
           digitalWrite(IN2, 0);
           analogWrite(ENA, valX );}  
        if(valX < 126) {
           valX = map(valX, 126, 0, 0, 255);
           digitalWrite(IN1, 0);
           digitalWrite(IN2, 1);
           analogWrite(ENA, valX ); }}}
    [/code]
     
  2. Asper Daffy

    Asper Daffy Иксперд

    В чём разобраться? Вопросы есть? Задавайте.
     
  3. arduino123

    arduino123 Нуб

    Вопрос такой: передатчик должен отправлять на приемник данные в виде 0,,,255? или 0,,,1023?
     
  4. arduino123

    arduino123 Нуб

    Просто такие же примеры смотрю у всех вместо
    Код (C++):
    if(valX > 126 && valX < 130){
           digitalWrite(IN1, 0);
           digitalWrite(IN2, 0);
           analogWrite(ENA, 0 );}
        if(valX > 130) {
           valX = map(valX, 130, 255, 0, 255)
           digitalWrite(IN1, 1);
           digitalWrite(IN2, 0);
           analogWrite(ENA, valX );}
        if(valX < 126) {
           valX = map(valX, 126, 0, 0, 255);
           digitalWrite(IN1, 0);
           digitalWrite(IN2, 1);
           analogWrite(ENA, valX );

    Код (C++):
    вот так:
    if(valX > 500 && valX < 530){
           digitalWrite(IN1, 0);
           digitalWrite(IN2, 0);
           analogWrite(ENA, 0 );}
        if(valX > 530) {
           valX = map(valX, 530, 1023, 0, 255)
           digitalWrite(IN1, 1);
           digitalWrite(IN2, 0);
           analogWrite(ENA, valX );}
        if(valX < 500) {
           valX = map(valX, 500, 0, 0, 255);
           digitalWrite(IN1, 0);
           digitalWrite(IN2, 1);
           analogWrite(ENA, valX );
     
  5. b707

    b707 Гуру

    arduino123 - вы сменили ник - думаете я вас не узнаю?

    Но мне не жалко - я готов и третий раз подсказать. в чем у вас проблема.
    Ответ тот же самый. что и месяц назад - вы переменную motor один раз приравняли первому элементу массива recieved_data - думаете, она у вас теперь при приеме данных с джойстика сама будет обновляться?
     
  6. b707

    b707 Гуру

    2 недели назад я уже отвечал на этот вопрос на форуме ардуино.ру
    http://arduino.ru/forum/programmirovanie/pomogite-razobratsya-11
    Тогда же и на форуме Гайвера (приводить ссылку не буду, лень)

    А до этого вы задавали этот же вопрос в марте, не надоело?

    Если вам не дается программирование - найдите уже какого-нить студента, дайте ему 500р и пусть допишет вам этот код
     
    ANTISPAM, Andrey12, Feofan и ещё 1-му нравится это.