/hardware/

Android, Servo i Buzzer

2012-02-13 23:30:32

``` //serwo

include <Servo.h>

//serwo Servo myservo; //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

//pin pod który jest podłączony czujnik int SEN1 = 8;

//serwo int SERVO = 11; //serwo int pos = 0;

int BUZZ = 13;

//funkcje sterujące silnikami &#8211; 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); } }

//dla drugiego silnika identycznie, tylko IN1 i EN1 zamienione są na IN2 i EN2

void setup(){ int i; for(i=4;i<=7;i++){ //Dla Arduino Motor Shield pinMode(i, OUTPUT); //ustaw piny 4,5,6,7 jako wyjścia } pinMode(SEN1,INPUT); //pin pod który podłączono czujnik jako wejście //servo myservo.attach(SERVO); myservo.write(90); Serial.begin(9600); pinMode(BUZZ, OUTPUT); }

void loop() { boolean inrange; //aktywnym stanem czujnika IR jest 0 inrange = !digitalRead(SEN1); if(in_range) { buzz(2500, 100); buzz(2000, 50); buzz(2500, 100); //jeśli wykryto przeszkodę Motor1(0,F); Motor2(0,F); int ii = wolna(); //Serial.println(ii); if(ii == 2){ //Serial.println('RF'); Motor1(255,R); Motor2(255,F); delay(1000); }else if(ii == 1){ Serial.println('FR'); Motor1(255,F); Motor2(255,R); delay(1000); }else{ Serial.println('FR'); Motor1(255,F); Motor2(255,R); delay(1000); } // }else { //jeśli nie widać przeszkody jedź prosto Motor1(255,F); Motor2(255,F); } }

int wolna(){ int _return = 0;

myservo.attach(SERVO); myservo.write(135); delay(500); if(!digitalRead(SEN1)) {_return = 1;} myservo.detach(); delay(500);

myservo.attach(SERVO); myservo.write(45); delay(500); if(!digitalRead(SEN1)) {_return = 2;} myservo.detach(); delay(500);

myservo.attach(SERVO); myservo.write(90); delay(500); myservo.detach();

return _return; }

void buzz(long frequency, long length) { long delayValue = 1000000/frequency/2; // calculate the delay value between transitions //// 1 second's worth of microseconds, divided by the frequency, then split in half since //// there are two phases to each cycle long numCycles = frequency * length/ 1000; // calculate the number of cycles for proper timing //// multiply frequency, which is really cycles per second, by the number of seconds to //// get the total number of cycles to produce for (long i=0; i < numCycles; i++){ // for the calculated length of time... digitalWrite(BUZZ,HIGH); // write the buzzer pin high to push out the diaphram delayMicroseconds(delayValue); // wait for the calculated delay value digitalWrite(BUZZ,LOW); // write the buzzer pin low to pull back the diaphram delayMicroseconds(delayValue); // wait againf or the calculated delay value } }```