ИК приймач
- Войдите на сайт для отправки комментариев
Ср, 21/05/2014 - 00:42
Доброго дня, вибачайте за неакуратний код.
Зп допомогою ик пульта потрібно керувати мотором. Використовую ик датчик 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;
}