Heeeja wszystkim
Niedawno zaczęłam zabawę z arduino, nawet zrobiłam robota : Tzn kupiłam kilka części i złożyłam bo program jest sklejką kilku inny z internetu : Ale do rzeczy, jest do samochodzik sterowany zdalnie telefonem przez bt. Wszystko fajnie działa tak jak chciałam tylko jest problem z trybem "auto" : . Nie wiem dlaczego cały czas jedzie do przodu , jak dam ten kawałek kodu w pętli while to nie ma problemu i działa (czyli omija przeszkodę) ale jest problem z wyjściem bo naciskam stop na telefonie a robocik nie reaguje i cały czas działa w trybie auto . Czy może mi ktoś poprawić to albo naprowadzić mnie :? (przyciski na telefonie na pewno są dobrze bo sprawdzałam w kilku innych wariantach)
robot jest podobny do tego
a tu proszę cały kod
Niedawno zaczęłam zabawę z arduino, nawet zrobiłam robota : Tzn kupiłam kilka części i złożyłam bo program jest sklejką kilku inny z internetu : Ale do rzeczy, jest do samochodzik sterowany zdalnie telefonem przez bt. Wszystko fajnie działa tak jak chciałam tylko jest problem z trybem "auto" : . Nie wiem dlaczego cały czas jedzie do przodu , jak dam ten kawałek kodu w pętli while to nie ma problemu i działa (czyli omija przeszkodę) ale jest problem z wyjściem bo naciskam stop na telefonie a robocik nie reaguje i cały czas działa w trybie auto . Czy może mi ktoś poprawić to albo naprowadzić mnie :? (przyciski na telefonie na pewno są dobrze bo sprawdzałam w kilku innych wariantach)
robot jest podobny do tego
a tu proszę cały kod
Kod:
#include <NewPing.h>
#define TRIGGER_PIN 2
#define ECHO_PIN 3
#define MAX_DISTANCE 100
const int outPin = 5;
const int outPin2 = 6;
const int outPin3 = 11;
const int outPin4 = 10;
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
unsigned int time;
int distance;
int triggerDistance = 30;
int fDistance;
int lDistance;
int rDistance;
void setup()
{
Serial.begin(9600);
pinMode(outPin, OUTPUT);
pinMode(outPin2, OUTPUT);
pinMode(outPin3, OUTPUT);
pinMode(outPin4, OUTPUT);
}
void scan(){
time = sonar.ping();
distance = time / US_ROUNDTRIP_CM;
if(distance == 0){
distance = 100;
}
delay(5);
}
void moveBackward(){
digitalWrite(outPin, LOW);
digitalWrite(outPin2, HIGH);
digitalWrite(outPin3, HIGH);
digitalWrite(outPin4, LOW);
}
void moveForward(){
digitalWrite(outPin, HIGH);
digitalWrite(outPin2, LOW);
digitalWrite(outPin3, LOW);
digitalWrite(outPin4, HIGH);
}
void moveRight(){
digitalWrite(outPin, LOW);
digitalWrite(outPin2, LOW);
digitalWrite(outPin3, LOW);
digitalWrite(outPin4, HIGH);
}
void moveLeft(){
digitalWrite(outPin, HIGH);
digitalWrite(outPin2, LOW);
digitalWrite(outPin3, LOW);
digitalWrite(outPin4, LOW);
}
void moveStop(){
digitalWrite(outPin, LOW);
digitalWrite(outPin2, LOW);
digitalWrite(outPin3, LOW);
digitalWrite(outPin4, LOW);
}
void loop()
{
if (Serial.available()){
char bt = Serial.read();
if(bt == 'u'){ //do przodu
digitalWrite(outPin,HIGH);
digitalWrite(outPin2,LOW);
digitalWrite(outPin3,HIGH);
digitalWrite(outPin4,LOW);
}
else if (bt == 'd'){ //do tyłu
digitalWrite(outPin,LOW);
digitalWrite(outPin2,HIGH);
digitalWrite(outPin3,LOW);
digitalWrite(outPin4,HIGH);
}
else if (bt == 's'){ //stop
digitalWrite(outPin,LOW);
digitalWrite(outPin2,LOW);
digitalWrite(outPin3,LOW);
digitalWrite(outPin4,LOW);
}
else if (bt == 'r'){ //prawo
digitalWrite(outPin,HIGH);
digitalWrite(outPin2,LOW);
digitalWrite(outPin3,LOW);
digitalWrite(outPin4,LOW);
}
else if (bt == 'l'){ //lewo
digitalWrite(outPin,LOW);
digitalWrite(outPin2,LOW);
digitalWrite(outPin3,HIGH);
digitalWrite(outPin4,LOW);
}
else if (bt == 'e'){ //lewo w tym samym miejscu
digitalWrite(outPin,LOW);
digitalWrite(outPin2,HIGH);
digitalWrite(outPin3,HIGH);
digitalWrite(outPin4,LOW);
}
else if (bt == 'i'){ //prawo w tym samym miejscu
digitalWrite(outPin,HIGH);
digitalWrite(outPin2,LOW);
digitalWrite(outPin3,LOW);
digitalWrite(outPin4,HIGH);
}
else if (bt == 'z') /// automatyczny
{
scan();
fDistance = distance;
if(fDistance < triggerDistance){
moveBackward();
delay(1000);
moveRight();
delay(500);
moveStop();
scan();
rDistance = distance;
moveLeft();
delay(1000);
moveStop();
scan();
lDistance = distance;
if(lDistance < rDistance){
moveRight();
delay(200);
moveForward();
}
else{
moveForward();
}
}
else{
moveForward();
}
}
}
}