Программирование начал осваивать только пару месяцев назад - по этому сильно не пинайте (до этого не где не учил и мог только чужую прошивку использовать)
В общем к сути. Проект по радиоуправляемому танку, написал код а добиться его полноценной работоспособности не могу.
Вот это у меня в передатчике
Спойлер
#include <SPI.h>#include <nRF24L01.h>
#include <RF24.h>
int msg[2];
const int joystick_L = A0;
const int joystick_R = A1;
const uint64_t pipe = 0xF0F1F2F3F4LL;
RF24 radio(9, 10);
void setup(){
pinMode(joystick_L, INPUT);
pinMode(joystick_R, INPUT);
Serial.begin(9600);
radio.begin();
delay(2);
radio.setChannel(9); // канал (0-127)
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_HIGH);
radio.openWritingPipe(pipe);
}
void loop(){
int L = analogRead(joystick_L);
msg[0] = map(L, 0, 1023, 0, 510);
int R = analogRead(joystick_R);
msg[1] = map(R, 0, 1023, 0, 510);
radio.write(&msg, sizeof(msg));
Serial.println(msg[1]);
Serial.print("msg[1]: ");
Serial.println(msg[0]);
Serial.print("msg[0]: ");
}
Спойлер
#include <SPI.h>#include <nRF24L01.h>
#include <RF24.h>
const uint64_t pipe = 0xF0F1F2F3F4LL;
RF24 radio(9, 10);
int msg[2];
const int Motor_R1 = 3;
const int Motor_R2 = 4;
const int Motor_L1 = 7;
const int Motor_L2 = 8;
const int ENL = 5;
const int ENR = 6;
int R;
int R1;
int L;
int L1;
void setup(){
Serial.begin(9600);
pinMode(Motor_R1, OUTPUT);
pinMode(Motor_R2, OUTPUT);
pinMode(Motor_L1, OUTPUT);
pinMode(Motor_L2, OUTPUT);
pinMode(ENR, OUTPUT);
pinMode(ENL, OUTPUT);
delay(50);
radio.begin();
radio.setChannel(9);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_HIGH);
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop() {
if (radio.available()){
radio.read(&msg, sizeof(msg)); }
Serial.println(msg[0]);
Serial.print("msg[0]: ");
Serial.println(msg[1]);
Serial.print("msg[1]: ");
if (msg[1] < 255) {
R = map(msg[1], 254, 0, 1, 255);
digitalWrite(Motor_R1, LOW);
digitalWrite(Motor_R2, HIGH);
analogWrite(ENR, R);}
if (msg[1] > 255) {
R1 = map(msg[1], 256, 510, 1, 255);
digitalWrite(Motor_R1, HIGH);
digitalWrite(Motor_R2, LOW);
analogWrite(ENR, R1);}
if (msg[0] < 255) {
L = map(msg[0], 254, 0, 1, 255);
digitalWrite(Motor_L1, LOW);
digitalWrite(Motor_L2, HIGH);
analogWrite(ENL, L);}
if (msg[0] > 255) {
L1 = map(msg[0], 256, 510, 1, 255);
digitalWrite(Motor_L1, HIGH);
digitalWrite(Motor_L2, LOW);
analogWrite(ENL, L1);}
delay(50);
}
Но не работает только один нюанс - реверс двигателей срабатывает только если оба значения msg[0] и msg[1] больше 255
а вот если только одно значение больше - двигатель крут вопреки команде, хотя при этом шим отрабатывает как и задумывалось.
Уже третий день пытаюсь понять где я допустил ошибку, ведь если при условии msg[0] > 255 исполняется команда подать шим то почему игнорируются команды digitalWrite.
Мозги закипели уже к середине второго дня

