Вопрос новичка по поводу кода для робота .
- Войдите на сайт для отправки комментариев
Втр, 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 "
Проблема состоит в том, есть функции иф ...