ИК приймач

Нет ответов
fenix
Offline
Зарегистрирован: 05.02.2014
Доброго дня, вибачайте за неакуратний код.
Зп допомогою ик пульта потрібно керувати мотором. Використовую ик датчик vs1838b драйвер мотору l298n.
Без ик датчика мотор працює в діапазоні 106-255. При підключенні ик датчика стартує тіки на 255
const int Trig = 9; 
const int Echo = 8; 
const int ledPin = 13;
int val;
int LED = 13;
int IN3 = 5;  
int IN4 = 4;
int ENB = 3;
int nap;
int shvud1=120;
int poch=1;
int stop;
int zmina;

#include <IRremote.h> // eto skachannaya biblioteka
int RECV_PIN = 10; //vkhod IK priyemnika
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()

{
Serial.begin(9600);
pinMode(Trig, OUTPUT); 
pinMode(Echo, INPUT); 
pinMode(LED, OUTPUT);
 pinMode (ENB, OUTPUT); 
 pinMode (IN3, OUTPUT);
 pinMode (IN4, OUTPUT);
 pinMode(ledPin, OUTPUT); 
  
 int ser_read();
irrecv.enableIRIn(); 
}



unsigned int time_us=0;

unsigned int distance_sm=0;

void loop()

{
if (irrecv.decode(&results)) {
delay(30); // zaderzhka pered vypolneniyem opredeleniya knopok , chtoby izbezhat? bystroye dvoynoye nazhatiye
irrecv.resume();
Serial.println(results.value,HEX);
  
}
if (poch==1){  

nap=0;
zmina=0;
poch=0;
stop=0;
shvud1=120;
 
  digitalWrite (IN3, HIGH);
  digitalWrite (IN4, LOW); 
   digitalWrite(13,HIGH);
  delay(200);
    digitalWrite(13,LOW);
}





ser_read();

digitalWrite(Trig, HIGH); // Подаем сигнал на выход микроконтроллера 
delayMicroseconds(10); // Удерживаем 10 микросекунд 
digitalWrite(Trig, LOW); // Затем убираем 
time_us=pulseIn(Echo, HIGH); // Замеряем длину импульса 
distance_sm=time_us/58;
if (distance_sm<10 )
{
  stop=1;
  digitalWrite(ledPin, 1); // Зажигаем светодиод 
}



if (distance_sm<40 && distance_sm>30 )
{
  stop=0;
  digitalWrite(ledPin, 1); // Зажигаем светодиод 
}


if(nap!=zmina){
  
  analogWrite(ENB,0);
  delay(1000);
if (nap==0)
{
  digitalWrite (IN3, HIGH);
  digitalWrite (IN4, LOW); 
  
}
if (nap==1)
{
  digitalWrite (IN3, LOW);
  digitalWrite (IN4, HIGH); 
  
}
}

if(stop==1)
{
 analogWrite(ENB,0);
}
if(stop==0)
{

  if(shvud1>255){
    shvud1=255;
  }
  if(shvud1<106)
  {
     shvud1=106;
  }

  analogWrite(ENB,shvud1);
delay(300);
  
}
   
zmina=nap;

}


 int ser_read()
 {
   if (Serial.available())
{
val = Serial.read();
switch(val){
  case 'W':
  shvud1=shvud1+10;
  break;
   case 'S':
  shvud1=shvud1-10;
  break;
  case'E':
  stop=1;
  break;
    case'Q':
  stop=0;
  break;
  case 'A':
  nap=1;
  break;
    case 'D':
  nap=0;
  break;
    
}
}   
return 0;   
 }