Технический форум по робототехнике.
Krish писал(а):Если не до травить то паяться платка не будет?!
$regfile = "m16def.dat" 'используем мк ATmega16
$crystal = 16000000 'частота кварцевого резонатора 16mHz
Config Portc.2 = Output 'Порту присвоенно имя Servo1
Config Servos = 1 , Servo1 = Portc.2 , Reload = 11
Dim I As Integer , P As Integer
P = 12 'чем меньше значение переменной, тем быстрее будет вращаться серва и наоборот
Enable Interrupts
Servo(1) = 101 'центрируем серво (для разных моделей серво этот параметр может отличаться)
Wait 1
Do
For I = 101 To 150
Servo(1) = I : Waitms P
Next
For I = 150 To 200
Servo(1) = I : Waitms P
Next
For I = 200 To 150 Step -1
Servo(1) = I : Waitms P
Next
For I = 150 To 0 Step -1
Servo(1) = I : Waitms P
Next
For I = 0 To 101
Servo(1) = I : Waitms P
Next
Loop
End
Сергей писал(а):Krish, почему ты не хочешь записаться в радио кружок?
Krish писал(а):Хех, я на 2х кружках
Krish писал(а): C электроникой у меня хорошо, а с программирование плохо
$regfile = "m16def.dat" 'используем мк ATmega16
$crystal = 16000000 'частота кварцевого резонатора 16MHz
'****************************Настройка таймеров и сервоприводов*****************
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down ' таймер для ШИМ двигателей
Config Servos = 1 , Servo1 = Portc.2 , Reload = 12 ' Указываем кол-во серв, присваеваем имя Servo1 порту PC2, указываем длину импульса.
'*************************** Порт A ********************************************
' Поключили дальномер, порт A7, настройки АДС ниже
'*************************** Порт В ********************************************
'Библиотека lcd4.lbx использует следующее подключение:
'Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
'Config Lcd = 16 * 2 'используем дисплей на 2 строчки по 16 знакомест в каждой
' Свободные порты: PortB.3
Config Pinb.0 = Output : Led1 Alias Portb.0 'ногу сконфигурировали как выход и обозвали Led1
Config Pinb.2 = Output : Led2 Alias Portb.2 'ногу сконфигурировали как выход и обозвали Led2
'*************************** Порт C ********************************************
Config Pinc.2 = Output ' Подключили серву1 к порту С2, настройки сервы выше
'*************************** Порт D ********************************************
Config Pind.6 = Output : Dr1 Alias Portd.6 'ногу сконфигурировали как выход и обозвали Dr1
Config Pind.7 = Output : Dr2 Alias Portd.7 'ногу сконфигурировали как выход и обозвали Dr2
Config Pind.5 = Output 'ногу ШИМа 1-ого движка сконфигурировали как выход
Config Pind.4 = Output 'ногу ШИМа 2-ого движка сконфигурировали как выход
'*****************************Настройка ADC*************************************
Config Adc = Single , Prescaler = Auto , Reference = Internal
'*******************************************************************************
Enable Interrupts ' разрешаем прерывания
'************************Переменные и константы*********************************
Dim Speed As Integer , Sharp As Integer
Dim I As Integer
Dim Vout As Word
'*****************************Основной цикл*************************************
Speed = 255
1:
Do
Gosub Вперёд ' Если сигнала от ик-датчика(Sharp) не поступает, значит двигаемся всё время прямо
'******************Вращение сервопривода и датчика Sharp************************
For I = 45 To 90 Step 1 ' Вращаем сервой справа на лево
Gosub Sharp_right ' считаем что шарп смотрит вправо
Servo(1) = I
Waitms 12 ' ждем 12 мс
Next
For I = 90 To 135 Step 1 ' Вращаем сервой справа на лево
Servo(1) = I
Gosub Sharp_left ' считаем что шарп смотрит влево
Waitms 12 ' ждем 12 мс
Next
For I = 135 To 90 Step -1 ' Вращаем сервой слева на право
Gosub Sharp_left ' считаем что шарп смотрит вправо
Servo(1) = I
Waitms 12 ' ждем 12 мс
Next
For I = 90 To 45 Step -1 ' Вращаем сервой слева на право
Gosub Sharp_right ' считаем что шарп смотрит влево
Servo(1) = I
Waitms 12 ' ждем 12 мс
Next
Loop
'*******************************************************************************
' Включение комбинации моторов для движения в заданном направлении
'*******************************************************************************
Стоп: ' стоим на месте
Dr1 = 0 : Dr2 = 0 : Pwm1a = 0 : Pwm1b = 0
Return
Вперёд:
' едим вперёд на заданной скорости
Dr1 = 0 : Dr2 = 0 : Pwm1a = Speed : Pwm1b = Speed
Return
Назад: ' едим назад на заданной скорости
Dr1 = 1 : Dr2 = 1 : Pwm1a = Speed : Pwm1b = Speed
Return
Разворот_вправо: ' делаем Разворот_вправо на заданной скорости
Dr1 = 0 : Dr2 = 1 : Pwm1a = Speed : Pwm1b = Speed
Return
Разворот_влево: ' делаем Разворот_влево на заданной скорости
Dr1 = 1 : Dr2 = 0 : Pwm1a = Speed : Pwm1b = Speed
Return
'***********************************Sharp***************************************
Sharp_right:
Start Adc : Vout = Getadc(7) 'Sharp connected for example to PA=0(ADC0)
Stop Adc
If Vout > 240 Then : Sharp = 1 : Else : Sharp = 0 : End If
If Sharp = 1 Then : Led1 = 1
Gosub Разворот_влево : Waitms 500 : Led1 = 0 : Gosub Вперёд : End If
Return
Sharp_left:
Start Adc : Vout = Getadc(7) 'Sharp connected for example to PA=0(ADC0)
Stop Adc
If Vout > 240 Then : Sharp = 1 : Else : Sharp = 0 : End If
If Sharp = 1 Then : Led2 = 1
Gosub Разворот_вправо : Waitms 500 : Led2 = 0 : Gosub Вперёд : End If
Return
End