Навигация
Рекомендуемые статьи
Статистика
95447 (+4)
Всего пользователей
Всего пользователей
1
Сейчас на сайте
Сейчас на сайте
85 (+0)
Всего статей
Всего статей
1632 (+0)
Всего комментариев
Всего комментариев
Реклама
Решил подготовить небольшой цикл уроков по программированию аппаратной платформы ARDUINO для начинающих. В 1 уроке по Arduino мы научимся мигать светодиодом, это самый простой пример но его стоит повторить для понимания общих принципов программирования на Arduino...
К плате в данном примере ничего подключать не нужно, так как с завода на 13 выводе уже установлен светодиод.
/* Мигание встроенным в плату LED
* Включает и выключает светодиод (LED) подсоединенный
* к выходу 13 платы, с интервалом 1 секунда горит и одна секунда паузы
*
*/
int ledPin = 13; // LED подсоединен к выводу 13
void setup()
{
pinMode(ledPin, OUTPUT); // настраиваем порт 13 на выход
}
void loop()
{
digitalWrite(ledPin, HIGH); // включаем LED подаем лог. 1
delay(1000); // пауза 1 секунда (1000 мс = 1 секунда) удерживаем лог. 1
digitalWrite(ledPin, LOW); // выключаем LED
delay(1000); // пауза 1 секунда (1000 мс = 1 секунда) удерживаем лог. 0
}
/* далее программа будет повторяться бесконечно */
Код прокомментирован я думаю всем будет понятен принцип работы.
У вас должно получиться как на видео
Скачать готовый скетч
Для оптимизации кода мы немного его изменим. Вместо того чтобы зажигать светодиод функцией HIGH, а затем отключать его значением LOW, мы получим текущее значение ledPin и инвертируем его, тоесть если оно было HIGH, то станет LOW и наоборот.
void loop()
{
digitalWrite(ledPin, !digitalRead(ledPin)); // включаем/выключаем LED
delay(1000); // задержка 1 сек.
}
Теперь нам нужно избавиться от функции delay(), вместо нее мы будем использовать функцию millis(), данная функция возвращает значение прошедшего времени с момента запуска текущей программы. Нужно учитывать что данная функция при долгой работе переполниться и вернется в 0, но это произойдет примерно через 50 суток непрерывной работы программы. Как альтернативу можно использовать функцию micros(), которая возвращает количество микросекунд, прошедшее с момента запуска текущей программы. Функция переполнится и сброситься в ноль приблизительно через 70 минут непрерывной работы программы.
Но мы остановимся на функции millis().
/* Мигание LED Версия без функции delay()
* Включает и выключает светодиод (LED) подсоединенный
* к выходу 13, с интервалом в 2 секунды используя функцию millis()
*/
int ledPin = 13; // LED подсоединен к выводу 13 платы
unsigned long currentTime;
unsigned long loopTime;
void setup()
{
pinMode(ledPin, OUTPUT); // устанавливаем вывод 13 как выход
currentTime = millis(); // считываем время, прошедшее с момента запуска программы
loopTime = currentTime;
}
void loop()
{
currentTime = millis(); // считываем время, прошедшее с момента запуска программы
if(currentTime >= (loopTime + 1000)){ // сравниваем текущий таймер с переменной loopTime + 1 секунда
digitalWrite(ledPin, !digitalRead(ledPin)); // включаем/выключаем LED знак ! инверсия
loopTime = currentTime; // в loopTime записываем новое значение
}
// Здесь могут быть другие команды которые нужно выполнить
}
Как видим код серьезно изменился но выполняет точно такие же функции как и первый, но использование такого варианта более предпочтительно так как при подключении например кнопки, или датчика по которому будет срабатывать светодиод, задержек в выполнении программы не будет!
Скачать готовый скетч второй версии.
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.