Занятие №4 For…

В котором мы рассмотрим применение алгоритмической конструкции цикл «For» и поработаем с ChipKit Basic I/O Shield.

Нам понадобятся:

  • ChipKit Uno32
  • ChipKit Basic I/O Shield.

Можно работать и без ChipKit Basic I/O Shield, собрав на монтажной плате примерно такую схему:

Примерная схема для Arduino

У нас же есть ChipKit Basic I/O Shield, на котором уже есть замечательный ряд из 8 диодов, «сидящих» на 26-33 пине.

Наша задача:

реализовать различные движения огоньков диодов с помощью цикла.

Зачем вообще цикл, если мы уже делали огонёк без всяких циклов? (если не считать, что у нас вообще всё находится в  цикле loop()

Ну, давайте начнём писать программу, как обычно с инициализации портов:
void setup () {
pinMode (26, OUTPUT);
pinMode (27, OUTPUT);
pinMode (28, OUTPUT);
pinMode (29, OUTPUT);
pinMode (30, OUTPUT);
pinMode (31, OUTPUT);
pinMode (32, OUTPUT);
pinMode (33, OUTPUT);
}

Ужас! Куча одинаковых команд. Почти одинаковых.
К счастью, мы можем написать команду pinMode один раз и заставить её повторяться многократно для различных значений некоторой переменной величины.
Обозначим эту переменную буквой i.
Ту же процедуру перепишем, используя цикл:
void setup () {
for (int i=26; i<=33; i++) {
pinMode (i, OUTPUT);
}
}

По русски это можно прочитать так: к целочисленной переменной i, которая вначале равна 26 прибавлять 1 (i++), пока её значение меньше либо равно 33. При каждом значении переменной i будут выполняться операции, записанные в фигурных скобках (тело цикла).
Таким образом обе написанные процедуры выполняют одни и те же команды, но вторая более компактна и профессиональна.
Да, кстати, если Вы работаете без ChipKit Basic I/O Shield, то заголовок цикла будет таким: for (int i=6; i<=13; i++)

Идём далее. Реализуем простой огонёк, бегущий от диода на 26 пине, до диода на 33. Будем называть диоды по номеру их пина: 26, 27, 28 диод…
void loop() {
for (int i=26; i<=33; i++) {
digitalWrite(i,HIGH);
delay(50);
digitalWrite(i,LOW);
}
}

Программа целиком:
void setup () {
for (int i=26; i<=33; i++) {
pinMode (i, OUTPUT);
}
}
void loop() {
for (int i=26; i<=33; i++) {
digitalWrite(i,HIGH);
delay(50);
digitalWrite(i,LOW);
}
}

Прошиваем, получается так: видео или так без ChipKit Basic I/O Sheld видео

Теперь пусть у нас последовательно зажгутся все диоды, а потом последовательно погаснут (видео):

void setup () {
for (int i=26; i<=33; i++) {
pinMode (i, OUTPUT);
}
}
void loop() {

//Последовательно включаем диоды

for (int i=26; i<=33; i++) {
digitalWrite(i,HIGH);
delay(50);
}

// И последовательно их выключаем

for (int i=26; i<=33; i++) {
digitalWrite(i,LOW);
delay(50);
}

}

А может, пусть огонёк бегает туда-сюда (видео)?

void setup () {
for (int i=26; i<=33; i++) {
pinMode (i, OUTPUT);
}
}
void loop() {

//В одну сторону

for (int i=26; i<=33; i++) {
digitalWrite(i,HIGH);
delay(50);
digitalWrite(i,LOW);

}

// И в другую (изменён заголовок цикла):

for (int i=33; i>=26; i--) {
digitalWrite(i,HIGH);
delay(50);
digitalWrite(i,LOW);
}

}

Можно придумать и другие способы движения огонька. Например так:

Или так для варианта без ChipKit Basic I/O Shield, для 5 диодов на 8-12 пинах (здесь используется вложенный цикл, т.е. цикл, выполняемый циклом).

void setup () {
for (int i=8; i<=12; i++) {
pinMode (i, OUTPUT);
}
}
void loop() {
for (int i=12; i>=8; i--) {
for (int k=8; k<=i; k++){
digitalWrite(k,HIGH);
delay(100);
digitalWrite(k,LOW);
}
digitalWrite(i,HIGH);
}
}

А вот так этот выглядит если использовать обычную монтажную плату: видео

Задание.

Попробуйте с помощью цикла for построить различные схемы движения огонька.

На этом пока всё.
Удачных экспериментов.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: