Вопрос новичка по поводу кода для робота .
- Войдите на сайт для отправки комментариев
Втр, 27/10/2015 - 03:27
Доброго времени суток. Уважаемые знатоки есть код для робота .Проблема состоит в том, есть функции иф и при выполнении этого действия хотелось бы чтоб этот код выполнялся в течение определенного времени . Скажем в поворот в течение 1 секунды . Но если банально добавить delay (1000) тогда тормозится сервопривод с ультразвуковым датчиком . Как лучше сделать чтоб выполнялось действие в течение 1 секунды не мешая сканированию местности. Я в этом новичек и код далеко не идеален но если не сложно помогите .Заранее огромное спасибо .
#define trigPin 2 //pin na ultrazvuk
#define echoPin 4 //pim na ultrazvuk
#define dirmotor1 13 //edem vpered A
#define dirmotor2 12 //nazad A
#define motor1 11 //edem vpered B BINDIM KNOPKI//
#define motor2 3 //edem nazad B
#define breakmotor1 9 //tormoz
#define breakmotor2 8 //ntormoz
#include <Servo.h> //servoprivod
Servo Turn; // SETUP!!
int pos = 0; //
void setup() { //
Turn.attach(5); //
Serial.begin(9600); //
pinMode(trigPin, OUTPUT); //PROgRAMiruEM gowaju VihoDI ,SerVOvpRIvoD Iporti
pinMode(echoPin, INPUT); //
pinMode(motor1, OUTPUT); //
pinMode(motor2, OUTPUT); //
pinMode(dirmotor1, OUTPUT); //
pinMode(dirmotor2, OUTPUT); //
pinMode(breakmotor1, OUTPUT); //
pinMode(breakmotor2, OUTPUT);
}
void loop() {
for(pos=0;pos < 180; pos+= 20)
{
Turn.write(pos);
delay(60);
int distance,duration;
digitalWrite(trigPin, HIGH);
delay(15);
digitalWrite(trigPin, LOW);
duration=pulseIn(echoPin, HIGH);
distance=(duration/2)/29.1;
Serial.println("");
Serial.println(distance);
if(distance <= 20 || distance >= 15) { //esli distancija menshe 15ilibolwe 0 on delaet povorot vprava ili vlevo
if( pos > 0 || pos < 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 50);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 50);}}
if(distance <= 20 || distance >= 15) { //esli distancija menshe 15ilibolwe 0 on delaet povorot vprava ili vlevo
if( pos < 180 || pos > 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 50);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 50);}}
if(distance < 15 || distance > 0) { //esli distancija menshe 10ilibolwe 0
if( pos > 0 || pos < 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,LOW);//zdaet zadom pravoj shassi
analogWrite(11, 100);
digitalWrite(12,HIGH);//zdaet zadom pravoj shassi
analogWrite(3, 100);}}
if(distance < 15 || distance > 0) { //esli distancija menshe 10ilibolwe 0
if( pos < 180 || pos > 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,HIGH);//zdaet zadom pravoj shassi
analogWrite(11, 100);
digitalWrite(12,LOW);//zdaet zadom pravoj shassi
analogWrite(3, 100);}}
if(distance > 20 || distance < 0){
if( pos > 0 || pos < 90){// esli distancija bolwe 15 edem vpered
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 150);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 150);}}
if(distance > 20 || distance < 0){
if( pos < 180 || pos > 90){// esli distancija bolwe 15 edem vpered
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 150);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 150);}}
}
for(pos=180; pos>=1;pos-= 20)
{
Turn.write(pos);
delay(60);
int distance,duration;
digitalWrite(trigPin, HIGH);
delay(15);
digitalWrite(trigPin, LOW);
duration=pulseIn(echoPin, HIGH);
distance=(duration/2)/29.1;
Serial.println("");
Serial.println(distance);
if(distance <= 20 || distance >= 15) { //esli distancija menshe 15ilibolwe 0 on delaet povorot vprava ili vlevo
if( pos > 0 || pos < 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 200);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 200);}}
if(distance <= 20 || distance >= 15) { //esli distancija menshe 15ilibolwe 0 on delaet povorot vprava ili vlevo
if( pos < 180 || pos > 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 200);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 200);}}
if(distance < 15 || distance > 0) { //esli distancija menshe 10ilibolwe 0
if( pos > 0 || pos < 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,LOW);//zdaet zadom pravoj shassi
analogWrite(11, 200);
digitalWrite(12,HIGH);//zdaet zadom pravoj shassi
analogWrite(3, 200);}}
if(distance < 15 || distance > 0) { //esli distancija menshe 10ilibolwe 0
if( pos < 180 || pos > 90){//sjuda nado vpisat tak wtobi on povernul nalevo
digitalWrite(13,HIGH);//zdaet zadom pravoj shassi
analogWrite(11, 200);
digitalWrite(12,LOW);//zdaet zadom pravoj shassi
analogWrite(3, 200);}}
if(distance > 20 || distance < 0){
if( pos > 0 || pos < 90){// esli distancija bolwe 15 edem vpered
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 85);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 85);}}
if(distance > 20 || distance < 0){
if( pos < 180 || pos > 90){// esli distancija bolwe 15 edem vpered
digitalWrite(13,LOW);// zadom pravoj shassi
analogWrite(11, 150);
digitalWrite(12,LOW);//zadom pravoj shassi
analogWrite(3, 150);}}
}}
Где-то на этом форуме на самом видно месте нужно написать:
"Не приступайте к программированию, пока не прочтете это: https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay "
Проблема состоит в том, есть функции иф ...