12-01-2016, 20:50
Witam
Witam mam taki problem zrobiłem sobie robocika który ma mieć 2 funkcje
1. Sterowanie poprzez bluetooth za pomocą i,j.k.l (działa)
2. Omijanie przeszkód (działa)
Problem polega na tym że po uruchomieniu mikrokontrolera chciałbym mieć wybór czy chcę sterować ręcznie czy ma chodzić z automatu i chciałbym też w każdej chwili móc przerwać automat i sterować ręcznie lub na odwrót
Robiłem switchem ale coś mi sie bzdury tworzyły.
Przesyłam swój kod
Jeśli ktoś z was mógłby mi pomóc albo jakoś naprowadzić to byłoby mi miło
Pozdrawiam
Michał
Witam mam taki problem zrobiłem sobie robocika który ma mieć 2 funkcje
1. Sterowanie poprzez bluetooth za pomocą i,j.k.l (działa)
2. Omijanie przeszkód (działa)
Problem polega na tym że po uruchomieniu mikrokontrolera chciałbym mieć wybór czy chcę sterować ręcznie czy ma chodzić z automatu i chciałbym też w każdej chwili móc przerwać automat i sterować ręcznie lub na odwrót
Robiłem switchem ale coś mi sie bzdury tworzyły.
Przesyłam swój kod
Kod:
#include <Servo.h>
//Zmienne dla sterownika
int M1_A = 12; //Silnik 1 kanał A
int M1_B = 10; //Silnik 1 kanał B
int M2_A = 4; //Silnik 2 kanał A
int M2_B = 2; //Silnik 2 kanał B
int przychodzacyBit = 0; //Zmienna odczytująca co przyszło na serialPort
int distF = 0; //dystans przód
int distR = 0; //dystans prawo
int distL = 0; //dystans lewo
int czas = 0;
int pingPin = 8;
int echoPin = 7;
int szybkosc = 255;
long duration;
int x;
int bezpOdleglosc = 35;
int odleglosc;
Servo servo;
int pos = 90; //Pozycja serva
void setup() {
Serial.begin(115200);
servo.attach(5); //Przypięcie serva do pinu 5;
servo.write(pos);
//Ustawienie pinów na wyjscie
pinMode(M1_A,OUTPUT);
pinMode(M1_B,OUTPUT);
pinMode(M2_A,OUTPUT);
pinMode(M2_B,OUTPUT);
M1_stop();
M2_stop();
delay(500);
}
void loop()
{
if (Serial.available() > 0)
{
przychodzacyBit = Serial.read();
}
}
void jazda()
{
if (przychodzacyBit == 105) //i, przod
{
M1_przod(szybkosc);
M2_przod(szybkosc);
delay(25);
}
// "j", lewo
else if (przychodzacyBit == 106)
{
M1_tyl(szybkosc);
M2_przod(szybkosc);
delay(25);
}
// l w prawo
else if (przychodzacyBit == 108)
{
M1_przod(szybkosc);
M2_tyl(szybkosc);
delay(25);
}
// k tyl
else if (przychodzacyBit == 107)
{
M1_tyl(szybkosc);
M2_tyl(szybkosc);
delay(25);
}
// jeli co innego to stop
else
{
M1_stop();
M2_stop();
}
}
void autoomijanie()
{
Serial.println("autoomijanie");
odleglosc = pingpong();
if (odleglosc>bezpOdleglosc)
{
Serial.println(odleglosc);
M1_przod(szybkosc);
M2_przod(szybkosc);
}
else
{
Serial.println(odleglosc);
M1_stop();
M2_stop();
delay(500);
servo.write(20);
distR = pingpong();
delay(500);
servo.write(160);
delay(500);
distL = pingpong();
delay(500);
servo.write(90);
delay(200);
porownaj();
}
}
void porownaj()
{
if (distL>distR) //jezeli cos jest po prawej
{
M2_tyl(szybkosc);
delay(1000);
}
else if (distR>distL) //jesli cos jest po lewej
{
M1_tyl(szybkosc);
delay(1000);
}
else if (distR<15 && distL<15) //jesli jest ciasno
{
M1_tyl(szybkosc);
M2_tyl(szybkosc);
delay(2000);
M1_tyl(szybkosc);
delay(2000);
}
}
//FUNKCJE STERUJĄCE
void M1_tyl(int x){
digitalWrite(M1_B, LOW);
digitalWrite(M1_A, HIGH);
}
void M1_przod(int x){
digitalWrite(M1_A, LOW);
digitalWrite(M1_B, HIGH);
}
void M1_stop(){
digitalWrite(M1_B, LOW);
digitalWrite(M1_A, LOW);
}
void M2_przod(int y){
digitalWrite(M2_B, LOW);
digitalWrite(M2_A, HIGH);
}
void M2_tyl(int y){
digitalWrite(M2_A, LOW);
digitalWrite(M2_B, HIGH);
}
void M2_stop(){
digitalWrite(M2_B, LOW);
digitalWrite(M2_A, LOW);
}
long pingpong()
{
// wysyla ping
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
//odbiera i liczy
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
float odl = (duration/2) / 29.1;
return odl;
}
Jeśli ktoś z was mógłby mi pomóc albo jakoś naprowadzić to byłoby mi miło
Pozdrawiam
Michał