вот такой скетч
- Код: Выделить всё • Развернуть
#include<Ultrasonic.h> /*включить установленную пользователем библиотеку*/
Ultrasonic ultrasonic(12,13); /*создать экземпляр УЗ датчика и определить выводы*/
#define DirM1 2
#define PwmM1 3
#define DirM2 10
#define PwmM2 11
#define BrakeM1 4
#define BrakeM2 9
void setup()
{
pinMode (PwmM1, OUTPUT);
pinMode (DirM1, OUTPUT);
pinMode (BrakeM1, OUTPUT);
pinMode (PwmM2, OUTPUT);
pinMode (DirM2, OUTPUT);
pinMode (BrakeM2, OUTPUT);
digitalWrite (BrakeM1, LOW);
digitalWrite (BrakeM2, LOW);
Serial.begin(9600); /*начать передачу данных на скорости 9600 bps */
}
// Хуйню сверху не трогай
void loop() {
Serial.print(ultrasonic.Ranging(INC)); /* INC для дюймов, CM для сантиметров */
Serial.println("in");
delay(100);
while(ultrasonic.Ranging(INC) < 20) {
rotateLeft();
delay(10);
}
goForward();
}
void goForward ()
{
Serial.println("GO-GO");
digitalWrite (DirM1, HIGH);
analogWrite (PwmM1, 50);
digitalWrite (DirM2, HIGH);
analogWrite (PwmM2, 50);
}
void rotateLeft ()
{
Serial.println("rotate");
digitalWrite (DirM1, HIGH);
analogWrite (PwmM1, 70);
digitalWrite (DirM2, LOW);
analogWrite (PwmM2, 70);
}
void startUp ()
{
}
собрал его из разных.
в теории все работает.
если препятствий нет то в мониторе порта идет текст GO-GO, GO-GO, GO-GO, GO-GO, GO-GO....
если в зону действия попал обект то rotate,rotate,rotate .....
это я специально вставил в код, чтобы проверить работу уз датчика.
на практике вначале колеса крутят вперед. при появлении препятствия они еще где то 3-5 сек крутят, при этом телега сносит препятствие и едет дальше... и только потом делает попытку развернуться.
поидее нет задержек, при обнаружении препятствия в мониторе сразу выскакивает rotate.... а вот колеса на деле не сразу уходят в этот режим, вопрос почему?
как к этому всему дописать сканирование сервой и выбор оптимального пути с откатом назад?