CODE:/**********************************************************
ПРИМЕР 5 :: РОБОТ ДЛЯ СОРЕВНОВАНИЙ КЕГЕЛЬРИНГ :: MYROBOT.RU
***********************************************************/
#define F_CPU 1000000UL // указываем частоту в герцах
#include <avr/io.h>
#include <util/delay.h>
int main(void) // начало основной программы
{
DDRC = 0xff; // все выводы порта C сконфигурировать как выходы
DDRD = 0x00; // все выводы порта D сконфигурировать как входы
PORTD = 0xff; // установить "1" на всех выводах порта D,
// включаем подтягивающие резисторы
while (1) { // Бесконечный цикл
// ПРОВЕРЯЕМ СИГНАЛ НИЗКОГО УРОНЯ ОТ ФОТОДАТЧИКА
if (!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D
{
// -------------- включаем моторы вперед ---------------
PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C
// -----------------------------------------------------
}
else
{
// ------------------ отъезд назад ------------------
// -------- включаем моторы назад на 1,8 сек --------
PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта C
PORTC |= _BV(PC4); // установить "1" на линии 4 порта C
_delay_ms(1800); // ждем 1,8 сек.
// --------------------------------------------------
// --------------------- поворот --------------------
// правый мотор вперед, левый мотор стоп на 0,6 сек
PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
_delay_ms(600); // ждем 0,6 сек.
// --------------------------------------------------
}
} // закрывающая скобка бесконечного цикла
} // закрывающая скобка основной программы |