Не получается сделать управление двигателями с ИК-порт пульта
- Войдите на сайт для отправки комментариев
Вс, 31/01/2021 - 14:08
Считал коды кнопок на пульте по образцу, но как только включаю двигатели, коды кнопок начинают случайным образом меняться. Пример нажатия одной кнопки (код постоянно меняется):
6AA81940
DE8F1CBB
917F59F4
FFFFFFFF
4537EFEB
7C4BF8B1
683B9927
FFFFFFFF
12BD2068
65A13BBF
4AB0F7B5
Не могу понять в чем дело:
#include <Servo.h> //#include <NewPing.h> #include "IRremote.h" #define MOTOR_R 2 #define SPEED_R 3 #define MOTOR_L 4 #define SPEED_L 5 int key; IRrecv irrecv(13); // указываем вывод, к которому подключен приемник decode_results results; void setup() //This block happens once on startup { pinMode(MOTOR_R, OUTPUT); pinMode(SPEED_R, OUTPUT); pinMode(MOTOR_L, OUTPUT); pinMode(SPEED_L, OUTPUT); Serial.begin(9600); // выставляем скорость COM порта irrecv.enableIRIn(); // запускаем прием } void loop() //his block repeats itself while the Arduino is turned on { if (irrecv.decode(&results)) { Serial.println( results.value, HEX); // печатаем данные if (results.value == 16718055) key = 1; else if (results.value == 16730805) key = 2; else if (results.value == 16716015) key = 3; else if (results.value == 16734885) key = 4; else if (results.value == 16726215) { key = 0; } if (results.value == 4294967295) { key = key; } irrecv.resume();// Receive the next value } else key = 0; if (key == 1){ moveForward(); } else if (key == 2){ moveBackward(); } else if (key == 3){ moveLeft(); } else if (key == 4){ moveRight(); } /* else if (key == 0) { moveStop(); } */ } void moveForward() //This function tells the robot to go forward { Serial.println(""); Serial.println("Moving forward"); //digitalWrite(LeftWotorBackward, LOW); digitalWrite(MOTOR_R, HIGH); digitalWrite(SPEED_R, HIGH); digitalWrite( MOTOR_L, HIGH); digitalWrite(SPEED_L, HIGH); } void moveBackward() //This function tells the robot to move backward { Serial.println(""); Serial. println("Moving backward"); digitalWrite(MOTOR_R, LOW); digitalWrite(SPEED_R, HIGH); digitalWrite(MOTOR_L, LOW); digitalWrite(SPEED_L, HIGH); } void moveLeft() //This function tells the robot to turn left { Serial. println(""); Serial.println("Moving left"); digitalWrite(MOTOR_R, HIGH); digitalWrite(SPEED_R, HIGH); digitalWrite( MOTOR_L, LOW); digitalWrite(SPEED_L, HIGH); } void moveRight() //This function tells the robot to turn right { Serial.println(""); Serial. println("Moving right"); digitalWrite(MOTOR_R, LOW); digitalWrite(SPEED_R, HIGH); digitalWrite(MOTOR_L, HIGH); digitalWrite(SPEED_L, HIGH); } void moveStop() { Serial.println(""); Serial.println("Stopping"); digitalWrite(SPEED_R, LOW); digitalWrite(SPEED_L, LOW); }
Это от бездумного использования библиотек.
Объясняю.
Аппаратных таймера на ардуино всего 3.
Один занят отсчетом времени.
Остаётся выяснить на каком из оставшихся висят эти библиотеки.
Ну и самая малость, переписать одну из них под незанятый, либо отказаться от одной из библиотек.
Серва и без библиотеки , через analogWrite(), неплохо работает.
Только опять же нужно порты выбрать не завязанные к тому же таймеру, что и ик-приемник
Считал коды кнопок на пульте по образцу, но как только включаю двигатели, коды кнопок начинают случайным образом меняться. Пример нажатия одной кнопки (код постоянно меняется):
Не могу понять в чем дело:
Не понял, у Вас есть какой-то вопрос? Или Вы просто решили горем поделиться?
Если первое, то Вы забыли его задать, а если второе, то, что ж, "принято к сведению".
Спасибо ответ. Но, к сожалению, я так и ничего не понял. Попробовал заменить все на analogWrite(), убрать лишнюю библиотеку, но все тоже самое
Из-за чего это происходит, как сделать так, чтобы все работало?
Из-за чего это происходит, как сделать так, чтобы все работало?
Очевидно, правильно написать программу и правильно собрать схему.
А что, в этом есть какие-то сомнения?
Но, к сожалению, я так и ничего не понял.
Отключите двигателям питание. IR заработал удовлетворительно? Значит были наводки и "программа" не причем.
Без двигателей все работает, как только хотя бы один подключаешь - все коды с пульта сбиваются
Значит собрали неудачно.
Спасибо всем, исправил. Работает. Теперь надо выяснить, почему под нагрузкой (например, когда машинка буксует) не получается переключить направление движения...(