Здесть только сам код.
Цель данного кода:
1. ИК-дальномером Sharp посаженому на серву выполнять автоматическое сканирование пространства перед роботом
2. При уменьшении дистанции ниже определенного уровня передать в уарт соответвующий пакет
Текущий код
- Код: Выделить всё • Развернуть
'$prog &HFF , &HE0 , &HDD , &HF9 ' для минибота 2.x
$regfile = "m88DEF.dat"
$crystal = 7372800
$baud = 115200
'Config Serialin = Buffered , Size = 10
$hwstack = 64
$swstack = 64
$framesize = 64
Enable Interrupts 'разрешаем прерывания
'Enable Urxc
On Urxc Getchar 'переопределяем прерывание приема usart
Config Adc = Single , Prescaler = Auto , Reference = Internal 'опора 1.1В
Dim Дистанция As Word
Dim Text As String * 15 'строка для отправки/приема (длина строки 15 символов)
Dim Text_tmp As String * 15
Dim Txt_ As Byte
Config Servos = 1 , Servo1 = Portb.2 , Reload = 20
Config Pinb.2 = Output
Enable Interrupts
Dim Пеленг As Byte
Waitms 100
Print "Start Mega88 MiniBot 2.1"
'Config Pinb.2 = Input
Do
Основной_цикл:
Gosub Сканирование
Loop
Сканирование:
Do
For Пеленг = 35 To 65
Servo(1) = Пеленг
Waitms 4
Gosub Sharp
Next
For Пеленг = 65 To 35 Step -1
Servo(1) = Пеленг
Waitms 4
Gosub Sharp
Next
Loop
Return
Сканирование_стоп:
Servo(1) = 50
Goto Основной_цикл
Return
Getchar:
Txt_ = Inkey()
If Txt_ > 13 Then 'если пришел не служебный символ
Text_tmp = Chr(txt_)
Text = Text + Text_tmp
End If
If Txt_ = 13 Then'нажали ввод
'строка в Text принята
End If
If Text = "M88_Scan_on" Then Gosub Сканирование
If Text = "M88_Scan_off" Then Gosub Сканирование_стоп
Return
Sharp:
Start Adc
Дистанция = Getadc(0) : Дистанция = Getadc(0) : Дистанция = Getadc(0):
Дистанция = Дистанция / 10
Stop Adc
Print Chr(12);
Print Пеленг ; "-" ; Дистанция
Return
1. проблема, если включить Enable Urxc то серва начинает тормозить безбожно
2. так как пол относительно шарпа "бегает" по радиусу, то нужно что-то придумывать с оперативным запоминанием дистанции на каждом пеленге, т.к. при верчении головой дистанция относительно шарпа постоянно изменяется
Добавлено спустя 18 минут 29 секунд:
по второму вопросу я так понимаю нужно строить табличку пеленга с шагом 5 попугаев и постоянно ее перезаписывать, перед этим сравния с предыдущим значением и если разница больше чем позволительно по нашей религии, то кричим в уарт меге32 что у нас по такому-то пеленгу изменение дистанции до препятсвия
я правильно понимаю или это всё глупости?