Робототехника: различия между версиями
Перейти к навигации
Перейти к поиску
Строка 31: | Строка 31: | ||
== Схема 2 == | == Схема 2 == | ||
[[Файл:Схема-2.PNG|500px]] | [[Файл:Схема-2.PNG|500px]] | ||
+ | |||
+ | === Код === | ||
+ | <syntaxhighlight lang="C++" line> | ||
+ | //Задание глобальных переменных | ||
+ | //Глобальные переменные обладают областью видимости в любом месте программы | ||
+ | int ledLamps[] = {2,3,4,5,6,7,8,9,10}; | ||
+ | //Задание массива (нескольких значений), хранящего номера пинов для светодиодов | ||
+ | int lastLamp = 8; //Значение (маркер) для хранения последнего включенного //светодиода (последний элемент – всего 9 элементов, нумерация начинается с 0) | ||
+ | //Установка начальных параметров | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | //Будем обходить значения по очереди (в цикле), увеличивая с каждым проходом | ||
+ | //цикла значение переменной element и присваивать текущему значению пина, | ||
+ | //значение OUTPUT | ||
+ | int element; //Объявление вспомогательной переменной для обхода цикла | ||
+ | for (element = 0; element <= 8; element++) //Конструкция цикла | ||
+ | { //конструкция «++» означает инкремент (увеличение на 1) | ||
+ | pinMode(ledLamps[element], OUTPUT); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void loop() // Основной цикл | ||
+ | { | ||
+ | //Включение светодиодов по очереди | ||
+ | //Циклом обходим элементы массива номеров пинов | ||
+ | int element; //Объявление вспомогательной переменной для обхода цикла | ||
+ | //Обходим все элементы массива пинов | ||
+ | for (element = 0; element<=8; element++) | ||
+ | { | ||
+ | //Проверим: если сейчас не последний элемент – значит, просто «моргнуть» | ||
+ | if(element != lastLamp) | ||
+ | { | ||
+ | digitalWrite(ledLamps[element], HIGH); //Включить светодиод | ||
+ | delay(100); //Задержка на 0,1 секунды | ||
+ | digitalWrite(ledLamps[element], LOW); //Выключить светодиод | ||
+ | delay(100); //Задержка на 0,1 секунды | ||
+ | } | ||
+ | else //Иначе, если это последний элемент, только зажечь | ||
+ | { | ||
+ | digitalWrite(ledLamps[element], HIGH); //Включить светодиод | ||
+ | delay(100); //Задержка на 0,1 секунды | ||
+ | lastLamp--; //Т.к. последний элемент зажгли, нужно уменьшить маркер | ||
+ | //последнего элемента на 1 (конструкция «--» означает декремент | ||
+ | //(вычитание) единицы) | ||
+ | break; //Принудительно прерываем цикл, чтобы остальные светодиоды, | ||
+ | //которые уже зажжены, не трогать | ||
+ | } | ||
+ | } | ||
+ | //После того как цикл прошел несколько раз (по количеству светодиодов), маркер | ||
+ | //последнего светодиода станет меньше нуля, поэтому мы выключим все светодиоды | ||
+ | //по очереди и снова установим маркер на 8 | ||
+ | if (lastLamp<0) | ||
+ | { | ||
+ | //Снова в цикле обойдем все светодиоды и отключим каждый | ||
+ | for (element = 0; element <=8; element++) | ||
+ | { | ||
+ | digitalWrite(ledLamps[element], LOW); //Отключение | ||
+ | delay(200); //Задержка на 0,2 секунды | ||
+ | } | ||
+ | lastLamp = 8; //Возвращаем маркер на 8 (начальное положение) | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
== Схема 3 == | == Схема 3 == | ||
[[Файл:Схема-3.JPG|500px]] | [[Файл:Схема-3.JPG|500px]] |
Версия 10:10, 10 января 2023
Схема 1
Код
1 //Задание глобальных переменных целочисленного типа integer
2 //Присваивание переменной ledLamp (светодиод) значение выхода 12 на плате
3 int ledLamp = 12;
4
5 //Установка начальных параметров
6 void setup()
7 {
8 //Задание пина ledLamp в качестве выходного
9 pinMode(ledLamp, OUTPUT);
10 }
11
12 //Основной цикл (повторяется бесконечно)
13 void loop()
14 {
15 //Назначение выходного сигнала от пина (выхода ledLamp) HIGH (5 вольт)
16 digitalWrite(ledLamp, HIGH); //Включение светодиода
17 //Пауза 2000 – задается в миллисекундах (1 секунда = 1000 миллисекунд)
18 delay(2000);
19 //Назначение выходного сигнала от пина (выхода ledLamp) LOW (0 вольт)
20 digitalWrite(ledLamp, LOW); //Выключение светодиода
21 //И опять задержка 2 секунды
22 delay(2000);
23 }
Схема 2
Код
1 //Задание глобальных переменных
2 //Глобальные переменные обладают областью видимости в любом месте программы
3 int ledLamps[] = {2,3,4,5,6,7,8,9,10};
4 //Задание массива (нескольких значений), хранящего номера пинов для светодиодов
5 int lastLamp = 8; //Значение (маркер) для хранения последнего включенного //светодиода (последний элемент – всего 9 элементов, нумерация начинается с 0)
6 //Установка начальных параметров
7
8 void setup()
9 {
10 //Будем обходить значения по очереди (в цикле), увеличивая с каждым проходом
11 //цикла значение переменной element и присваивать текущему значению пина,
12 //значение OUTPUT
13 int element; //Объявление вспомогательной переменной для обхода цикла
14 for (element = 0; element <= 8; element++) //Конструкция цикла
15 { //конструкция «++» означает инкремент (увеличение на 1)
16 pinMode(ledLamps[element], OUTPUT);
17 }
18 }
19
20 void loop() // Основной цикл
21 {
22 //Включение светодиодов по очереди
23 //Циклом обходим элементы массива номеров пинов
24 int element; //Объявление вспомогательной переменной для обхода цикла
25 //Обходим все элементы массива пинов
26 for (element = 0; element<=8; element++)
27 {
28 //Проверим: если сейчас не последний элемент – значит, просто «моргнуть»
29 if(element != lastLamp)
30 {
31 digitalWrite(ledLamps[element], HIGH); //Включить светодиод
32 delay(100); //Задержка на 0,1 секунды
33 digitalWrite(ledLamps[element], LOW); //Выключить светодиод
34 delay(100); //Задержка на 0,1 секунды
35 }
36 else //Иначе, если это последний элемент, только зажечь
37 {
38 digitalWrite(ledLamps[element], HIGH); //Включить светодиод
39 delay(100); //Задержка на 0,1 секунды
40 lastLamp--; //Т.к. последний элемент зажгли, нужно уменьшить маркер
41 //последнего элемента на 1 (конструкция «--» означает декремент
42 //(вычитание) единицы)
43 break; //Принудительно прерываем цикл, чтобы остальные светодиоды,
44 //которые уже зажжены, не трогать
45 }
46 }
47 //После того как цикл прошел несколько раз (по количеству светодиодов), маркер
48 //последнего светодиода станет меньше нуля, поэтому мы выключим все светодиоды
49 //по очереди и снова установим маркер на 8
50 if (lastLamp<0)
51 {
52 //Снова в цикле обойдем все светодиоды и отключим каждый
53 for (element = 0; element <=8; element++)
54 {
55 digitalWrite(ledLamps[element], LOW); //Отключение
56 delay(200); //Задержка на 0,2 секунды
57 }
58 lastLamp = 8; //Возвращаем маркер на 8 (начальное положение)
59 }
60 }