Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| products:aruno:exp14 [2020/06/11 16:41] – создано alexnik | products:aruno:exp14 [2020/07/02 12:18] (текущий) – alexnik | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ===== Эксперимент 14. Счетчик ===== | + | ===== Эксперимент 14. Секундомер |
| - | В современных электронных устройствах часто используются | + | В прошлом эксперименте мы научились выводить данные на LED - индикатор. |
| - | светодиодные или жидко- кристаллические 7-сегментные индикаторы для отображения цифр. | + | |
| - | В этом эксперименте мы изучим устройство такого | + | |
| - | Индикатор | + | |
| - | цифры 8. Каждый из сегментов | + | |
| - | других. Зажигая определенные сегменты, можно | + | |
| - | цифру от 0 до 9. Кроме того, | + | |
| - | сегмент имеет свое название, | + | |
| - | от a до h. | + | |
| - | + | ||
| - | {{ : | + | |
| - | + | ||
| - | В каждом | + | |
| - | подается напряжение, | + | |
| - | («LED» — это сокращенное названия светодиода по-английски | + | |
| - | «light emitting diode») — это сборка из 8-ми светодиодов в одном | + | |
| - | корпусе (7 сегментов и точка). | + | |
| - | + | ||
| - | Мы знаем, что у светодиода два вывода. Получается, что | + | |
| - | светодиодов 16 выводов, | + | |
| - | уменьшения количества выводов светодиоды внутри соединены | + | |
| - | специальным способом. У всех светодиодов соединены между | + | |
| - | собой катоды. Про такой | + | |
| - | катодом». | + | |
| - | + | ||
| - | {{ : | + | |
| ==== Схема эксперимента ==== | ==== Схема эксперимента ==== | ||
| - | + | {{ : | |
| - | {{ : | + | {{ : |
| // | // | ||
| - | <WRAP center round alert 60%> | + | {{ : |
| - | Токоограничительные резисторы обязательны! | + | |
| - | </ | + | |
| - | + | ||
| - | В схеме мы использовали токоограничительные резисторы на каждом светодиоде. Казалось бы проще поставить один резистор на катод, чем по резистору на каждый анод, но нет, такой вариант не является правильным. Дело в том, что ток через резистор будет зависеть от количества включенных сегментов, | + | |
| - | + | ||
| - | {{ : | + | |
| // | // | ||
| Строка 45: | Строка 14: | ||
| ==== Программный код эксперимента ==== | ==== Программный код эксперимента ==== | ||
| - | <file cpp Exp13[enable_line_numbers=" | + | <file cpp Exp14[enable_line_numbers=" |
| int a = 8; | int a = 8; | ||
| int b = 9; | int b = 9; | ||
| Строка 53: | Строка 22: | ||
| int f = 7; | int f = 7; | ||
| int g = 6; | int g = 6; | ||
| - | int dp = 10; | + | int h = 10; |
| + | int keyPin = 12; | ||
| - | void setup() { | + | // Цифра " |
| - | | + | void display1(void) { |
| - | | + | |
| + | | ||
| | | ||
| - | void loop() { | + | // Цифра " |
| + | void display2(void) { | ||
| + | digitalWrite(a, | ||
| + | digitalWrite(b, | ||
| + | digitalWrite(g, | ||
| + | digitalWrite(e, | ||
| + | digitalWrite(d, | ||
| + | } | ||
| + | // Цифра " | ||
| + | void display3(void) { | ||
| + | digitalWrite(a, | ||
| + | digitalWrite(b, | ||
| + | digitalWrite(c, | ||
| + | digitalWrite(d, | ||
| + | digitalWrite(g, | ||
| + | } | ||
| + | // Цифра " | ||
| + | void display4(void) { | ||
| + | digitalWrite(f, | ||
| + | digitalWrite(b, | ||
| + | digitalWrite(g, | ||
| + | digitalWrite(c, | ||
| + | } | ||
| + | // Цифра " | ||
| + | void display5(void) { | ||
| digitalWrite(a, | digitalWrite(a, | ||
| digitalWrite(f, | digitalWrite(f, | ||
| Строка 65: | Строка 60: | ||
| digitalWrite(c, | digitalWrite(c, | ||
| digitalWrite(d, | digitalWrite(d, | ||
| + | | ||
| + | // Цифра " | ||
| + | void display6(void) { | ||
| + | digitalWrite(a, | ||
| + | digitalWrite(f, | ||
| + | digitalWrite(g, | ||
| + | digitalWrite(c, | ||
| + | digitalWrite(d, | ||
| + | digitalWrite(e, | ||
| + | | ||
| + | // Цифра " | ||
| + | void display7(void) { | ||
| + | digitalWrite(a, | ||
| + | digitalWrite(b, | ||
| + | digitalWrite(c, | ||
| + | | ||
| + | // Цифра " | ||
| + | void display8(void) { | ||
| + | digitalWrite(a, | ||
| + | digitalWrite(b, | ||
| + | digitalWrite(g, | ||
| + | digitalWrite(c, | ||
| + | digitalWrite(d, | ||
| + | digitalWrite(e, | ||
| + | digitalWrite(f, | ||
| + | | ||
| + | // Цифра " | ||
| + | void display9(void) { | ||
| + | digitalWrite(a, | ||
| + | digitalWrite(b, | ||
| + | digitalWrite(g, | ||
| + | digitalWrite(c, | ||
| + | digitalWrite(d, | ||
| + | digitalWrite(f, | ||
| + | | ||
| + | // Цифра " | ||
| + | void display0(void) { | ||
| + | digitalWrite(a, | ||
| + | digitalWrite(b, | ||
| + | digitalWrite(c, | ||
| + | digitalWrite(d, | ||
| + | digitalWrite(e, | ||
| + | digitalWrite(f, | ||
| } | } | ||
| - | </file> | + | // |
| + | void clearDisplay(void) { | ||
| + | digitalWrite(a, | ||
| + | digitalWrite(b, | ||
| + | digitalWrite(g, | ||
| + | digitalWrite(c, | ||
| + | digitalWrite(d, | ||
| + | digitalWrite(e, | ||
| + | digitalWrite(f, | ||
| + | | ||
| - | Программа | + | void setup() { |
| + | int i; | ||
| + | for(i=4; | ||
| + | pinMode(i, | ||
| + | pinMode(keyPin, | ||
| + | digitalWrite(h, | ||
| + | display0(); | ||
| + | } | ||
| + | |||
| + | int x = -1; | ||
| + | int switchState = 0; | ||
| + | int oldSwitchState = 0; | ||
| + | boolean lightsOn = false; | ||
| + | void loop() { | ||
| + | | ||
| + | if (switchState != oldSwitchState) { | ||
| + | oldSwitchState = switchState; | ||
| + | if (switchState == HIGH) { | ||
| + | lightsOn = !lightsOn; | ||
| + | } | ||
| + | } | ||
| + | | ||
| + | delay(100); | ||
| + | x = x + 1; | ||
| + | } | ||
| + | if (x == 0) {clearDisplay(); | ||
| + | if (x == 1) {clearDisplay(); | ||
| + | if (x == 2) {clearDisplay(); | ||
| + | if (x == 3) {clearDisplay(); | ||
| + | if (x == 4) {clearDisplay(); | ||
| + | if (x == 5) {clearDisplay(); | ||
| + | if (x == 6) {clearDisplay(); | ||
| + | if (x == 7) {clearDisplay(); | ||
| + | if (x == 8) {clearDisplay(); | ||
| + | if (x == 9) {clearDisplay(); | ||
| + | if (x > 9) {x = 0;} | ||
| + | } | ||
| + | </ | ||
| + | На первый взгляд программа | ||
| + | В начале программы мы инициализируем переменные соответствующие номерам пинов к которым подключен LED - индикатор и кнопка.\\ | ||
| + | Далее | ||
| + | В функции '' | ||
| + | В функции '' | ||
| + | Благодаря тому, что мы отображение цифр | ||
| ==== Дополнительное задание ==== | ==== Дополнительное задание ==== | ||
| <WRAP center round tip 60%> | <WRAP center round tip 60%> | ||
| - | * Измени код программы, чтобы | + | Добавь к цифрам |
| </ | </ | ||
| + | |||
| + | === Задание повышенной сложности === | ||
| + | <WRAP center round tip 60%> | ||
| + | Напиши программу с аналогичным результатом используя массивы | ||
| + | </ | ||
| + | |||