Skip to content

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

}