Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
products:laboratory_iot_с:exp17 [2024/11/14 13:25] – [Массивы] labuser30 | products:laboratory_iot_с:exp17 [Дата неизвестна] (текущий) – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ===== Эксперимент 17. Индикатор уровня ===== | ||
- | |||
- | В технике часто применяются индикаторы уровней на светодиодной шкале. Например в звукозаписывающем оборудовании, | ||
- | |||
- | В левой части платы конструктора имеется 6 светодиодов подходящих по цвету для использования в качестве шкалы. Когда уровень сигнала в пределах нормы, он отображается зеленым, | ||
- | |||
- | Подключим все 6 светодиодов к микроконтроллеру. | ||
- | ==== Схема эксперимента ==== | ||
- | |||
- | {{ : | ||
- | // | ||
- | |||
- | {{ : | ||
- | // | ||
- | |||
- | ==== Программный код эксперимента ==== | ||
- | |||
- | <file arduino Exp17.ino[enable_line_numbers=" | ||
- | #define ACD_PIN A0 | ||
- | |||
- | int value = 0; | ||
- | int myPins[6] = {5, 12, 13, 14, 15, 16}; | ||
- | | ||
- | void ledOff(){ | ||
- | for (int i = 0; i < 6; i++) { | ||
- | digitalWrite(myPins[i], | ||
- | } | ||
- | } | ||
- | |||
- | void ledOn(int count){ | ||
- | for (int i = 0; i < count; i++) { | ||
- | digitalWrite(myPins[i], | ||
- | } | ||
- | } | ||
- | |||
- | void setup() | ||
- | { | ||
- | for (int i = 0; i < 6; i++) { | ||
- | pinMode(myPins[i], | ||
- | } | ||
- | } | ||
- | |||
- | void loop() | ||
- | { | ||
- | value = analogRead(ACD_PIN); | ||
- | ledOff(); | ||
- | | ||
- | if (value > 850) ledOn(6); | ||
- | else if (value > 680) ledOn(5); | ||
- | else if (value > 510) ledOn(4); | ||
- | else if (value > 340) ledOn(3); | ||
- | else if (value > 170) ledOn(2); | ||
- | else ledOn(1); | ||
- | } | ||
- | </ | ||
- | |||
- | В коде программы много нового. Давайте разбираться. | ||
- | |||
- | <code arduino [enable_line_numbers=" | ||
- | int myPins[6] = {5, 12, 13, 14, 15, 16}; | ||
- | </ | ||
- | |||
- | ==== Массивы ==== | ||
- | Ранее мы уже много раз сталкивались с // | ||
- | |||
- | {{ : | ||
- | |||
- | В строке 4 мы объявили массив '' | ||
- | |||
- | Теперь нам необходимо переключить 6 выводов микроконтроллера в режим '' | ||
- | <code arduino [enable_line_numbers=" | ||
- | void setup() | ||
- | { | ||
- | for (int i = 0; i < 6; i++) { | ||
- | pinMode(myPins[i], | ||
- | } | ||
- | } | ||
- | </ | ||
- | Мы уже знакомы с циклом '' | ||
- | |||
- | Объявляем подпрограмму '' | ||
- | <code arduino [enable_line_numbers=" | ||
- | void ledOff(){ | ||
- | for (int i = 0; i < 6; i++) { | ||
- | digitalWrite(myPins[i], | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | Эта функция гасит все светодиоды. Она поочередно перебирает все светодиоды и выключает их. | ||
- | |||
- | Объявляем функцию '' | ||
- | <code arduino [enable_line_numbers=" | ||
- | void ledOn(int count){ | ||
- | for (int i = 0; i < count; i++) { | ||
- | digitalWrite(myPins[i], | ||
- | } | ||
- | } | ||
- | </ | ||
- | Она нужна для включения нужного количества светодиодов подряд. В качестве | ||
- | |||
- | Отлично, | ||
- | |||
- | И, когда нужный объект светодиода в переменной, | ||
- | <code python [enable_line_numbers=" | ||
- | led.on() | ||
- | </ | ||
- | |||
- | Теперь у нас есть 2 функции '' | ||
- | |||
- | <code arduino [enable_line_numbers=" | ||
- | void loop() | ||
- | { | ||
- | value = analogRead(ACD_PIN); | ||
- | ledOff(); | ||
- | | ||
- | if (value > 850) ledOn(6); | ||
- | else if (value > 680) ledOn(5); | ||
- | else if (value > 510) ledOn(4); | ||
- | else if (value > 340) ledOn(3); | ||
- | else if (value > 170) ledOn(2); | ||
- | else ledOn(1); | ||
- | } | ||
- | </ | ||
- | |||
- | Здесь все просто. Мы считываем значение напряжения с помощью АЦП, выключаем все светодиоды и анализируем сколько светодиодов нужно зажечь. Мы помним, | ||
- | |||
- | Мы последовательно с помощью оператора '' | ||
- | |||
- | Внимательные экспериментаторы заметили отсутствие фигурных скобок '' | ||
- | |||
- | ==== Дополнительное задание ==== | ||
- | <WRAP center round tip 60%> | ||
- | * Попробуй изменить интервалы, | ||
- | * Измени 1 строку в программе, | ||
- | </ | ||