сервопривод крутится быстро
- Войдите на сайт для отправки комментариев
Ср, 15/07/2015 - 20:37
есть машинка на ультразвуке надо сделать поравку в коде чтоб серво крутил ультразвук медленей при обнуружении припятсвий .
#include <Servo.h> #define ServoPin 8 const int motor1APin = 11; // H-bridge leg 1 const int motor2APin = 6; // H-bridge leg 2 const int motor3APin = 10; // H-bridge leg 1 const int motor4APin = 5; // H-bridge leg 2 const int enablePinA = 9; // H-bridge enable pin const int enablePinB = 4; const int Trig = 3; //Ultrasonic const int Echo = 2; Servo myservo; void setup() { // set all the other pins you're using as outputs: pinMode( enablePinA, OUTPUT); pinMode( enablePinA, OUTPUT); pinMode( motor1APin, OUTPUT); pinMode( motor2APin, OUTPUT); pinMode( motor3APin, OUTPUT); pinMode( motor4APin, OUTPUT); pinMode(Trig, OUTPUT); pinMode(Echo, INPUT); // set enablePin high so that motor can turn on: digitalWrite(enablePinA, HIGH); digitalWrite(enablePinB, HIGH); myservo.attach(8); } unsigned int time_us=0; unsigned int distance_sm=0; unsigned int circle=0; unsigned int dist_f=0; unsigned int dist_l=0; unsigned int dist_r=0; unsigned int dist_45=0; unsigned int dist_135=0; unsigned int t=15; void loop() { if (circle==0) { myservo.write(0); //initial parameters dist_r=sonar(); motion('w',0,45,t); dist_45=sonar(); motion('w',45,90,t); dist_f=sonar(); motion('w',90,135,t); dist_135=sonar(); motion('w',135,180,t); dist_l=sonar(); } circle++; if(dist_f>=25) { a: motion('f',180,135,t); dist_135=sonar(); front_motion(t); motion('f',135,90,t); dist_f=sonar(); front_motion(t); motion('f',90,45,t); dist_45=sonar(); front_motion(t); motion('f',45,0,t); dist_r=sonar(); front_motion(t); motion('f',0,45,t); dist_45=sonar(); front_motion(t); motion('f',45,90,t); dist_f=sonar(); front_motion(t); motion('f',90,135,t); dist_135=sonar(); front_motion(t); motion('f',135,180,t); dist_l=sonar(); front_motion(t); if (dist_f>=25) goto a; } else { if(dist_f<5) { motion_back(t); dist_f=sonar(); } if(dist_l>=dist_r || dist_135>dist_r) { motion('l',180,90,t); dist_f=sonar(); } if(dist_l<dist_r) { motion('r',180,90,t); dist_f=sonar(); } } } int sonar() { digitalWrite(Trig, HIGH); delayMicroseconds(300); digitalWrite(Trig, LOW); time_us=pulseIn(Echo, HIGH); distance_sm=time_us/90; return distance_sm; } void forward () { digitalWrite(motor1APin, HIGH); digitalWrite(motor2APin, LOW); digitalWrite(motor3APin, HIGH); digitalWrite(motor4APin, LOW); } void back () { digitalWrite(motor1APin, LOW); digitalWrite(motor2APin, HIGH); digitalWrite(motor3APin, LOW); digitalWrite(motor4APin, HIGH); } void right () { digitalWrite(motor1APin, LOW); digitalWrite(motor2APin, HIGH); digitalWrite(motor3APin, HIGH); digitalWrite(motor4APin, LOW); } void left () { digitalWrite(motor1APin, HIGH); digitalWrite(motor2APin, LOW); digitalWrite(motor3APin, LOW); digitalWrite(motor4APin, HIGH); } void wait() { digitalWrite(motor1APin, LOW); digitalWrite(motor2APin, LOW); digitalWrite(motor3APin, LOW); digitalWrite(motor4APin, LOW); } void motion (char dimention, int prev_angle, int next_angle, int time) { int a; if(next_angle>=prev_angle) a=15; else a=-15; if (dimention=='f') { int i=prev_angle; while( i!=next_angle) { i+=a; myservo.write(i); forward(); delay(time); } } if (dimention=='l') { int i=prev_angle; while( i!=next_angle) { i+=a; myservo.write(i); left(); delay(time); } } if (dimention=='r') { int i=prev_angle; while( i!=next_angle ) { i+=a; myservo.write(i); right(); delay(time); } } if (dimention=='b') { int i=prev_angle; while( i!=next_angle ) { i+=a; myservo.write(i); back(); delay(time); } } if (dimention=='w') { int i=prev_angle; while( i!=next_angle ) { i+=a; myservo.write(i); wait(); delay(time); } } } void front_motion( int time ) { if(dist_45<=9) { left(); delay(3*time);// 3 } if(dist_135<=9) { right(); delay(3*time);// 3 } } void motion_back( int time ) { motion('b',180,90,2*time); if(dist_l>=dist_r) { do { left(); delay(time); dist_f=sonar(); }while(dist_f<=20); } if(dist_l<dist_r) { do { right(); delay(time); dist_f=sonar(); }while(dist_f<=20); } }
Задайте переменную t побольше.
помогите, пожалуйста, новичку!!!! Только сильно не ругайте…
Весь код мне не осилить, может объясните строки 8, 9, 19, 20, 29, 30 … особенно 19, 20, ну я понимаю, что на мощность не влияет , но все же… просто мне за строки не платят, я для себя делаю , pleas, pleas, pleas, pleas, pleas, pleas, pleas, pleas, pleas, pleas, pleas, pleas…
https://www.youtube.com/watch?v=NU27KlyK7JI
http://forum.arduino.cc/index.php?topic=6031.0
в 20-й судя по всему опечатка
в 20-й судя по всему опечатка
:)
читал статью, где ребята учили зарабатывать на коде :) так там некоторые, особо ловкие, обходились без FOR просто пастили нужное кол-во раз, а деньги брали за строки :)))))))))))))
столько строк вместо проводка....... (ну и не важно, что при включении дернится немного... м.б.)
Я не шутил про опечатку.
Я не шутил про опечатку.
я тоже, когда просил строки посмотреть, скорее вопрос к ТС
Задайте переменную t побольше.
строчка какая я что то не найду эту переменную t?
Задайте переменную t побольше.
строчка какая я что то не найду эту переменную t?
:)))))))))))))))))))))))))
44
там где ее объявили
к слову:
http://arduino.ru/forum/programmirovanie/datchik-prepyatstvii-i-servobespoleznaya-korobka
темки похожи :) , поучаствуйте
там я менял серво теперь норм а вот с ультр датчиком теперь что то стало ж...( он теперь вопще припятствия плохо распознает тычется в стену и не отезжает не фига(