ИК приймач
- Войдите на сайт для отправки комментариев
Ср, 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; }