Всем привет, делаю код для машинки на пульту arduino + nrf24l01 + l298n + джойстик. Сервопривод работает как нужно. А вот двигатель крутиться только в одну сторону, и только тогда когда джойстик в низ, когда джойстик вверх, то не крутиться вообще. Подскажите, что в коде не правильно. Передатчик. Код (Text): #include <SPI.h> #include "RF24.h" RF24 radio(9,10); const uint64_t pipe = 0xE8E8F0F0E1LL; int msg[1]; int potpin_1 = A0; int val_1; int potpin_2 = A1; int val_2; void setup(void){ radio.begin(); radio.openWritingPipe(pipe); } void loop() { val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1); val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 128, 255),msg[0] = val_2,radio.write(msg, 1); } Приемник. Код (Text): #include <Servo.h> #include <SPI.h> #include "RF24.h" Servo servo1; RF24 radio(9,10); const uint64_t pipe = 0xE8E8F0F0E1LL; int msg[1]; int data; int pos; // int Y; // X axis = left/right int fspeed; // forward speed int bspeed; // backward speed const int in1 = 2; // direction pin 1 const int in2 = 4; // direction pin 2 const int ena = 5; // PWM pin to change speed void setup() { pinMode(in1, OUTPUT); // connection to L298n pinMode(in2, OUTPUT); // connection to L298n pinMode(ena, OUTPUT); // connection to L298n servo1.attach(3); delay(50); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening(); } void loop() { if (radio.available())radio.read(msg, 1); if (msg[0] <127 && msg[0] >-1)data = msg[0], pos = map(data, 0, 126, 7, 177),servo1.write(pos); if (msg[0] >129 && msg[0] <189)data = msg[0], fspeed = map(data, 189, 129, 0, 255); forward(fspeed); if (msg[0] >201 && msg[0] <255)data = msg[0], bspeed = map(data, 255, 201, 0, 255); backward(bspeed); if (msg[0] >190 && msg[0] <200)data = msg[0], stop(); } void stop() { analogWrite(ena, 0); digitalWrite(in1, LOW); digitalWrite(in2, LOW); } void forward(int fspeed) { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(ena, fspeed); } void backward(int bspeed) { digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(ena, bspeed); }
1. Не пишите операторы через запятую. Одно выражение = одна строка. Если не хотите писать кучу строк, то вместо: Код (Text): val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1); пишите: Код (Text): msg[0] = map(analogRead(potpin_1), 0, 1023, 0, 127); radio.write(msg, 1); 2. Код (Text): if (radio.available()) radio.read(msg, 1); Даже если нет новых данных, код будет выполняться так, как будто они есть. Имейте это ввиду. 3. В передатчике вставьте отладочный вывод передаваемых данных, а в приемнике - принимаемых. Сравните логи.