Онлайн консультации экспертов
Регистрация
Войти
Эксперты
Вопросы
Услуги
Блоги
Форум
Психология
Life-Коучинг
Депрессия и апатия
Дети и подростки
Зависимости
Любовные отношения
Профессия и карьера
Психогенетика
Самопознание и развитие
Семейные отношения
Страхи и фобии
Стрессы и травмы
Эзотерика
Астрология
Биоэнергетика
Гадания онлайн
Йога
Магия
Мистика
Нумерология
Обереги, талисманы
Парапсихология
Руны
Таро
Тантра
Толкование сновидений
Фэн-шуй
Хиромантия
Целители
Ченнелинг
Чтение прошлых жизней
Шаманизм
Экстрасенсы
Ясновидящие
Юриспруденция
Адвокаты
Административное право
Возмещение вреда
Воинский учет
Гражданство
ДТП, ОСАГО, ГИБДД
Договорное право
ЖКХ,ТСЖ,выселение
Загранпаспорта, визы
Интеллектуальная собств.
Кредиты и займы
Медицинское право
Налоги
Наследство
Недвижимость
ООО, АО, ИП
Оценка имущества
Потребительское право
Правоведение
Произвол чиновников
Семейное право
Социальное право
Страховое право
Судебные приставы
Судебный эксперт
Таможня
Трудовое право
Уголовное право
Учеба и наука
Английский язык
Биология
География
Журналистика
Иностранные языки
Информатика
История
Литература
Математика
Педагогика
Право
Русский язык
Учеба за границей
Физика
Философия
Химия
Технологии
.Net/C#
1С, Парус
C/C++
Delphi
Java/J2EE
JavaScript,Ajax,HTML
PHP
Unix
Администрирование
Базы данных
Видео и аудио
Графический дизайн
Железо
Компьют. безопасность
Компьютерная графика
Мобильные и планшеты
Продвижение сайта, SEO
Создание сайтов
Телеком, связь
Тестирование
Все категории
Медицина
Акушерство и гинекология
Аллергология (иммунология)
Анестезиология
Ветеринария
Гастроэнтерология
Гомеопатия
Дерматология
Диетология
Инфектология
Кардиология
Наркология
Неврология
Нефрология
Онкология
Ортопедия
Оториноларингология
Офтальмология
Педиатрия
Психиатрия
Ревматология
Рентгенология
Сексология
Стоматология
Терапия
Травматология
Урология
Фармация
Хирургия
Эндокринология
Красота, Здоровье
Ароматерапия
Аюрведа
Восточная медицина
Здоровое питание
Имидж и стиль
Косметология
Литотерапия
Нетрадиционная медицина
Рэйки
Спорт
Бизнес
Банки и кредиты
Банковские карты
Бизнес в Интернете
Бизнес-план
Бухучет, налоги
Бюджет
Домашний бизнес
Инвестиции
Инновационные проекты
Источники дохода
Карьера
Маркетинг
Недвижимость
Персонал
Промышленность
Продажи
Реклама
Сельское хозяйство
Управление
Услуги
Финансовые рынки
Дом, отдых, хобби
Авто
Дом
Дизайн интерьера
Домашние питомцы
Житейская психология
Знакомства
Искусство
Кулинария, рестораны
Музыка
Отопление и вентиляция
Охота и рыбалка
Политика
Ремонт и строительство
Рукоделие
Садоводство
Туризм
Фото и Видео
Шопинг
Религия
Бон
Буддизм
Индуизм
Ислам
Христианство
Категории вопросов
Психология
Любовные отношения
Семейные отношения
Дети и подростки
Самопознание и развитие
Депрессия и апатия
Страхи и фобии
Стрессы и травмы
Зависимости
Профессия и карьера
Психогенетика
Life-Коучинг
Эзотерика
Гадания онлайн
Ясновидящие
Экстрасенсы
Таро
Толкование сновидений
Астрология
Магия
Нумерология
Биоэнергетика
Руны
Парапсихология
Хиромантия
Целители
Мистика
Чтение прошлых жизней
Шаманизм
Обереги, талисманы
Фэн-шуй
Ченнелинг
Тантра
Йога
Юриспруденция
Недвижимость
Трудовое право
Семейное право
ДТП, ОСАГО, ГИБДД
Кредиты и займы
Уголовное право
Адвокаты
Наследство
ЖКХ,ТСЖ,выселение
Гражданство
Потребительское право
Социальное право
Договорное право
Налоги
ООО, АО, ИП
Воинский учет
Судебные приставы
Административное право
Возмещение вреда
Правоведение
Загранпаспорта, визы
Таможня
Страховое право
Произвол чиновников
Судебный эксперт
Интеллектуальная собств.
Оценка имущества
Медицинское право
Учеба и наука
Математика
Физика
Химия
Информатика
Русский язык
Английский язык
Иностранные языки
Биология
История
Литература
Право
География
Философия
Педагогика
Учеба за границей
Журналистика
Технологии
Железо
Мобильные и планшеты
Компьют. безопасность
Видео и аудио
Телеком, связь
Администрирование
Создание сайтов
Компьютерная графика
Базы данных
Продвижение сайта, SEO
Графический дизайн
Тестирование
C/C++
PHP
Java/J2EE
.Net/C#
Delphi
JavaScript,Ajax,HTML
Unix
1С, Парус
Медицина
Акушерство и гинекология
Терапия
Педиатрия
Урология
Психиатрия
Хирургия
Ветеринария
Наркология
Фармация
Стоматология
Гомеопатия
Офтальмология
Неврология
Оториноларингология
Травматология
Рентгенология
Инфектология
Кардиология
Ортопедия
Онкология
Аллергология (иммунология)
Эндокринология
Анестезиология
Диетология
Нефрология
Гастроэнтерология
Сексология
Дерматология
Ревматология
Красота, Здоровье
Косметология
Здоровое питание
Имидж и стиль
Спорт
Нетрадиционная медицина
Восточная медицина
Ароматерапия
Рэйки
Аюрведа
Литотерапия
Бизнес
Бухучет, налоги
Продажи
Бизнес в Интернете
Банки и кредиты
Карьера
Услуги
Источники дохода
Домашний бизнес
Бизнес-план
Маркетинг
Реклама
Управление
Персонал
Недвижимость
Банковские карты
Бюджет
Инвестиции
Финансовые рынки
Инновационные проекты
Промышленность
Сельское хозяйство
Дом, отдых, хобби
Дом
Ремонт и строительство
Авто
Туризм
Знакомства
Житейская психология
Домашние питомцы
Искусство
Музыка
Фото и Видео
Отопление и вентиляция
Садоводство
Рукоделие
Шопинг
Кулинария, рестораны
Дизайн интерьера
Охота и рыбалка
Политика
Религия
Христианство
Буддизм
Ислам
Индуизм
Бон
Получить код кнопки
Главная
Вопросы
Учеба и наука
Информатика
Помогите оптимизировать программу. Arduino Uno .…
Получить ответ
Помогите оптимизировать программу. Arduino Uno . Есть 3 диода и кнопка на макетной плате.1 нажатие на кнопку-загорается 1й с частотой 1 Гц, второе нажатие - 2й диод с частой 2 Гц и так с3м диодом. - вопрос №3227497
#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
struct diode
{
int on_time; // vremya dioda vo vklyuchenom sostoyanii (kratnoe 10 ms) } vmeste
int off_time; // v vykl sost (kratnoe 10 ms) } peroid
};
void mode_0(int *coynter_button); // vse diody ne goryat
void mode_1(int *coynter_button); // d1 — 1 Gc; d2 — vykl; d3 — vykl;
void mode_2(int *coynter_button); // d1 — vykl; d2 — 2 Gc; d3 — vykl;
void mode_3(int *coynter_button); // d1 — vykl; d2 — vykl; d3 — 3 Gc;
void flicker (struct diode diode_1, struct diode diode_2, struct diode diode_3);
// funkciya vkl/vykl diodov s zadanoj chastotoj i proverka najatiya knopki
int main(void)
{
DDRB = (1<<DDB3) | (1<<DDB2) | (1<<DDB1);
// vystavlijaem dannye linii na vyhod k nim podklyucheny diody
// liniya DDRB4 nastroena na vhod, k nej podklyuchena knopka
PORTB = (1<<PB4);
// vystavlyaem nachalnye znacheniya dlya vyhodov log 0 ili 1
// opredelyaem sostoyanie dlya vhodov 1 — podtyanut k 1
// 0 — z sostojanie
int counter_button = 0; //schetchik nazhatij knopki
while (1)
{
switch (counter_button)
{
case 0:
mode_0(&counter_button);
break;
case 1:
mode_1(&counter_button);
break;
case 2:
mode_2(&counter_button);
break;
case 3:
mode_3(&counter_button);
break;
}
}
return 0;
}
void mode_0(int *counter_button)
{
struct diode diode_1 = {0, 100}; //
struct diode diode_2 = {0, 100}; // parametry vremeni vkl/vykl diodov
struct diode diode_3 = {0, 100}; //
flicker (diode_1, diode_2, diode_3);
(*counter_button) ++; // uvilichivaem zmachenie schetchika nazhatij
return;
}
// analogichno dlya vseh funkcij mode_x
void mode_1(int *counter_button)
{
struct diode diode_1 = {100, 100};
struct diode diode_2 = {0, 0};
struct diode diode_3 = {0, 0};
flicker (diode_1, diode_2, diode_3);
(*counter_button) ++;
return;
}
void mode_2(int *counter_button)
{
struct diode diode_1 = {0, 0};
struct diode diode_2 = {50, 50};
struct diode diode_3 = {0, 0};
flicker (diode_1, diode_2, diode_3);
(*counter_button) ++;
return;
}
void mode_3(int *counter_button)
{
struct diode diode_1 = {0, 0};
struct diode diode_2 = {0, 0};
struct diode diode_3 = {33, 33};
flicker (diode_1, diode_2, diode_3);
(*counter_button) = 1;
return;
}
void flicker (struct diode diode_1, struct diode diode_2, struct diode diode_3)
{
int diode_counter_1 = 0; //
int diode_counter_2 = 0; // schetchiki perioda mercaniya diodov
int diode_counter_3 = 0; //
int previous_press = (PINB & (1<<PB4)); // staroe znachenie sostoyaniya knopki
int current_press = (PINB & (1<<PB4)); // tekuschee znachenie sostoyaniya knopki
// eti 2 peremennye nuzhny dlya proverki knopki po frontu
while ( 1 )
{
if (diode_counter_1 < diode_1.
on_time) // uslovie vklyuchenogo dioda
{
PORTB |= (1<<PB3); // vklyuchaem diod vystavlyaya nujnoe znachenie bita
}
else
{
PORTB &= ~(1<<PB3); // vyklyuchaem diod
}
diode_counter_1++; // uvelichivaem znachenie schetchika dlya dannogo dioda
if (diode_counter_1 > (diode_1.on_time + diode_1.off_time))
// uslovie zaversheniya perioda
{
diode_counter_1 = 0; // sbrasyvaem schetchik
}
// analogichno dlya vseh diodov
if (diode_counter_2 < diode_2.on_time)
{
PORTB |= (1<<PB2);
}
else
{
PORTB &= ~(1<<PB2);
}
diode_counter_2++;
if (diode_counter_2 > (diode_2.on_time + diode_2.off_time))
{
diode_counter_2 = 0;
}
if (diode_counter_3 < diode_3.on_time)
{
PORTB |= (1<<PB1);
}
else
{
PORTB &= ~(1<<PB1);
}
diode_counter_3++;
if (diode_counter_3 > (diode_3.on_time + diode_3.off_time))
{
diode_counter_3 = 0;
}
current_press = (PINB & (1<<PB4)); // proveryaem cnopku i prisvaivaem
// tekuschee znachenie
if (current_press > previous_press) // uslovie po perednemu frontu
{
_delay_us(50); // zaderzhka dlya predotvrascheniya effecta
// drebezzheniya kontaktov
break;
}
previous_press = current_press; // prisvaivaem tekuschee znachenie staromu
_delay_ms(10); // zadergka cikla
// zaderzhka cikla
Еугения, [27.03.19 20:39]
* (vremya vkl + vremya vykl) = realnoe vremya perioda
}
return;
}
Aleksandra
27.03.19
Учеба и наука
/
Информатика
1 ответ
arduino
atmelstudio
c
c++
Ответы
Александр Константинович
Вы описали работу устройства не полностью.
Когда начинает мигать второй диод, первый прекращает или нет? и так далее…
28.03.19
Еva
от 100 p.
4.9
399 отзывов
Рейтинг:
121
998
6-й
в Учебе и науке
Общаться в чате
Читать ответы
Посмотреть всех экспертов из раздела
Учеба и наука
>
Информатика
Похожие вопросы
Здравствуйте. Что делать если выдает: terminate called after throwing an instance of 'std::filesystem::__cxx11::filesystem_error' what(): filesystem error: status: Too many levels of symbolic links
1 ответ
21.12.23
Евгений
Технологии
>
C/C++
Разработчик ПО или Python разроботчик
0 ответов
14.09.23
Владислав
Учеба и наука
>
Информатика
как отправлять данные с com porta arduino ide в excel в режиме реального времени
0 ответов
17.06.23
Roma
Технологии
>
C/C++
Даны два массива целых чисел a и b, каждый их которых не содержит повторяющихся элементов.
0 ответов
02.11.22
Леонид
Учеба и наука
>
Информатика
Необходимо сделать комплекс датчиков (температура, углекислый газ, влажность) на основе платы Arduino Uno R3.
0 ответов
14.09.22
Михаил
Технологии
>
Железо
Пользуйтесь нашим приложением
Войти
Есть аккаунт в соцсети?
Используйте его для мгновенного входа
Используйте Ваш аккаунт LiveExpert для входа:
E-mail
Пароль
Забыли пароль?
Запомнить меня
Войти
или
Регистрация/Вход
Регистрация
Имя
E-mail
С правилами
оферты
и
политикой
согласен
Зарегистрироваться
или
Вход
E-mail
Пароль
Забыли пароль?
Запомнить меня
Войти
Ожидается ответ от
...
Входящий вызов от
...
Завершить вызов
Мы используем файлы cookie. Пользуясь сайтом, вы принимаете условия нашего соглашения.
Принять
Детальнее