Задать вопрос
@ivan12_12_19

Не работает машинка на радиоуправлении, что не так?

Собираю машинку на радиоуправлении на - arduino nano.
К nano подсоединен драйвер моторов l298n по схеме - Ena - d2, int1- d3, int2 - d4, int3 - d5, int4- d6, enb - d7, модуль nrf24l01 - ce - d8, csn -d9, sck - d13, mo - d11, mi - d12. К пульту управления на такой же нано, подключен модуль nrf24l01 - ce - d8, csn -d9, sck - d13, mo - d11, mi - d12 и джойстик vrx -a4, vry - a3. Проблема следующая, с данным кодом, колеса при подачи питания сами крутятся.

Код для пульта управления (Arduino с джойстиком):
#include <SPI.h>

#include <RF24.h>

// Настройка пина для NRF24L01

#define CE_PIN 8

#define CSN_PIN 9

RF24 radio(CE_PIN, CSN_PIN);

// Пины джойстика

#define VRX A4

#define VRY A3

// Настройки адреса для передачи данных

const byte address[6] = "00001";

void setup() {

    Serial.begin(9600);

    radio.begin();

    radio.openWritingPipe(address);

    radio.setPALevel(RF24_PA_HIGH);

    radio.stopListening();

}

void loop() {

    int xValue = analogRead(VRX);

    int yValue = analogRead(VRY);

    // Отправка данных

    int joystickData[2] = {xValue, yValue};

    radio.write(&joystickData, sizeof(joystickData));

    delay(100); // Задержка для стабильности передачи

}


Код для принимающего устройства (Arduino с моторчиками):
#include <SPI.h>

#include <RF24.h>

// Настройка пина для NRF24L01

#define CE_PIN 8

#define CSN_PIN 9

RF24 radio(CE_PIN, CSN_PIN);

// Пины для управления моторами

#define ENA 2

#define IN1 3

#define IN2 4

#define IN3 5

#define IN4 6

#define ENB 7

// Настройки адреса для приема данных

const byte address[6] = "00001";

void setup() {

    Serial.begin(9600);

    radio.begin();

    radio.openReadingPipe(1, address);

    radio.setPALevel(RF24_PA_HIGH);

    radio.startListening();

    // Инициализация пинов моторов

    pinMode(ENA, OUTPUT);

    pinMode(IN1, OUTPUT);

    pinMode(IN2, OUTPUT);

    pinMode(ENB, OUTPUT);

    pinMode(IN3, OUTPUT);

    pinMode(IN4, OUTPUT);

}

void loop() {

    if (radio.available()) {

        int joystickData[2];

radio.read(&joystickData, sizeof(joystickData));

        int xValue = joystickData[0];

        int yValue = joystickData[1];

        // Управление моторами на основе значений джойстика

        controlMotors(xValue, yValue);

    }

}

void controlMotors(int x, int y) {

    // Преобразование значений джойстика в управление моторами

    int motorSpeedA = map(y, 0, 1023, -255, 255);

    int motorSpeedB = map(x, 0, 1023, -255, 255);

    // Управление мотором A

    if (motorSpeedA > 0) {

        digitalWrite(IN1, HIGH);

        digitalWrite(IN2, LOW);

        analogWrite(ENA, motorSpeedA);

    } else if (motorSpeedA < 0) {

        digitalWrite(IN1, LOW);

        digitalWrite(IN2, HIGH);

        analogWrite(ENA, -motorSpeedA);

    } else {

        digitalWrite(IN1, LOW);

        digitalWrite(IN2, LOW);

        analogWrite(ENA, 0);

    }

    // Управление мотором B

    if (motorSpeedB > 0) {

        digitalWrite(IN3, HIGH);

        digitalWrite(IN4, LOW);

        analogWrite(ENB, motorSpeedB);

    } else if (motorSpeedB < 0) {

        digitalWrite(IN3, LOW);

        digitalWrite(IN4, HIGH);

        analogWrite(ENB, -motorSpeedB);

    } else {

        digitalWrite(IN3, LOW);

        digitalWrite(IN4, LOW);

        analogWrite(ENB, 0);

    }

}
  • Вопрос задан
  • 168 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@dim5x
ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
Явным образом устанавливаем состояние моторов в void setup():
// Остановка моторов при запуске
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  analogWrite(ENA, 0);
  analogWrite(ENB, 0);


и если нет сигнала - останавливаем моторы в loop():
void loop() {
  if (radio.available()) {
    int joystickData[2] = {0}; 
    radio.read(&joystickData, sizeof(joystickData));
    controlMotors(joystickData[0], joystickData[1]);
  } else {
    controlMotors(512, 512);  // Нейтральное положение джойстика
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы