Full-Chip.net

Все об электронике, секреты ремонта
сборки компьютеров и периферии !!!

» » Arduino Урок 1 - мигаем светодиодом.
Статистика
95447 (+4)
Всего пользователей
1
Сейчас на сайте
85 (+0)
Всего статей
1632 (+0)
Всего комментариев
Реклама


Arduino Урок 1 - мигаем светодиодом.

Решил подготовить небольшой цикл уроков по программированию аппаратной платформы 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
}
/* далее программа будет повторяться бесконечно */

Код прокомментирован я думаю всем будет понятен принцип работы.

У вас должно получиться как на видео


Скачать готовый скетч Urok-1.rar [606 b] (cкачиваний: 188)

Но данный код не очень оптимален, для удержания логической 1 и логического 0 мы использовали функцию delay(), проблема в том что пока работает эта функция микроконтроллер не может выполнять других действий которые могут быть прописаны в цикле loop().
Для оптимизации кода мы немного его изменим. Вместо того чтобы зажигать светодиод функцией 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 записываем новое значение
  }

  // Здесь могут быть другие команды которые нужно выполнить
}


Как видим код серьезно изменился но выполняет точно такие же функции как и первый, но использование такого варианта более предпочтительно так как при подключении например кнопки, или датчика по которому будет срабатывать светодиод, задержек в выполнении программы не будет!
Скачать готовый скетч второй версии. Urok-1-versiya-2.rar [847 b] (cкачиваний: 121)
K:0
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
Вопрос:
Сколько голов у двух голового мутанта если их 2? (ответ запишите числом)
Ответ:*
Введите код: *
Кликните на изображение чтобы обновить код, если он неразборчив