Собираю машинку на радиоуправлении на - 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);
}
}