У меня такой вопрос, что нужно прописать в скетче, чтобы при нажатии кнопки канал реле открывался на определенное кол-во времени, которое задавать будет пользователь?
Какой именно канал реле, при следующем нажатии открывать другой канал или тот же? Для чего вторая кнопка на фото?
При нажатии кнопки запускаете таймер, включаете реле. При достижении указанного времени реле выключается, таймер обнуляется. Как будете задавать время вы не озвучили.
В общем, у меня такая ситуация, каждая кнопка открывает свой канал, первая открывает CH1, вторая, соответственно, CH2, и мне нужно написать программу, чтобы при однократном нажатии кнопки канал реле открывался на определенное кол-во времени, например, на 2 секунды. К каждому каналу реле в последствии будет подключен соленоид)
Код (Text): const int button1 = 7; const int button2 = 6; int buttonState1 = 0; int buttonState2 = 0; const int relay1 = 3; const int relay2 = 4; int relayState1 = LOW; int relayState2 = LOW; void setup () { pinMode (relay1, OUTPUT); pinMode (relay2, OUTPUT); pinMode (button1, INPUT); pinMode (button2, INPUT); } void loop () { if (buttonState1 == HIGH) { digitalWrite (relayState1, HIGH); } else { digitalWrite (relayState1, LOW); } if (buttonState2 == HIGH) { digitalWrite (relayState2, HIGH); } else { digitalWrite (relayState2, LOW); } } пока это все, что есть у меня, это мне предлагали сделать через код для светодиода, когда он без паузы работает, но толком до конца не объяснили что и как
попробуй Код (Text): const int button1 = 7; const int button2 = 6; int buttonState1 = 0; int buttonState2 = 0; const int relay1 = 3; const int relay2 = 4; int relayState1 = LOW; int relayState2 = LOW; unsigned long currentMillis_1 = 0; unsigned long currentMillis_2 = 0; long interval_1 = 2000; /// задаёшь время срабатывания long interval_2 = 3000; void setup () { pinMode (relay1, OUTPUT); pinMode (relay2, OUTPUT); pinMode (button1, INPUT); pinMode (button2, INPUT); } void loop () { if (buttonState1 == HIGH) { currentMillis_1 = millis(); relayState1 = HIGH; } if (millis() - currentMillis_1 >= interval_1) { currentMillis_1 =0; relayState1 = LOW; } if (buttonState2 == HIGH) { currentMillis_2 = millis(); relayState2 = HIGH; } if(millis() - currentMillis_2 >= interval_2) { currentMillis_2 =0; relayState2 = LOW; } digitalWrite (relay1, relayState1); digitalWrite (relay2, relayState2); } только ещё надо добавить борьбу с дребезгом кнопок обязательно.
const int button1 = 7; const int button2 = 6; int buttonState1 = 0; int buttonState2 = 0; const int relay1 = 3; const int relay2 = 4; int relayState1 = LOW; int relayState2 = LOW; void setup () { pinMode (relay1, OUTPUT); pinMode (relay2, OUTPUT); pinMode (button1, INPUT); pinMode (button2, INPUT); } void loop () { if (buttonState1) { digitalWrite (relayState1, HIGH); delay(2000); } else { digitalWrite (relayState1, LOW); } if (buttonState2) { digitalWrite (relayState2, HIGH); delay(2000); } else { digitalWrite (relayState2, LOW); } } Ась?
кнопки неправильно подключил http://wiki.amperka.ru/конспект-arduino:кнопка подключи как кнопка со стягивающим резистором
const int button1 = 7; const int button2 = 6; bool buttonState1 ; bool buttonState2 ; const int relay1 = 3; const int relay2 = 4; int relayState1 = LOW; int relayState2 = LOW; void setup () { pinMode (relay1, OUTPUT); pinMode (relay2, OUTPUT); pinMode (button1, INPUT); pinMode (button2, INPUT); } void loop () { bool buttonState1 = digitalRead(button1); bool buttonState2 = digitalRead(button2); if (buttonState1 == 1) { digitalWrite (relayState1, HIGH); delay(2000); } else { digitalWrite (relayState1, LOW); } if (buttonState2 == 1) { digitalWrite (relayState2, HIGH); delay(2000); } else { digitalWrite (relayState2, LOW); } } Также потом в if попробуй gjvtyznm 1 на true.
Я бы написал так: Код (Text): #include <DI.h> //подключаем библиотеку DI - обработка дискретного входа из набора библиотек от X-Dron #include <Timer_P.h> //подключаем библиотеку Timer_P - работа с таямерами из набора библиотек от X-Dron #define Key_PIN 2 //PIN кнопки #define Relay_PIN 7 //PIN реле Timer_P Timer_R; //создание и инициализация объекта класса Timer_P // Создание объектов типа "Дистретный вход" они посажены описанные выше пины. Фильтр антидребезга 30мс. DI Key_IN(Key_PIN, 30); long Pulse; void setup() { //Режимы выходов pinMode(Relay_PIN, OUTPUT); //делать pinMode для входов не нужно. Они инициализируются при создании объекта класса DI //при работе со входами используется INPUT_PULLUP-режим. Значения входов нормализовываются во время обработки класса. //замкнутая кнопка - логическая 1. } void loop() { // Производится считывание с пинов дискретного входа и фильтрация через внутреннюю переменную класса. Key_IN.DI_Refresh(); //Запускаем таймер по фильтрованной кнопке запуска таймера. //Сброс выполнения таймера - нет. //Режим работы таймера - Mode = 1 extended pulse //Время работы таймера - Pulse. //Результат работы таймера выводим на светодиод работы таймера digitalWrite(Relay_PIN, Timer_R.Timer(Key_IN.DI_Read(), 0, 1, Pulse)); } Здесь комментариев больше, чем кода (в функциях всего 3 строчки). Подробнее о библиотеке и описание режима работы класса Timer_P здесь: http://forum.amperka.ru/threads/Таймеры-и-программный-антидребезг-входов.4280/ Универсальный код на любое количество пар (в пределах адресного поля платы контроллера) кнопка-реле ниже. В данном случае на 4 пары. Код (Text): #include <DI.h> #include <Timer_P.h> #define COUNT 4 //задается количество пар int buttonPins[COUNT] = {2, 3, 4, 5}; //задаются пины кнопок int relaysPins[COUNT] = {6, 7, 8, 9}; //задаются соответствующие кнопкам пины реле DI Keys[COUNT]; //создание массива из класса DI - дискретный вход Timer_P RelayTimers[COUNT]; long Pulse[COUNT] = {1000, 1000, 1000, 1000}; //задаются длительности импульсов по умолчанию void setup() { for (int i = 0; i < COUNT; i++) { pinMode(relaysPins[i], OUTPUT); //инициализация выходов реле Keys[i].Init(buttonPins[i], 10); //инициализация дискретных входов класса DI, антидребезг 10мс } } void loop() { for (int i = 0; i < COUNT; i++) { Keys[i].DI_Refresh(); digitalWrite(relaysPins[i], RelayTimers[i].Timer(Keys[i].DI_Read(), 0, 1, Pulse[i])); } } кнопки подключаются как здесь
не могу понять, в чем причина отказа системы, я уже даже вручную пытался прописать саму библиотеку X-Dron_lib-master, но он почему-то не хочет импортировать её.
содержимое скаченного архива нужно просто скопировать в папку "<документы пользователя>\Arduino\libraries". Скачай архив еще раз. До сегодняшнего утра на сервере была не самая актуальная версия. Для твоего случая разницы быть не должно, но лучше использовать обновленную.