Ви не увійшли.
Хочу сделать умный кран для фильтрований воды. У нас с женой постоянная проблема то, я то жена поставит чайник и пока вода медленно набирается занимаемся своими делами. Потом забываем и только уже когда вода льётся через край вспоминаем о чайнике с водой.
Хочу сделать простую систему на, ардуино нано. Берём три сенсорных кнопки. И для них распечатываем на 3Д принтере небольшой корпус. Подсоединяем к, ардуинке кнопки, мосфет транзистор для управления нагрузкой в 12 в и к мосфету клапан открывания и закрывает воды.
Все что касается хардверной части я сделал, а вот как написать скетч я не знаю
Программа должна быть вод такой.
Есть три кнопки, нажав на первую мы набираем стакан. Тоесть проходит допустим 45секунд. Мосфет держит клапан открытым в течении 45секунд. при повторном нажатии на ту же кнопку мосфет закрывается.
На второй кнопке все тожесамое но только уже 2 минуты.
А вот на третей вода льётся только при нажатии. Только убрал палец, клапан закрывается. Но если нажать на третью кнопку и одновременно на первую включается на 7 минут
Сам я вообще не знаю как это можно реализовать. Как по мне идея классная и очень полезная для нас и уверен что многим придётся по душе. Но с реализацией у меня возникли проблемы. Буду очень благодарен за помощь
Неактивний
довольно простая программа, я сейчас занят но недельки через две - три, когда со своим проектом закончу могу попробовать, если конечно потребность останется.
Неактивний
Разберешься в настройке.
//**/
unsigned long mill;// переменная для millis()
typedef void (*pDo)() ;// тип -функция обработчик
//------Cl_Led----------------------
// класс светодиод
class Cl_Led {
protected:
const byte pin;
bool led;
unsigned long past, time;
byte state; //0 выкл/ 1 вкл / 2 мигать
/*установить в состояние*/
void stand(byte state_) {
past = mill;
state = state_;
switch (state) {
case 0: // выкл
digitalWrite(pin, led = LOW);
break;
case 1: // вкл
digitalWrite(pin, led = HIGH);
break;
case 2:// мигать
digitalWrite(pin, led = !led);
break;
case 3:// короткое выключение
digitalWrite(pin, led = LOW);
break;
case 4:// короткое включение
digitalWrite(pin, led = HIGH);
break;
}
}
public:
/*конструктор*/
Cl_Led(byte pin_): pin(pin_) {}
/*инициализация-вставить в setup()*/
void init() {
pinMode(pin, OUTPUT);
OFF();
}
/*работа-вставить в loop()*/
void run() {
if (state == 2 && mill - past >= time)stand(2);
if (state == 3 && mill - past >= time)stand(1);
if (state == 4 && mill - past >= time)stand(0);
}
/*включить*/
void ON() {
stand(1);
}
/*коротко включить*/
void ON(unsigned long time_) {
time = time_;
stand(4);
}
/*выключить*/
void OFF() {
stand(0);
}
/*коротко выключить*/
void OFF(unsigned long time_) {
time = time_;
stand(3);
}
/*мигать*/
void blink(unsigned long time_ = 200) {
time = time_;
stand(2);
}
};
//------Cl_Btn----------------------
// класс кнопка
class Cl_Btn {
protected:
const byte pin;
pDo Do;//обработчик
bool bounce = 0;
bool btn = 1, oldBtn;
unsigned long past;
public:
/*конструктор*/
Cl_Btn(byte pin_, pDo Do_): pin(pin_), Do(Do_) {}
/*инициализация-вставить в setup()*/
void init() {
pinMode(pin, INPUT_PULLUP);
}
/*работа-вставить в loop()*/
void run() {
bool newBtn = digitalRead(pin);
if (!bounce && newBtn != btn) {
bounce = 1;
past = mill;
}
if (bounce && mill - past >= 10) {
bounce = 0 ;
oldBtn = btn;
btn = newBtn;
if (!btn && oldBtn) Do();
}
}
};
//-----компоновка----------------------
Cl_Led Led(/*пин*/13);
void DoBtn1() {
Led.ON(200);
Serial.println("DoBtn1");
}
void DoBtn2() {
Led.OFF(200);
Serial.println("DoBtn2");
}
void DoBtn3() {
Led.blink();
Serial.println("DoBtn3");
}
Cl_Btn Btn1(/*пин*/2,/*обработчик*/DoBtn1);
Cl_Btn Btn2(/*пин*/3,/*обработчик*/DoBtn2);
Cl_Btn Btn3(/*пин*/4,/*обработчик*/DoBtn3);
//-----main----------------------
void setup() {
Serial.begin(9600);
Led.init();
Btn1.init();
Btn2.init();
Btn3.init();
}
void loop() {
mill = millis();
Led.run();
Btn1.run();
Btn2.run();
Btn3.run();
}
/*Скетч использует 2858 байт (9%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 251 байт (12%) динамической памяти, оставляя 1797 байт для локальных переменных. Максимум: 2048 байт.
*/
Неактивний
Автору срочно нужен кувшин фильтр для воды
это платная или бесплатная помощь ?
А за сколько вы возьмётесь написать такой скетч ?
Просто это не коммерческая деятельность. Делаю чисто для себя. И я все детали заказал на алиекспоес за 300грн
К сожалению не могу заплатить такую цену как предлагают ребята ниже.
Неактивний
vvr пише:это платная или бесплатная помощь ?
А за сколько вы возьмётесь написать такой скетч ?
Просто это не коммерческая деятельность. Делаю чисто для себя. И я все детали заказал на алиекспоес за 300грн
К сожалению не могу заплатить такую цену как предлагают ребята ниже.
так по моему ( 2018-01-20 22:32:50 qwone ) уже прикрепил тут скетч ... или вы этого не поняли ... смотри пост #4
Остання редакція renoshnik (2018-01-23 14:00:11)
Неактивний
Написал скеч,
Пин 2 это вход от 1 кнопки
Пин 3 вход от 2ой кнопки
Пин 4 вход от 3 кнопки
Пин 7 выход.
незабудьте установить библиотеку SimpleTimer.hSimpleTimer-master.zip
в зависимости от ваших кнопок может значение антидребезга быть другое
у меня на 150 - #define TASTENVIBRATION 150
чтобы 1 и 3 кнопки нажать надо как бы - с третей начинать, т.е сначало 3ию и сразу 1ую
#define TASTE1PIN 2
#define TASTE2PIN 3
#define TASTE3PIN 4
#define WASSERHAHNAUSGANGPIN 7
#define TASTENVIBRATION 150
#include <SimpleTimer.h>
SimpleTimer timer;
bool taste1Gedrueckt = false;
bool taste2Gedrueckt = false;
bool taste3Gedrueckt = false;
bool sperreFunktion = false;
int taste1Dauer = 45; // 45 Sekunden
int taste2Dauer = 120; // 120 Sekunden
int taste3Dauer = 420; //420 Sekunden
int timerID;
void setup() {
pinMode(TASTE1PIN,INPUT_PULLUP);
pinMode(TASTE2PIN,INPUT_PULLUP);
pinMode(TASTE3PIN,INPUT_PULLUP);
pinMode(WASSERHAHNAUSGANGPIN,OUTPUT);
digitalWrite(WASSERHAHNAUSGANGPIN,LOW);
}
void loop() {
timer.run();
//////Taste1
if(!digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN))
{
delay(TASTENVIBRATION);
if(!digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN))
{
taste1Gedrueckt = !taste1Gedrueckt;
if(taste1Gedrueckt && !sperreFunktion)
{
timerID = timer.setTimeout(taste1Dauer * 1000, tasteAufgabeStop);
digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
}
if(!taste1Gedrueckt)
{
sperreFunktion =false;
tasteAufgabeStop();
}
}
}
////Taste 2
if(!digitalRead(TASTE2PIN))
{
delay(TASTENVIBRATION);
if(!digitalRead(TASTE2PIN))
{
taste2Gedrueckt = !taste2Gedrueckt;
if(taste2Gedrueckt && !sperreFunktion)
{
timerID = timer.setTimeout(taste2Dauer * 1000, tasteAufgabeStop);
digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
}
if(!taste2Gedrueckt)
{
sperreFunktion =false;
tasteAufgabeStop();
}
}
}
////Taste 3 und 1
if(!digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN))
{
delay(TASTENVIBRATION);
if(!digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN))
{
taste3Gedrueckt = !taste3Gedrueckt;
if(taste3Gedrueckt && !sperreFunktion)
{
timerID = timer.setTimeout(taste3Dauer * 1000, tasteAufgabeStop);
digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
}
if(!taste3Gedrueckt)
{
sperreFunktion =false;
tasteAufgabeStop();
}
}
}
///nur Taste 3
if(!digitalRead(TASTE3PIN) && !sperreFunktion)
{
digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);
}
if( digitalRead(TASTE3PIN) && !sperreFunktion)
{
digitalWrite(WASSERHAHNAUSGANGPIN,LOW);
}
}
void tasteAufgabeStop()
{
digitalWrite(WASSERHAHNAUSGANGPIN,LOW);sperreFunktion =false; taste1Gedrueckt = false; taste2Gedrueckt = false; taste3Gedrueckt = false;
timer.disable(timerID);
}
Остання редакція Selen (2018-01-24 03:19:37)
Неактивний
Написал скеч,
Пин 2 это вход от 1 кнопки
Пин 3 вход от 2ой кнопки
Пин 4 вход от 3 кнопки
Пин 7 выход.в зависимости от ваших кнопок может значение антидребезга быть другое
у меня на 150 - #define TASTENVIBRATION 150
чтобы 1 и 3 кнопки нажать надо как бы - с третей начинать, т.е сначало 3ию и сразу 1ую#define TASTE1PIN 2 #define TASTE2PIN 3 #define TASTE3PIN 4 #define WASSERHAHNAUSGANGPIN 7 #define TASTENVIBRATION 150 #include <SimpleTimer.h> SimpleTimer timer; bool taste1Gedrueckt = false; bool taste2Gedrueckt = false; bool taste3Gedrueckt = false; bool sperreFunktion = false; int taste1Dauer = 45; // 45 Sekunden int taste2Dauer = 120; // 120 Sekunden int taste3Dauer = 420; //420 Sekunden int timerID; void setup() { pinMode(TASTE1PIN,INPUT_PULLUP); pinMode(TASTE2PIN,INPUT_PULLUP); pinMode(TASTE3PIN,INPUT_PULLUP); pinMode(WASSERHAHNAUSGANGPIN,OUTPUT); digitalWrite(WASSERHAHNAUSGANGPIN,LOW); } void loop() { timer.run(); //////Taste1 if(!digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN)) { delay(TASTENVIBRATION); if(!digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN)) { taste1Gedrueckt = !taste1Gedrueckt; if(taste1Gedrueckt && !sperreFunktion) { timerID = timer.setTimeout(taste1Dauer * 1000, tasteAufgabeStop); digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true; } if(!taste1Gedrueckt) { sperreFunktion =false; tasteAufgabeStop(); } } } ////Taste 2 if(!digitalRead(TASTE2PIN)) { delay(TASTENVIBRATION); if(!digitalRead(TASTE2PIN)) { taste2Gedrueckt = !taste2Gedrueckt; if(taste2Gedrueckt && !sperreFunktion) { timerID = timer.setTimeout(taste2Dauer * 1000, tasteAufgabeStop); digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true; } if(!taste2Gedrueckt) { sperreFunktion =false; tasteAufgabeStop(); } } } ////Taste 3 und 1 if(!digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN)) { delay(TASTENVIBRATION); if(!digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN)) { taste3Gedrueckt = !taste3Gedrueckt; if(taste3Gedrueckt && !sperreFunktion) { timerID = timer.setTimeout(taste3Dauer * 1000, tasteAufgabeStop); digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true; } if(!taste3Gedrueckt) { sperreFunktion =false; tasteAufgabeStop(); } } } ///nur Taste 3 if(!digitalRead(TASTE3PIN) && !sperreFunktion) { digitalWrite(WASSERHAHNAUSGANGPIN,HIGH); } if( digitalRead(TASTE3PIN) && !sperreFunktion) { digitalWrite(WASSERHAHNAUSGANGPIN,LOW); } } void tasteAufgabeStop() { digitalWrite(WASSERHAHNAUSGANGPIN,LOW);sperreFunktion =false; taste1Gedrueckt = false; taste2Gedrueckt = false; taste3Gedrueckt = false; timer.disable(timerID); }
Вау, спасибо вам огромное!!! Вечером все соберу прошью и отпишусь вам. Спасибо !!
Тут больше проблема в сенсорных кнопках. Какие именно хотелось бы?
Кнопки у меня вот такие
https://www.aliexpress.com/item/32761802828/32761802828.html
Неактивний
Написал скеч,
Пин 2 это вход от 1 кнопки
Пин 3 вход от 2ой кнопки
Пин 4 вход от 3 кнопки
Пин 7 выход.
незабудьте установить библиотеку SimpleTimer.hSimpleTimer-master.zipв зависимости от ваших кнопок может значение антидребезга быть другое
у меня на 150 - #define TASTENVIBRATION 150
чтобы 1 и 3 кнопки нажать надо как бы - с третей начинать, т.е сначало 3ию и сразу 1ую#define TASTE1PIN 2 #define TASTE2PIN 3 #define TASTE3PIN 4 #define WASSERHAHNAUSGANGPIN 7 #define TASTENVIBRATION 150 #include <SimpleTimer.h> SimpleTimer timer; bool taste1Gedrueckt = false; bool taste2Gedrueckt = false; bool taste3Gedrueckt = false; bool sperreFunktion = false; int taste1Dauer = 45; // 45 Sekunden int taste2Dauer = 120; // 120 Sekunden int taste3Dauer = 420; //420 Sekunden int timerID; void setup() { pinMode(TASTE1PIN,INPUT_PULLUP); pinMode(TASTE2PIN,INPUT_PULLUP); pinMode(TASTE3PIN,INPUT_PULLUP); pinMode(WASSERHAHNAUSGANGPIN,OUTPUT); digitalWrite(WASSERHAHNAUSGANGPIN,LOW); } void loop() { timer.run(); //////Taste1 if(!digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN)) { delay(TASTENVIBRATION); if(!digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN)) { taste1Gedrueckt = !taste1Gedrueckt; if(taste1Gedrueckt && !sperreFunktion) { timerID = timer.setTimeout(taste1Dauer * 1000, tasteAufgabeStop); digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true; } if(!taste1Gedrueckt) { sperreFunktion =false; tasteAufgabeStop(); } } } ////Taste 2 if(!digitalRead(TASTE2PIN)) { delay(TASTENVIBRATION); if(!digitalRead(TASTE2PIN)) { taste2Gedrueckt = !taste2Gedrueckt; if(taste2Gedrueckt && !sperreFunktion) { timerID = timer.setTimeout(taste2Dauer * 1000, tasteAufgabeStop); digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true; } if(!taste2Gedrueckt) { sperreFunktion =false; tasteAufgabeStop(); } } } ////Taste 3 und 1 if(!digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN)) { delay(TASTENVIBRATION); if(!digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN)) { taste3Gedrueckt = !taste3Gedrueckt; if(taste3Gedrueckt && !sperreFunktion) { timerID = timer.setTimeout(taste3Dauer * 1000, tasteAufgabeStop); digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true; } if(!taste3Gedrueckt) { sperreFunktion =false; tasteAufgabeStop(); } } } ///nur Taste 3 if(!digitalRead(TASTE3PIN) && !sperreFunktion) { digitalWrite(WASSERHAHNAUSGANGPIN,HIGH); } if( digitalRead(TASTE3PIN) && !sperreFunktion) { digitalWrite(WASSERHAHNAUSGANGPIN,LOW); } } void tasteAufgabeStop() { digitalWrite(WASSERHAHNAUSGANGPIN,LOW);sperreFunktion =false; taste1Gedrueckt = false; taste2Gedrueckt = false; taste3Gedrueckt = false; timer.disable(timerID); }
Единственное только, насколько я понял для Мосфет транзистора нужен Шим сигнал а 7 вывод не поддерживает его. Его поддерживают 3,5,6,9,10,11
Неактивний
Для транзистора ШИМ нужен только тогда если вы хотите плавно менять нагрузку, например плавно тушить лампочку. Вы можете пин изменить но это ничего не даст, чтоб активировать ШИМ нужен не digitalWrite a analogWrite.
А с кнопками, я думаю проблем не должно быть. Правда я такими никогда не пользовался.
Остання редакція Selen (2018-01-24 09:57:30)
Неактивний
Для транзистора ШИМ нужен только тогда если вы хотите плавно менять нагрузку, например плавно тушить лампочку. Вы можете пин изменить но это ничего не даст, чтоб активировать ШИМ нужен не digitalWrite a analogWrite.
А с кнопками, я думаю проблем не должно быть. Правда я такими никогда не пользовался.
Понял. Я просто думал что шим нужен в любом случае. Буду знать.
Вот что у меня вышло. Почему-то пока работает не коректно. все собрал на коленке конечно.
На видео все видно.
https://youtu.be/SCdWwpoggeo
Неактивний
Вот что у меня вышло. Почему-то пока работает не коректно. все собрал на коленке конечно.
Разумеется так и будет. Очень сложный алгоритм при отсутсвии минимальных знаний дает такой эффект.
Неактивний
Вот как у меня это работает,
https://www.youtube.com/watch?v=qkVASr_rsI8
Как у вас кнопки подключены? должно быть так пин замыкается кнопкой на землю , а если у вас сенсорные можете прибором(тестером) проверить что на выходе от сенсорных кнопок при нажатии.
у меня такое ощущение как будто подтягивающие резисторы не работают
Я предлагаю постмотреть какие значения имеют входы на кнопках, загрузите этот скетч и посмотрите в сериальном мониторе какое значение имеет каждая кнопка. Должно быть так не нажата 1 нажата 0. значения не должны сами по себе меняться
#define TASTE1PIN 2
#define TASTE2PIN 3
#define TASTE3PIN 4
#define WASSERHAHNAUSGANGPIN 7
#define TASTENVIBRATION
void setup() {
Serial.begin(9600);
pinMode(TASTE1PIN,INPUT_PULLUP);
pinMode(TASTE2PIN,INPUT_PULLUP);
pinMode(TASTE3PIN,INPUT_PULLUP);
pinMode(WASSERHAHNAUSGANGPIN,OUTPUT);
}
void loop() {
Serial.print("Taste 1 --- "); Serial.println(digitalRead(TASTE1PIN));
Serial.print("Taste 2 --- "); Serial.println(digitalRead(TASTE2PIN));
Serial.print("Taste 3 --- "); Serial.println(digitalRead(TASTE3PIN));
}
Остання редакція Selen (2018-01-24 20:13:49)
Неактивний
Вот как у меня это работает,
https://www.youtube.com/watch?v=qkVASr_rsI8Как у вас кнопки подключены? должно быть так пин замыкается кнопкой на землю , а если у вас сенсорные можете прибором(тестером) проверить что на выходе от сенсорных кнопок при нажатии.
у меня такое ощущение как будто подтягивающие резисторы не работаютЯ предлагаю постмотреть какие значения имеют входы на кнопках, загрузите этот скетч и посмотрите в сериальном мониторе какое значение имеет каждая кнопка. Должно быть так не нажата 1 нажата 0. значения не должны сами по себе меняться
#define TASTE1PIN 2 #define TASTE2PIN 3 #define TASTE3PIN 4 #define WASSERHAHNAUSGANGPIN 7 #define TASTENVIBRATION void setup() { Serial.begin(9600); pinMode(TASTE1PIN,INPUT_PULLUP); pinMode(TASTE2PIN,INPUT_PULLUP); pinMode(TASTE3PIN,INPUT_PULLUP); pinMode(WASSERHAHNAUSGANGPIN,OUTPUT); } void loop() { Serial.print("Taste 1 --- "); Serial.println(digitalRead(TASTE1PIN)); Serial.print("Taste 2 --- "); Serial.println(digitalRead(TASTE2PIN)); Serial.print("Taste 3 --- "); Serial.println(digitalRead(TASTE3PIN)); }
Мультиметр показывает 3.6 вольта при нажатии на кнопку.
Вот что показывает на новом скетче.
https://youtu.be/cnoPeG_-FWc
Спасибо вам огромное за вашу помощ и уделённое время. Очень ценю таких людей!!!
Остання редакція Рувим (2018-01-24 23:38:59)
Неактивний
теперь понятно. ваши кнопки дают при нажатии 1, а мой скетч сделан так что нажатие кнопки это 0. нужно скетч переделывать.
попробуйте этот, вроде ничего не забыл
#define TASTE1PIN 2
#define TASTE2PIN 3
#define TASTE3PIN 4
#define WASSERHAHNAUSGANGPIN 7
#define TASTENVIBRATION 150
#include <SimpleTimer.h>
SimpleTimer timer;
bool taste1Gedrueckt = false;
bool taste2Gedrueckt = false;
bool taste3Gedrueckt = false;
bool sperreFunktion = false;
int taste1Dauer = 45; // 45 Sekunden
int taste2Dauer = 120; // 120 Sekunden
int taste3Dauer = 420; //420 Sekunden
int timerID;
void setup() {
pinMode(TASTE1PIN,INPUT);
pinMode(TASTE2PIN,INPUT);
pinMode(TASTE3PIN,INPUT);
pinMode(WASSERHAHNAUSGANGPIN,OUTPUT);
digitalWrite(WASSERHAHNAUSGANG, LOW);
}
void loop() {
timer.run();
//////Taste1
if(digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN))
{
delay(TASTENVIBRATION);
if(digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN))
{
taste1Gedrueckt = !taste1Gedrueckt;
if(taste1Gedrueckt && !sperreFunktion)
{
timerID = timer.setTimeout(taste1Dauer * 1000, tasteAufgabeStop);
digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
}
if(!taste1Gedrueckt)
{
sperreFunktion =false;
tasteAufgabeStop();
}
}
}
////Taste 2
if(digitalRead(TASTE2PIN))
{
delay(TASTENVIBRATION);
if(digitalRead(TASTE2PIN))
{
taste2Gedrueckt = !taste2Gedrueckt;
if(taste2Gedrueckt && !sperreFunktion)
{
timerID = timer.setTimeout(taste2Dauer * 1000, tasteAufgabeStop);
digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
}
if(!taste2Gedrueckt)
{
sperreFunktion =false;
tasteAufgabeStop();
}
}
}
////Taste 3 und 1
if(digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN))
{
delay(TASTENVIBRATION);
if(digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN))
{
taste3Gedrueckt = !taste3Gedrueckt;
if(taste3Gedrueckt && !sperreFunktion)
{
timerID = timer.setTimeout(taste3Dauer * 1000, tasteAufgabeStop);
digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
}
if(!taste3Gedrueckt)
{
sperreFunktion =false;
tasteAufgabeStop();
}
}
}
///nur Taste 3
if(digitalRead(TASTE3PIN) && !sperreFunktion)
{
digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);
}
if( !digitalRead(TASTE3PIN) && !sperreFunktion)
{
digitalWrite(WASSERHAHNAUSGANGPIN,LOW);
}
}
void tasteAufgabeStop()
{
digitalWrite(WASSERHAHNAUSGANGPIN,LOW);sperreFunktion =false; taste1Gedrueckt = false; taste2Gedrueckt = false; taste3Gedrueckt = false;
timer.disable(timerID);
}
Остання редакція Selen (2018-01-25 10:55:48)
Неактивний
Рувим пише:Кнопки у меня вот такие
https://www.aliexpress.com/item/32761802828/32761802828.htmlНу да. С такими кнопками и дурак напишет.
Тоесть вы хотите сказать, что я дурак раз не смог сам написать скетч ? ?
Неактивний
теперь понятно. ваши кнопки дают при нажатии 1, а мой скетч сделан так что нажатие кнопки это 0. нужно скетч переделывать.
попробуйте этот, вроде ничего не забыл
#define TASTE1PIN 2 #define TASTE2PIN 3 #define TASTE3PIN 4 #define WASSERHAHNAUSGANGPIN 7 #define TASTENVIBRATION 150 #include <SimpleTimer.h> SimpleTimer timer; bool taste1Gedrueckt = false; bool taste2Gedrueckt = false; bool taste3Gedrueckt = false; bool sperreFunktion = false; int taste1Dauer = 45; // 45 Sekunden int taste2Dauer = 120; // 120 Sekunden int taste3Dauer = 420; //420 Sekunden int timerID; void setup() { pinMode(TASTE1PIN,INPUT); pinMode(TASTE2PIN,INPUT); pinMode(TASTE3PIN,INPUT); pinMode(WASSERHAHNAUSGANGPIN,OUTPUT); digitalWrite(WASSERHAHNAUSGANG, LOW); } void loop() { timer.run(); //////Taste1 if(digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN)) { delay(TASTENVIBRATION); if(digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN)) { taste1Gedrueckt = !taste1Gedrueckt; if(taste1Gedrueckt && !sperreFunktion) { timerID = timer.setTimeout(taste1Dauer * 1000, tasteAufgabeStop); digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true; } if(!taste1Gedrueckt) { sperreFunktion =false; tasteAufgabeStop(); } } } ////Taste 2 if(digitalRead(TASTE2PIN)) { delay(TASTENVIBRATION); if(digitalRead(TASTE2PIN)) { taste2Gedrueckt = !taste2Gedrueckt; if(taste2Gedrueckt && !sperreFunktion) { timerID = timer.setTimeout(taste2Dauer * 1000, tasteAufgabeStop); digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true; } if(!taste2Gedrueckt) { sperreFunktion =false; tasteAufgabeStop(); } } } ////Taste 3 und 1 if(digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN)) { delay(TASTENVIBRATION); if(digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN)) { taste3Gedrueckt = !taste3Gedrueckt; if(taste3Gedrueckt && !sperreFunktion) { timerID = timer.setTimeout(taste3Dauer * 1000, tasteAufgabeStop); digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true; } if(!taste3Gedrueckt) { sperreFunktion =false; tasteAufgabeStop(); } } } ///nur Taste 3 if(digitalRead(TASTE3PIN) && !sperreFunktion) { digitalWrite(WASSERHAHNAUSGANGPIN,HIGH); } if( !digitalRead(TASTE3PIN) && !sperreFunktion) { digitalWrite(WASSERHAHNAUSGANGPIN,LOW); } } void tasteAufgabeStop() { digitalWrite(WASSERHAHNAUSGANGPIN,LOW);sperreFunktion =false; taste1Gedrueckt = false; taste2Gedrueckt = false; taste3Gedrueckt = false; timer.disable(timerID); }
Попробую сегодня после обеда и отпишусь вам.
Пожалуйста пришлите мне на почту какие-то свои Контакты. Хотелось бы отблагодарить вас
Моя Почта. Ruvimx24@gmail.com
Остання редакція Рувим (2018-01-25 12:03:51)
Неактивний
Green пише:Рувим пише:Кнопки у меня вот такие
https://www.aliexpress.com/item/32761802828/32761802828.htmlНу да. С такими кнопками и дурак напишет.
Тоесть вы хотите сказать, что я дурак раз не смог сам написать скетч ? ?
Что тут можно объяснять. Каждый додумает сам. Это ж как 2х2.)
Неактивний
sketch_jan25b:26: error: 'WASSERHAHNAUSGANG' was not declared in this scope
digitalWrite(WASSERHAHNAUSGANG, LOW);
^
exit status 1
'WASSERHAHNAUSGANG' was not declared in this scope
при компиляции видает вот такую ошибку.
Что делать?
Неактивний
извияюсь, ошибку сделал
#define TASTE1PIN 2
#define TASTE2PIN 3
#define TASTE3PIN 4
#define WASSERHAHNAUSGANGPIN 7
#define TASTENVIBRATION 150
#include <SimpleTimer.h>
SimpleTimer timer;
bool taste1Gedrueckt = false;
bool taste2Gedrueckt = false;
bool taste3Gedrueckt = false;
bool sperreFunktion = false;
int taste1Dauer = 45; // 45 Sekunden
int taste2Dauer = 120; // 120 Sekunden
int taste3Dauer = 420; //420 Sekunden
int timerID;
void setup() {
pinMode(TASTE1PIN,INPUT);
pinMode(TASTE2PIN,INPUT);
pinMode(TASTE3PIN,INPUT);
pinMode(WASSERHAHNAUSGANGPIN,OUTPUT);
digitalWrite(WASSERHAHNAUSGANGPIN,LOW);
}
void loop() {
timer.run();
//////Taste1
if(digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN))
{
delay(TASTENVIBRATION);
if(digitalRead(TASTE1PIN) && !digitalRead(TASTE3PIN))
{
taste1Gedrueckt = !taste1Gedrueckt;
if(taste1Gedrueckt && !sperreFunktion)
{
timerID = timer.setTimeout(taste1Dauer * 1000, tasteAufgabeStop);
digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
}
if(!taste1Gedrueckt)
{
sperreFunktion =false;
tasteAufgabeStop();
}
}
}
////Taste 2
if(digitalRead(TASTE2PIN))
{
delay(TASTENVIBRATION);
if(digitalRead(TASTE2PIN))
{
taste2Gedrueckt = !taste2Gedrueckt;
if(taste2Gedrueckt && !sperreFunktion)
{
timerID = timer.setTimeout(taste2Dauer * 1000, tasteAufgabeStop);
digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
}
if(!taste2Gedrueckt)
{
sperreFunktion =false;
tasteAufgabeStop();
}
}
}
////Taste 3 und 1
if(digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN))
{
delay(TASTENVIBRATION);
if(digitalRead(TASTE1PIN) && digitalRead(TASTE3PIN))
{
taste3Gedrueckt = !taste3Gedrueckt;
if(taste3Gedrueckt && !sperreFunktion)
{
timerID = timer.setTimeout(taste3Dauer * 1000, tasteAufgabeStop);
digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);sperreFunktion =true;
}
if(!taste3Gedrueckt)
{
sperreFunktion =false;
tasteAufgabeStop();
}
}
}
///nur Taste 3
if(digitalRead(TASTE3PIN) && !sperreFunktion)
{
digitalWrite(WASSERHAHNAUSGANGPIN,HIGH);
}
if( !digitalRead(TASTE3PIN) && !sperreFunktion)
{
digitalWrite(WASSERHAHNAUSGANGPIN,LOW);
}
}
void tasteAufgabeStop()
{
digitalWrite(WASSERHAHNAUSGANGPIN,LOW);sperreFunktion =false; taste1Gedrueckt = false; taste2Gedrueckt = false; taste3Gedrueckt = false;
timer.disable(timerID);
}
Неактивний