Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 07.08.2024
Сообщений: 1

Мигание светодиодов по частотам от кнопки

07.08.2024, 11:22. Показов 650. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте добрые люди помогите написать код при котором при помощи нажатии на кнопку один раз 3 светодиода мигают на чистоте 0.2 герца, при втором нажатии на кнопку они мигают на чистоте 1.3, герца при третьем нажатии на кнопку они мигают на частоте 3 герца. Используя массивы и таймеры, камень atmega 328p среда программирования atmel studio.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.08.2024, 11:22
Ответы с готовыми решениями:

Мигание двух светодиодов от кнопки
Задача такова: Нужно подсоединить два светодиода в любой цифровой выход.По нажатию кнопки светодиоды должны мигать с разной частотой. ...

Поочередное мигание светодиодов
Необходимо реализовать следующее: Светодиоды зажигаются циклически один за другим от 1 до 8-го. В каждый момент времени горит один...

Мигание светодиодов
Доброго времени суток. Использую МК STM32103C8T6. Согласно схеме светодиоды находятся на порту B, на 0 и 1 пинах. Но есть некоторые...

3
1184 / 670 / 113
Регистрация: 15.05.2012
Сообщений: 4,078
09.08.2024, 15:05
В чём проблема?
0
 Аватар для ramen
3 / 3 / 0
Регистрация: 18.05.2014
Сообщений: 31
14.09.2024, 22:22
Нате
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <avr/io.h>
 
#include <util/delay.h>
 
#include <avr/interrupt.h>
 
#define LED_PIN_MASK (1 << PD0) | (1 << PD1) | (1 << PD2)
 
#define BUTTON_PIN PB0
 
// Частота мигания в герцах
 
#define FREQ_1 0.2
 
#define FREQ_2 1.3
 
#define FREQ_3 3.0
 
volatile uint8_t mode = 0; // Переменная для хранения режима
 
void setup() {
 
    DDRD |= LED_PIN_MASK;    // Настроить LED_PIN_MASK как выход
 
    PORTD &= ~LED_PIN_MASK;  // Выключить светодиоды
 
    DDRB &= ~(1 << BUTTON_PIN);    // Настроить BUTTON_PIN как вход
 
    PORTB |= (1 << BUTTON_PIN);    // Включить подтягивающий резистор на кнопке
 
    // Настроить прерывание на CHANGE уровня для кнопки
 
    PCICR |= (1 << PCIE0);   // Enable pin change interrupt for PORTB
 
    PCMSK0 |= (1 << PCINT0); // Enable pin change interrupt for PB0
 
    sei();                   // Включить глобальные прерывания
 
}
 
ISR(PCINT0_vect) {
 
    if (!(PINB & (1 << BUTTON_PIN))) { // Проверка, нажата ли кнопка
 
        mode = (mode + 1) % 3;         // Переключение между режимами 0, 1 и 2
 
        _delay_ms(20);                 // Анти-дребезг
 
        while (!(PINB & (1 << BUTTON_PIN))); // Ждать отпускания кнопки
 
        _delay_ms(20);                 // Анти-дребезг
 
    }
 
}
 
void blink_leds(double frequency) {
 
    double period = 1 / frequency;
 
    PORTD ^= LED_PIN_MASK;  // Переключение состояния светодиодов
 
    _delay_ms(period * 500); // Задержка согласно периоду (в миллисекундах)
 
}
 
int main(void) {
 
    setup();
 
    while (1) {
 
        switch (mode) {
 
            case 0:
 
                blink_leds(FREQ_1);
 
                break;
 
            case 1:
 
                blink_leds(FREQ_2);
 
                break;
 
            case 2:
 
                blink_leds(FREQ_3);
 
                break;
 
        }
 
    }
 
    return 0;
 
}
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
16.09.2024, 23:21
Цитата Сообщение от ramen Посмотреть сообщение
ISR(PCINT0_vect)
Прерывание для кнопки - плохая идея. Оно может возникать слишком часто и в непредсказуемое время. Кнопки лучше опрашивать поллингом с интервалом в десяток - сотню миллисекунд.
Исключения - выход из сна и аварийная кнопка (скажем, концевой выключатель от двигателя).
Цитата Сообщение от ramen Посмотреть сообщение
C
1
2
ISR(PCINT0_vect) {
while (!(PINB & (1 << BUTTON_PIN))); // Ждать отпускания кнопки
Длительные задержки (тем более, задержки с непредсказуемой длительностью, как здесь) - плохая идея. Пока контроллер ждет, что с кнопки уберут упавшую на нее книгу, он не сможет выполнять более важные функции.
Цитата Сообщение от ramen Посмотреть сообщение
double period = 1 / frequency;
Использование дробных чисел в МК, а тем более в МК без FPU - плохая идея. Просто загляните в дизасм.
Цитата Сообщение от ramen Посмотреть сообщение
_delay_ms(period * 500);
Это вообще скорее всего не сработает. _delay_ms это не функция, а макрос. Причем во многих реализациях принимать переменные он не умеет. Тем более - дробные числа.
Цитата Сообщение от ramen Посмотреть сообщение
#define FREQ_1 0.2
Если у константы есть физический смысл и размерность, полезно ее указать: #define FREQ_1_Hz 0.2
Цитата Сообщение от ramen Посмотреть сообщение
volatile uint8_t mode = 0; // Переменная для хранения режима
Вот это правильно. Многие забывают volatile.
Цитата Сообщение от ramen Посмотреть сообщение
DDRD |= LED_PIN_MASK;
Это тоже правильно. Ну, по крайней мере, лучше ардуиновских digitalWrite. Но можно еще улучшить, если добавить макроконстант на все светодиоды по отдельности, плюс возможность разнести их по разным портам. Но писанины это займет порядочно.
---
Еще в домашке ТСа сказано "используя массивы и таймеры". Но тут выбор за вами: можно добавить "для галочки", можно честно разобраться как ими пользоваться (если считаете, что вам самому это нужно), а можно и так оставить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.09.2024, 23:21
Помогаю со студенческими работами здесь

[VHDL] Мигание светодиодов
Устройство моргания 4-мя светодиодами.По сути,программа очень простая.Но у меня в итоге светодиоды &quot;бегают&quot; (т.е. загорелся...

Мигание светодиодов с разной скоростью и направлением
Возникли проблемы с реализацией цикличного мигания светодиодов с переключением скорости и направления по кнопке. Схема не реагирует на...

Мигание светодиодов и системный динамик
Доброго времени суток! у меня тут возникла такая проблема, нужно написать программу что бы пикнул системный динамик и мигнули диоды на...

Написать программу для порта rs232 - мигание светодиодов
Дали задание: написать программу на Паскале для порта rs232 чтобы на вот этом приборе по нажатии 1 кнопки светодиоды бегали в одну сторону,...

Мигание Кнопки
Ребят подскажите пожалуйста как сделать кнопку прозрачной, и заставить при нажатии мигать красным цветом. Спасибо


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru