Smart Car Kit - вопрос по коду

YasnoSolnishko
Offline
Зарегистрирован: 25.08.2019

Господа, купил себе сей набор. Собрал машину, которая на 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   
  } 
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

YasnoSolnishko пишет:

сей набор. 

Какой "сей"?

YasnoSolnishko пишет:

Собрал не так как в инструкции, а пины раскинул так как хотел 

Какая была схема в инструкции? Какую схему собрали Вы? Каков был оригинальный скетч?

Хрустальные шары тут запрещены, так что рисуйте, не ленитесь.

YasnoSolnishko
Offline
Зарегистрирован: 25.08.2019

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

Схема сбора, которая в мануале. Честно скажу, что ее не тестил, захотел свою распиновку. С тех пор пытаюсь ее наладить.

YasnoSolnishko
Offline
Зарегистрирован: 25.08.2019

Исходный код

#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   
  } 
}

 

YasnoSolnishko
Offline
Зарегистрирован: 25.08.2019

Моя схема

Перерисовать не смогу...

пины на Ардуине и соответственно на 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

}

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Я не понял - если все работает, в чем вопрос тогда? И на схеме нагляднее - на слух нифига не понятно в чем разница подключений . Нарисуй хоть в тетради ручкой и сфотай. 

YasnoSolnishko
Offline
Зарегистрирован: 25.08.2019

BOOM пишет:

Я не понял - если все работает, в чем вопрос тогда? И на схеме нагляднее - на слух нифига не понятно в чем разница подключений . Нарисуй хоть в тетради ручкой и сфотай. 

Работает только когда простой код: ехать вперед, ехать назад итд.

В первом посте описание проблемы. Там код для управления робота с пульта кправления, он не работает.

Ок. Схему позже нарисую

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Если в Вашем подключении моторы без ик управления работают нормально, то значит проблема с ик приёмником. Проверяйте, правильно ли он подключен - на те ли выводы подано питание, и к 12 ли пину ардуино подключен сигнал. Добавьте в скетч вывод полученного значения в монитор - получает ли Ваш приёмник что-то, и если получает, сравните полученное с ожидаемым (то, что в начале скетча в дефайнах).

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

мда.с таким кодом не берут в программисты.