С Новым годом! Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 30
1

Цикл по нажатию кнопки Arduino

12.12.2019, 20:41. Показов 6429. Ответов 8

Author24 — интернет-сервис помощи студентам
Мне нужно, чтобы при нажатии кнопки запускался цикл, и только один раз. На данный момент функция loop() запускается сразу. Что в данном скетче не так?
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
/*  Скетч демонстрирует перелив всех цветов радуги с пульсацией их яркости
 *  Подходит для любого количества светодиодов
 *  Номер вывода Arduino и количество используемых светодиодов указывается при объявлении объекта led(вывод,количество)
 *  Значение константы z определяет задержку в мс, чем выше значение, тем медленнее перелив
 */
 
#include <iarduino_NeoPixel.h>                       //  Подключаем библиотеку iarduino_NeoPixel для работы со светодиодами NeoPixel
iarduino_NeoPixel led(6,25);                         //  Объявляем объект LED указывая (№ вывода Arduino к которому подключены светодиоды NeoPixel, количество используемых светодиодов)
 
      uint8_t j;                                     //  Объявляем переменную для хранения значения сдвига спектра цветов для всех светодиодов (от 0 до 255)
      uint8_t k;                                     //  Объявляем переменную для хранения положения сдвига спектра цвета для каждого светодиода на спектре j (зависит от количества светодиодов)
      uint8_t r, g, b;                               //  Объявляем переменную для хранения цветов RGB для каждого светодиода
const uint8_t z=5;                                   //  Определяем константу указывающую задержку в мс (чем выше значение, тем медленнее перелив цветов) 
      uint8_t l=127;                                 //  Определяем переменную для хранения яркости
      bool    f=1;                                   //  Определяем флаг, указывающий уменьшать или увеличивать яркость
int flag=0;
boolean butt;
void setup(){
  butt = !digitalRead(3);
  pinMode(3, INPUT_PULLUP);
    Serial.begin(9600);                              //  Инициируем передачу данных в монитор последовательного порта
    if(led.begin()) {Serial.println("Ok");}          //  Инициируем работу со светодиодами и выводим сообщение об успешной инициализации
    else            {Serial.println("Err");}         //  Если инициализация невозможна (не хватает памяти для хранения цветов всех светодиодов), то выводим сообщение об ошибке
}
 
void loop(){
if(digitalRead(3)==HIGH&&flag==0)//если кнопка нажата   
     // и перемення flag равна 0 , то ...
 
{
 
      digitalWrite(3,!digitalRead(3));
       flag=1;
        //это нужно для того что бы с каждым нажатием кнопки
        //происходило только одно действие
        // плюс защита от "дребезга"  100%
 
    j++;                                             //  Смещаем спектр цветов для всех светодиодов
    for(uint16_t i=0; i<led.count(); i++){           //  Проходим по всем светодиодам
        k=((uint16_t)(i*256/led.count())+j);         //  Определяем положение очередного светодиода на смещённом спектре цветов
        if(k<85) {        b=0; r=k*3; g=255-r;}else  //  Перелив от зелёного к красному, через жёлтый
        if(k<170){k-=85;  g=0; b=k*3; r=255-b;}else  //  Перелив от красного к синему  , через фиолетовый
                 {k-=170; r=0; g=k*3; b=255-g;}      //  Перелив от синего   к зелёному, через голубой
        led.setColor(i, r,g,b, l);                   //  Устанавливаем выбранный цвет для очередного светодиода
    }   led.write();                                 //  Записываем цвета всех светодиодов
    delay(z);                                        //  Устанавливаем задержку
    if(j%2==0){                                      //  Если переменная j кратна 2
        if(f){l++; if(l==200){f=0;}}                 //  Увеличиваем яркость всех светодиодов (l)
        else {l--; if(l==0)  {f=1;}}                 //  Уменьшаем   яркость всех светодиодов (l)
    }
}
if(digitalRead(3)==LOW&&flag==1)//если кнопка НЕ нажата
//и переменная flag равна - 1 ,то ...
 
  {
  flag=0;//обнуляем переменную flag
 }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.12.2019, 20:41
Ответы с готовыми решениями:

Не останавливается цикл по нажатию кнопки на форме
у меня есть цикл в программе который запускается с кнопки на форме, и я хочу прервать этот цикл с...

Как организовать цикл, завершающийся по нажатию кнопки
Есть задача выводить на экран многозначные числа. Нажимаем на 1, выводится 1, еще раз нажимаем 1,...

Добавление текстбоксов по нажатию клавиши и удаление по нажатию другой кнопки
Всем доброго времени суток. Хотел попросить помощи в написании следующего кода. Кое что набросал,...

Разбить строку на слова по нажатию первой кнопки, отсортировать список слов по нажатию второй
Разбить строку, введённую в первую ячейку первого столбца активного листа, на слова, и вывести их в...

Нарисовать домик по нажатию кнопки, и звезду по нажатию на форме
Нарисовать домик по нажатию кнопки и звезду по нажатию на форме

8
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.12.2019, 22:06 2
Дребезг контактов?
0
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 30
13.12.2019, 15:59  [ТС] 3
я же исключаю дребезг вот этим
C++
1
digitalWrite(3,!digitalRead(3));
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
13.12.2019, 16:00 4
Цитата Сообщение от vanek2194 Посмотреть сообщение
я же исключаю дребезг вот этим
Нет.
0
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 30
13.12.2019, 16:48  [ТС] 5
Если я буду использовать функцию
C++
1
delay()
или
C++
1
millis()
, для того чтобы предотвратить дребезг кнопок, все в принципе должно работать?
0
61 / 50 / 12
Регистрация: 25.01.2010
Сообщений: 257
16.12.2019, 17:16 6
Цитата Сообщение от vanek2194 Посмотреть сообщение
Если я буду использовать функцию
Смотря как использовать. В интернете очень легко найти способы устранения дребезга: функции, классы и даже библиотеки.
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.12.2019, 19:46 7
Цитата Сообщение от vanek2194 Посмотреть сообщение
, для того чтобы предотвратить дребезг кнопок, все в принципе должно работать?
Если правильно использовать то да. Я обычно использую delay(200) 0.2 с как правило достаточно что бы проигнорировать дребезг. Но все зависит от конкретной ситуации.
0
3 / 3 / 1
Регистрация: 24.03.2013
Сообщений: 304
30.12.2019, 20:49 8
Код где то скопипастил или сам делал?
0
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 30
31.01.2020, 10:25  [ТС] 9
Пример из библиотеки NeoPixel, чуть измененный
0
31.01.2020, 10:25
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.01.2020, 10:25
Помогаю со студенческими работами здесь

Прорисовка в окне по нажатию кнопки(обработчик кнопки) MFC
Сообсвтенно вот какая пробелма. Создал кнопку, в ее обработчике написал, что по 2-ому нажатию левой...

По нажатию кнопки нужно, чтобы появлялось 3-4 кнопки
,и по нажатию на одну из них создавалось новое окно в котором будет информация указанная на кнопке....

Изменить цвет кнопки (button) по нажатию кнопки
Здравствуйте, подскажите, пожалуйста, как сделать что когда нажимаешь на копку меняется цвет...

По нажатию кнопки добавить панель, по нажатию другой поле ввода в панель
Разработать программу с двумя кнопками на форме. При нажатии на первую на форму добавляется одна...

Если CheckBox отмечен, то по нажатию кнопки текст копируется в название формы, иначе в название кнопки
Разработать Windows Forms приложение, содержащее TextBox, CheckBox и кнопку. Если CheckBox отмечен,...

Как открыть Form5 по нажатию кнопки на Form4 и закрыть Form3 после нажатия кнопки на Form4?
Всем привет. Я немогу понять как при нажатии на кнопку которая находится в Form 4 открыть Form 5 и...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru