Smart Car Kit - вопрос по коду
- Войдите на сайт для отправки комментариев
Вс, 25/08/2019 - 15:23
Господа, купил себе сей набор. Собрал машину, которая на IR управлении работает. Собрал не так как в инструкции, а пины раскинул так как хотел и все испортилось. Правил уже код и так и эдак, не понимаю, что с ним не так.
На выходе крутятся только колеса левой стороны, правая не крутится.
Подаешь просто сигнал на пины, все движки работают, а в коде, который с IR пультом - крутится только левая сторона.
Помогите пожалуйста. Что с кодом не так?
#include <IRremote.h> // вариант переделанный на пины 2,3,4,5,6,7
int RECV_PIN = 12; // IN1=2; IN2=4; IN3=6; IN4=7; ENA=3; ENB=5;
IRrecv irrecv(RECV_PIN);
decode_results results;
#define IR_Go 0x00ff629d
#define IR_Back 0x00ffa857
#define IR_Left 0x00ff22dd
#define IR_Right 0x00ffc23d
#define IR_Stop 0x00ff02fd
#define IR_ESC 0x00ff52ad
int ENA=3; //adjusting speed
int ENB=5; //adjusting speed //
int IN2=4; // defining pin7 left rear
int IN1=2; // defining pin6 left front
int IN4=7; // defining pin4 right rear
int IN3=6; // defining pin2 right front
unsigned char Lpwm_val = 200;
unsigned char Rpwm_val = 200;
int Car_state=0;
void M_Control_IO_config(void)
{
pinMode(IN2,OUTPUT); // pin7
pinMode(IN1,OUTPUT); // pin6
pinMode(IN4,OUTPUT); // pin4
pinMode(IN3,OUTPUT); // pin2
pinMode(ENA,OUTPUT); // pin3 (PWM)
pinMode(ENB,OUTPUT); // pin5 (PWM)
}
void Set_Speed(unsigned char Left,unsigned char Right)
{
analogWrite(ENB,Left);
analogWrite(ENA,Right);
}
void advance() // going forward
{
digitalWrite(IN4,LOW); // making motor move towards right rear
digitalWrite(IN3,HIGH);
digitalWrite(IN2,LOW); // making motor move towards left rear
digitalWrite(IN1,HIGH);
Car_state = 1;
}
void turnR() //turning right(dual wheel)
{
digitalWrite(IN4,LOW); //making motor move towards right rear
digitalWrite(IN3,HIGH);
digitalWrite(IN2,HIGH);
digitalWrite(IN1,LOW); //making motor move towards left front
Car_state = 4;
}
void turnL() //turning left(dual wheel)
{
digitalWrite(IN4,HIGH);
digitalWrite(IN3,LOW ); //making motor move towards right front
digitalWrite(IN2,LOW); //making motor move towards left rear
digitalWrite(IN1,HIGH);
Car_state = 3;
}
void stopp() //stop
{
digitalWrite(IN4,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN2,HIGH);
digitalWrite(IN1,HIGH);
Car_state = 5;
}
void back() //back up
{
digitalWrite(IN4,HIGH); //making motor move towards right rear
digitalWrite(IN3,LOW);
digitalWrite(IN2,HIGH); //making motor move towards left rear
digitalWrite(IN1,LOW);
Car_state = 2;
}
void IR_Control(void)
{
unsigned long Key;
while(Key!=IR_ESC)
{
if(irrecv.decode(&results)) //judging if serial port receives data
{
Key = results.value;
switch(Key)
{
case IR_Go:advance(); //forward
break;
case IR_Back: back(); //back
break;
case IR_Left:turnL(); //Left
break;
case IR_Right:turnR(); //Right
break;
case IR_Stop:stopp(); //stop
break;
default:
break;
}
irrecv.resume(); // Receive the next value
}
}
stopp();
}
void setup()
{
M_Control_IO_config();
Set_Speed(Lpwm_val,Rpwm_val);
irrecv.enableIRIn(); // Start the receiver
Serial.begin(9600); //initializing serial port, Bluetooth used as serial port, setting baud ratio at 9600
stopp();
}
void loop()
{
if (irrecv.decode(&results)) {
if(results.value == IR_Stop )IR_Control();
irrecv.resume(); // Receive the next value
}
}
сей набор.
Какой "сей"?
Собрал не так как в инструкции, а пины раскинул так как хотел
Какая была схема в инструкции? Какую схему собрали Вы? Каков был оригинальный скетч?
Хрустальные шары тут запрещены, так что рисуйте, не ленитесь.
1. Набор
https://ru.aliexpress.com/item/32879857483.html?spm=a2g0s.9042311.0.0.274233edRxnE5U
2. Мануал
https://drive.google.com/file/d/1WyxGwQC6I_8SzjpixWWoVntEHE9ungMg/view?usp=sharing
3. Схема соединения Ардуины и сенсор шилда
https://drive.google.com/file/d/1LzT2f4A0vijz35W5lq6I3IBh7cL3h-Y1/view?usp=sharing
Схема сбора, которая в мануале. Честно скажу, что ее не тестил, захотел свою распиновку. С тех пор пытаюсь ее наладить.
Исходный код
#include <IRremote.h> int RECV_PIN = 12; IRrecv irrecv(RECV_PIN); decode_results results; #define IR_Go 0x00ff629d #define IR_Back 0x00ffa857 #define IR_Left 0x00ff22dd #define IR_Right 0x00ffc23d #define IR_Stop 0x00ff02fd #define IR_ESC 0x00ff52ad #define Lpwm_pin 5 //adjusting speed #define Rpwm_pin 10 //adjusting speed // int pinLB=2; // defining pin2 left rear int pinLF=4; // defining pin4 left front int pinRB=7; // defining pin7 right rear int pinRF=8; // defining pin8 right front unsigned char Lpwm_val =200; unsigned char Rpwm_val = 200; int Car_state=0; void M_Control_IO_config(void) { pinMode(pinLB,OUTPUT); // pin2 pinMode(pinLF,OUTPUT); // pin4 pinMode(pinRB,OUTPUT); // pin7 pinMode(pinRF,OUTPUT); // pin8 pinMode(Lpwm_pin,OUTPUT); // pin11 (PWM) pinMode(Rpwm_pin,OUTPUT); // pin10 (PWM) } void Set_Speed(unsigned char Left,unsigned char Right) { analogWrite(Lpwm_pin,Left); analogWrite(Rpwm_pin,Right); } void advance() // going forward { digitalWrite(pinRB,LOW); // making motor move towards right rear digitalWrite(pinRF,HIGH); digitalWrite(pinLB,LOW); // making motor move towards left rear digitalWrite(pinLF,HIGH); Car_state = 1; } void turnR() //turning right(dual wheel) { digitalWrite(pinRB,LOW); //making motor move towards right rear digitalWrite(pinRF,HIGH); digitalWrite(pinLB,HIGH); digitalWrite(pinLF,LOW); //making motor move towards left front Car_state = 4; } void turnL() //turning left(dual wheel) { digitalWrite(pinRB,HIGH); digitalWrite(pinRF,LOW ); //making motor move towards right front digitalWrite(pinLB,LOW); //making motor move towards left rear digitalWrite(pinLF,HIGH); Car_state = 3; } void stopp() //stop { digitalWrite(pinRB,HIGH); digitalWrite(pinRF,HIGH); digitalWrite(pinLB,HIGH); digitalWrite(pinLF,HIGH); Car_state = 5; } void back() //back up { digitalWrite(pinRB,HIGH); //making motor move towards right rear digitalWrite(pinRF,LOW); digitalWrite(pinLB,HIGH); //making motor move towards left rear digitalWrite(pinLF,LOW); Car_state = 2; } void IR_Control(void) { unsigned long Key; while(Key!=IR_ESC) { if(irrecv.decode(&results)) //judging if serial port receives data { Key = results.value; switch(Key) { case IR_Go:advance(); //UP break; case IR_Back: back(); //back break; case IR_Left:turnL(); //Left break; case IR_Right:turnR(); //Righ break; case IR_Stop:stopp(); //stop break; default: break; } irrecv.resume(); // Receive the next value } } stopp(); } void setup() { M_Control_IO_config(); Set_Speed(Lpwm_val,Rpwm_val); irrecv.enableIRIn(); // Start the receiver Serial.begin(9600); //initializing serial port, Bluetooth used as serial port, setting baud ratio at 9600 stopp(); } void loop() { if (irrecv.decode(&results)) { if(results.value == IR_Stop )IR_Control(); irrecv.resume(); // Receive the next value } }Моя схема
Перерисовать не смогу...
пины на Ардуине и соответственно на L298N
ENA - 3
ENB - 5
IN1 - 2
IN2-4
IN3-6
IN4-7
Код по которому проверял сборку схемы. По данному коду все работает, сначала робот едет вперед, потом назад, потом поворачивается по часовой стрелке, потом против часовой.
int IN1=2; int IN2=4; int IN3=6; int IN4=7; int ENA=3; int ENB=5; void setup() { for (int i = 5; i <11; i ++) { pinMode(i, OUTPUT); } } void loop() { // forward digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); analogWrite(ENA,200); analogWrite(ENB,200); delay(2000); // pause for 2S analogWrite(ENA,0); analogWrite(ENB,0); delay(2000); // pause for 2S // backward digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); analogWrite(ENA,200); analogWrite(ENB,200); delay(2000); // pause for 2S analogWrite(ENA,0); analogWrite(ENB,0); delay(2000); // pause for 2S // rotate CW digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); analogWrite(ENA,200); digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); analogWrite(ENB,200); delay(1000); // pause for 1S analogWrite(ENA,0); analogWrite(ENB,0); delay(2000); // pause for 2S // rotate CCW digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); analogWrite(ENA,200); digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); analogWrite(ENB,200); delay(1000); // pause for 1S analogWrite(ENA,0); analogWrite(ENB,0); delay(2000); // pause for 2S }Я не понял - если все работает, в чем вопрос тогда? И на схеме нагляднее - на слух нифига не понятно в чем разница подключений . Нарисуй хоть в тетради ручкой и сфотай.
Я не понял - если все работает, в чем вопрос тогда? И на схеме нагляднее - на слух нифига не понятно в чем разница подключений . Нарисуй хоть в тетради ручкой и сфотай.
Работает только когда простой код: ехать вперед, ехать назад итд.
В первом посте описание проблемы. Там код для управления робота с пульта кправления, он не работает.
Ок. Схему позже нарисую
Если в Вашем подключении моторы без ик управления работают нормально, то значит проблема с ик приёмником. Проверяйте, правильно ли он подключен - на те ли выводы подано питание, и к 12 ли пину ардуино подключен сигнал. Добавьте в скетч вывод полученного значения в монитор - получает ли Ваш приёмник что-то, и если получает, сравните полученное с ожидаемым (то, что в начале скетча в дефайнах).
мда.с таким кодом не берут в программисты.