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

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

12.12.2019, 20:41. Показов 6355. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2019, 20:41
Ответы с готовыми решениями:

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

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

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

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

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

8
Эксперт С++
8482 / 6149 / 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
Эксперт С++
8482 / 6149 / 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
Эксперт С++
8482 / 6149 / 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
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
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru