Arduino wykorzystanie pilota
2012-02-07 00:26:54
#include "IRremote.h"
int receiver = 9; // pin pod który podlaczona jest dioda IR
//określamy, które piny sterują silnikami
//piny sterujące prędkością silników
int EN1 = 6;
int EN2 = 5;
//piny sterujące kierunkiem jazdy
int IN1 = 7;
int IN2 = 4;
int R = 1; //jazda do przodu
int F = 0; //jazda do tyłu
int speakerOut = 11;
//pin pod który jest podłączony czujnik
int SEN1 = 8;
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
//funkcje sterujące silnikami – pwm określa prędkość, reverse kierunek
void Motor1(int pwm, boolean reverse) {
analogWrite(EN1,pwm); //ustawia wypełnienie PWM: 0 - silnik zatrzymany, 255 - pełna prędkość
if(reverse) {
digitalWrite(IN1,HIGH);
}else{
digitalWrite(IN1,LOW);
}
}
void Motor2(int pwm, boolean reverse) {
analogWrite(EN2,pwm); //ustawia wypełnienie PWM: 0 - silnik zatrzymany, 255 - pełna prędkość
if(reverse) {
digitalWrite(IN2,HIGH);
}else{
digitalWrite(IN2,LOW);
}
}
void beep(){
digitalWrite(speakerOut, HIGH);
delay(150);
digitalWrite(speakerOut, LOW);
}
void setup(){
//Serial.begin(9600); // for serial monitor output
irrecv.enableIRIn(); // Start the receiver
pinMode(IN2, OUTPUT);
pinMode(EN2, OUTPUT);
pinMode(EN1, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(SEN1,INPUT); //pin pod który podłączono czujnik jako wejście
}
int kierunek = 4;
//o - do przodu
//1 - do tylu
//2 - lewa
//3 - prawa
//4 - czelak
//stan 1 kiedy ma ominac przeszkode
int stan = 1;
void loop(){
if (irrecv.decode(&results)){
beep();
//Serial.println(results.value, HEX);
if(results.value == 0xC1B750AF){ kierunek=0; }
if(results.value == 0xC1B7A05F){ kierunek=1; }
if(results.value == 0xC1B70FF0){ kierunek=2; }
if(results.value == 0xC1B73CC3){ kierunek=3; }
if(results.value == 0xC1B70AF5){ kierunek=4; }
irrecv.resume(); // receive the next value
}
//zmianna wykrywajaca przeszkodę
boolean in_range;
in_range = !digitalRead(SEN1);
//jeśli wykryto przeszkodę
if(in_range){
Motor1(255,R);
Motor2(255,R);
stan=0;
}else{
if(stan == 0){
Motor1(255,R); //skręcaj
Motor2(255,F);
delay(500);//przez sekundę
stan = 1;
}
switch(kierunek){
case 0:
Motor1(255,F);
Motor2(255,F);
break;
case 1:
Motor1(255,R);
Motor2(255,R);
break;
case 2:
Motor1(255,F);
Motor2(255,R);
break;
case 3:
Motor1(255,R);
Motor2(255,F);
break;
case 4:
Motor1(0,F);
Motor2(0,F);
break;
}
}
}