Задание№1-4

Материал из roboforum.ru Wiki

Перейти к: навигация, поиск

Собираем все части кода в кучу

Собственно теперь осталось только собрать всё в кучу. И оформить рюшечки чтоб эстеты не бурчали... :-)

1. Оформляем команды МиниБоту отдельными красявашными процедурами

Прием_rc5:
   Getrc5(address , Command)
   If Address <> 255 And Command <> 255 Then
      Command = Command And &B01111111
      'Print Chr(12);
      'Print "Address - " ; Address
      'Print "Command - " ; Command;
   End If
Return
 
Влево:
   Gosub Стоп : Waitms 10
   Drl = 1 : Drr = 0 : Pwm1b = Speed : Pwm1a = Speed:
Return
 
Вправо:
   Gosub Стоп : Waitms 10
   Drl = 0 : Drr = 1 : Pwm1b = Speed : Pwm1a = Speed:
Return
 
Прямо:
   Gosub Стоп : Waitms 10
   Drl = 0 : Drr = 0 : Pwm1b = Speed : Pwm1a = Speed:
Return
 
Назад:
   Gosub Стоп : Waitms 10
   Drl = 1 : Drr = 1 : Pwm1b = Speed : Pwm1a = Speed:
Return
 
Стоп:
   Drl = 0 : Drr = 0 : Pwm1b = 0 : Pwm1a = 0:
Return

2. Теперь опишем что нужно делать МиниБоту когда пришла та или иная комманда

Gosub Прием_rc5
   If Command = 255 Then
      Gosub Стоп
   Elseif Command = 32 Then
      Gosub Прямо
      Waitms 100
   Elseif Command = 33 Then
      Gosub Назад
      Waitms 100
   Elseif Command = 17 Then
      Gosub Влево
      Waitms 100
   Elseif Command = 16 Then
      Gosub Вправо
      Waitms 100
   End If

3. В итоге должен получиться вот такой код

' Указываем какой версии у нас МиниБот
Const Device = 1                                            'MiniBot Version 1 or 2
$regfile = "m32def.dat"       ' файл спецификации Меги32
 
#if Device = 1
' Set configuration for MB1
   $prog &HFF , &HE4 , &HD9 , &H00       'указываем какие фусибиты надо прошить
   $crystal = 8000000       ' указываем на какой частоте будем работать
   $baud = 9600       ' указываем частоту дла usart (теперь нужно только для отладки программы)
#else
' Set configuration for MB2
'  $prog &HFF , &HBD , &HC9 , &H00      'указываем какие фусибиты надо прошить
   $crystal = 7372800       ' указываем на какой частоте будем работать
   $baud = 115200       ' указываем частоту дла usart (теперь нужно только для отладки программы)
#endif
 
'----------------------------------------------------------------------------
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Config Pinc.2 = Output : Drl Alias Portc.2       'ногу сконфигурировали как выход и обозвали Drl
Config Pinc.3 = Output : Drr Alias Portc.3       'ногу сконфигурировали как выход и обозвали Drr
Config Pind.4 = Output       'ногу ШИМа левого движка сконфигурировали как выход
Config Pind.5 = Output       'ногу ШИМа правого движка  сконфигурировали как выход
'----------------------------------------------------------------------------
 
Dim Speed As Byte
Speed = 70       ' указываем скорость робота
 
Config Rc5 = Pind.2
Enable Interrupts
Dim Address As Byte , Command As Byte
 
Print "Start MiniBot"       ' выводим в терминал отладочное сообщение
 
Do
   Gosub Прием_rc5
   If Command = 255 Then
      Gosub Стоп
   Elseif Command = 32 Then
      Gosub Прямо
      Waitms 100
   Elseif Command = 33 Then
      Gosub Назад
      Waitms 100
   Elseif Command = 17 Then
      Gosub Влево
      Waitms 100
   Elseif Command = 16 Then
      Gosub Вправо
      Waitms 100
   End If
Loop
 
Прием_rc5:
   Getrc5(address , Command)
   If Address <> 255 And Command <> 255 Then
      Command = Command And &B01111111
      'Print Chr(12);       ' выводим в терминал символ
      'Print "Address - " ; Address;       ' выводим в терминал адрес
      'Print "Command - " ; Command;       ' выводим в терминал номер команды
   End If
Return
 
Влево:
   Gosub Стоп : Waitms 10
   Drl = 1 : Drr = 0 : Pwm1b = Speed : Pwm1a = Speed:
Return
 
Вправо:
   Gosub Стоп : Waitms 10
   Drl = 0 : Drr = 1 : Pwm1b = Speed : Pwm1a = Speed:
Return
 
Прямо:
   Gosub Стоп : Waitms 10
   Drl = 0 : Drr = 0 : Pwm1b = Speed : Pwm1a = Speed:
Return
 
Назад:
   Gosub Стоп : Waitms 10
   Drl = 1 : Drr = 1 : Pwm1b = Speed : Pwm1a = Speed:
Return
 
Стоп:
   Drl = 0 : Drr = 0 : Pwm1b = 0 : Pwm1a = 0:
Return