четверг, 7 ноября 2013 г.

Простейшая программа для arduino

Самым простым является мигание светодиодом. К 13 цифровому выводу Arduino UNO уже подключен светодиод. Поэтому кроме этой платки больше ничего не потребуется.


Программа:
////////////////////////
//
// Arduino UNO
//
////////////////////////
//
// Sketch: LED
//

void setup()
{
    pinMode(13, OUTPUT);
}

void loop()
{
    digitalWrite(13, HIGH);
    delay(2000);
    digitalWrite(13, LOW);
    delay(2000);
}

//
// End
//
////////////////////////

В этой программе 5 функций. В функции setup выполняется первоначальная настройка микроконтроллера. В данной программе она заключается в единственном вызове функции pinMode. Эта функция настраивает ножку микроконтроллера как цифровой выход или вход. Первый параметр определяет с каким пином будет работать функция. Это должно быть целое число от 0 до 19. Второй параметр определяет как функция настроит этот пин. OUTPUT означает, что ножка будет выход. INPUT означает, что ножка будет вход.

Код находящийся внутри функции loop бесконечно повторяется. Это происходит потому, что как только эта функция завершается, ее снова вызывают. И так все время, пока есть ток. В данной программе внутри этой функции вызывается функция digitalWrite. Первый параметр передаваемый digitalWrite определяет с каким пином будет работать функция. Номер должен быть тем же, что и в функции pinMode. Так как ранее мы настроили ножку микроконтроллера как выход, второй параметр должен быть HIGH или LOW. Если значение - HIGH, то напряжение на ножке близко к VCC. Для Arduino UNO это около 5 вольт. Если значение - LOW, то напряжение на ножке близко к GND. Это около 0 вольт. Последняя функция в рассматриваемой программе - delay. Эта функция обеспечивает задержку. Грубо говоря, программа выполняет эту функцию определенное время. Пока выполнение этой функции не завершится, следующие за этой функцией инструкции не выполнятся. Параметр этой функции определяет длительность задержки в миллисекундах. Изменяя значение параметра передаваемого конкретной функции delay можно изменять время мигания светодиода.

Эта программа подходит для любой платки arduino. Однако это далеко не единственный способ помигать светодиодом. Ниже я привожу программу которая работает с ножками микроконтроллера непосредственно.

Программа:

////////////////////////
//
// Arduino UNO
//
////////////////////////
//
// Sketch: LED
//

// Arduino   ATmega328
//
// IO13 --- Port B Pin 5
// IO12 --- Port B Pin 4
// IO11 --- Port B Pin 3
// IO10 --- Port B Pin 2
// IO9 --- Port B Pin 1
// IO8 --- Port B Pin 0
//
// IO7 --- Port D Pin 7
// IO6 --- Port D Pin 6
// IO5 --- Port D Pin 5
// IO4 --- Port D Pin 4
// IO3 --- Port D Pin 3
// IO2 --- Port D Pin 2
// IO1 --- Port D Pin 1
// IO0 --- Port D Pin 0
//
// AD5 --- Port C Pin 6
// AD4 --- Port C Pin 4
// AD3 --- Port C Pin 3
// AD2 --- Port C Pin 2
// AD1 --- Port C Pin 1
// AD0 --- Port C Pin 0

void setup()
{
    DDRB |= (1 << 5);
}

void loop()
{
    PORTB |= (1 << 5);
    delay(500);
    PORTB &= ~(1 << 5);
    delay(500);
}

//
// End
//
////////////////////////

Эта программа написана для arduino с микроконтроллером ATmega328. Справедливости ради стоит заметить, что она будет работать и на arduino с микроконтроллером ATmega168.

В этой программе есть несколько новых конструкций.
DDRB |= (1 << 5); конфигурирует ножку микроконтроллера связанную с 13 выводом ардуино как выход.
PORTB |= (1 << 5); устанавливает на ножке высокий логический уровень.
PORTB &= ~(1 << 5); устанавливает на ножке низкий логический уровень.

DDRx (DDRB, DDRC, DDRD) и PORTx (PORTB, PORTC, PORTD) это специальные имена предназначенные для облегчения работы с ножками микроконтроллера. Как видите работа с ними практически ничем не отличается от работы с обычными переменными.

Следует заметить, что подобный подход требует дополнительного контроля. Необходимо исключить одновременное выполнение ножкой микроконтроллера взаимоисключающих функций. Использование исключительно стандартных функций arduino в некоторой степени обеспечивает выполнение этого правила. Но непосредственная работа с ресурсами микроконтроллера предоставляет дополнительные возможности.