Не получается сделать управление двигателями с ИК-порт пульта
- Войдите на сайт для отправки комментариев
Вс, 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 заработал удовлетворительно? Значит были наводки и "программа" не причем.
Без двигателей все работает, как только хотя бы один подключаешь - все коды с пульта сбиваются
Значит собрали неудачно.
Спасибо всем, исправил. Работает. Теперь надо выяснить, почему под нагрузкой (например, когда машинка буксует) не получается переключить направление движения...(