#1 2018-01-20 02:08:29

Рувим
Учасник
Зареєстрований: 2018-01-20
Повідомлень: 15

Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Хочу сделать умный кран для фильтрований воды. У нас с женой постоянная проблема то, я то жена поставит чайник и пока вода медленно набирается занимаемся своими делами. Потом забываем и только уже когда вода льётся через край вспоминаем о чайнике с водой.

Хочу сделать простую систему на, ардуино нано. Берём три сенсорных кнопки. И для них распечатываем на 3Д принтере небольшой корпус. Подсоединяем к, ардуинке кнопки, мосфет транзистор для управления нагрузкой в 12 в и к мосфету клапан открывания и закрывает воды.

Все что касается хардверной части я сделал, а вот как написать скетч я не знаю sad

Программа должна быть вод такой.

Есть три кнопки, нажав на первую мы набираем стакан. Тоесть проходит допустим 45секунд. Мосфет держит клапан открытым в течении 45секунд. при повторном нажатии на ту же кнопку мосфет закрывается.
На второй кнопке все тожесамое но только уже 2 минуты.
А вот на третей вода льётся только при нажатии. Только убрал палец, клапан закрывается. Но если нажать на третью кнопку и одновременно на первую включается на 7 минут smile
Сам я вообще не знаю как это можно реализовать. Как по мне идея классная и очень полезная для нас и уверен что многим придётся по душе. Но с реализацией у меня возникли проблемы. Буду очень благодарен за помощь

Неактивний

#2 2018-01-20 09:51:23

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

это платная или бесплатная помощь ?

Неактивний

#3 2018-01-20 15:37:44

Selen
Учасник
Зареєстрований: 2017-01-02
Повідомлень: 88

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

довольно простая программа, я сейчас занят но недельки через две - три, когда со своим проектом закончу могу попробовать, если конечно потребность останется.

Неактивний

#4 2018-01-20 22:32:50

qwone
Учасник
Зареєстрований: 2016-07-25
Повідомлень: 143

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Разберешься в настройке.

//**/
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 байт.
*/

Неактивний

#5 2018-01-20 22:54:01

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

вряд ли))))

Неактивний

#6 2018-01-21 01:12:29

Барьер
Гість

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Автору срочно нужен кувшин фильтр для воды 1013009065.jpg

#7 2018-01-23 12:42:14

Рувим
Учасник
Зареєстрований: 2018-01-20
Повідомлень: 15

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

vvr пише:

это платная или бесплатная помощь ?

А за сколько вы возьмётесь написать такой скетч ?
Просто это не коммерческая деятельность. Делаю чисто для себя. И я все детали заказал на алиекспоес за 300грн
К сожалению не могу заплатить такую цену как предлагают ребята ниже.

Неактивний

#8 2018-01-23 13:59:20

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Рувим пише:
vvr пише:

это платная или бесплатная помощь ?

А за сколько вы возьмётесь написать такой скетч ?
Просто это не коммерческая деятельность. Делаю чисто для себя. И я все детали заказал на алиекспоес за 300грн
К сожалению не могу заплатить такую цену как предлагают ребята ниже.

roll  так по моему  ( 2018-01-20 22:32:50 qwone ) уже прикрепил тут скетч ... или вы этого не поняли ...   smile  смотри пост #4

Остання редакція renoshnik (2018-01-23 14:00:11)

Неактивний

#9 2018-01-23 14:27:10

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Тут больше проблема в сенсорных кнопках. Какие именно хотелось бы?

Неактивний

#10 2018-01-24 01:57:10

Selen
Учасник
Зареєстрований: 2017-01-02
Повідомлень: 88

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Написал скеч,
Пин 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)

Неактивний

#11 2018-01-24 08:53:13

Ruvim
Гість

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Selen пише:

Написал скеч,
Пин 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);
}

Вау, спасибо вам огромное!!! Вечером все соберу прошью и отпишусь вам. Спасибо !!

#12 2018-01-24 08:57:41

Рувим
Учасник
Зареєстрований: 2018-01-20
Повідомлень: 15

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Green пише:

Тут больше проблема в сенсорных кнопках. Какие именно хотелось бы?


Кнопки у меня вот такие
https://www.aliexpress.com/item/32761802828/32761802828.html

Неактивний

#13 2018-01-24 09:35:59

Рувим
Учасник
Зареєстрований: 2018-01-20
Повідомлень: 15

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Selen пише:

Написал скеч,
Пин 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

Неактивний

#14 2018-01-24 09:53:10

Selen
Учасник
Зареєстрований: 2017-01-02
Повідомлень: 88

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Для транзистора ШИМ нужен только тогда если вы хотите плавно менять нагрузку, например плавно тушить лампочку. Вы можете пин изменить но это ничего не даст, чтоб активировать ШИМ нужен не digitalWrite a analogWrite.

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

Остання редакція Selen (2018-01-24 09:57:30)

Неактивний

#15 2018-01-24 18:00:47

Рувим
Учасник
Зареєстрований: 2018-01-20
Повідомлень: 15

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Selen пише:

Для транзистора ШИМ нужен только тогда если вы хотите плавно менять нагрузку, например плавно тушить лампочку. Вы можете пин изменить но это ничего не даст, чтоб активировать ШИМ нужен не digitalWrite a analogWrite.

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

Понял. Я просто думал что шим нужен в любом случае. Буду знать.

Вот что у меня вышло. Почему-то пока работает не коректно. все собрал на коленке конечно.
На видео все видно.

https://youtu.be/SCdWwpoggeo

Неактивний

#16 2018-01-24 19:09:02

qwone
Учасник
Зареєстрований: 2016-07-25
Повідомлень: 143

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Рувим пише:

Вот что у меня вышло. Почему-то пока работает не коректно. все собрал на коленке конечно.

Разумеется так и будет. Очень сложный алгоритм при отсутсвии минимальных знаний дает такой эффект.

Неактивний

#17 2018-01-24 20:03:01

Selen
Учасник
Зареєстрований: 2017-01-02
Повідомлень: 88

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Вот как у меня это работает,
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)

Неактивний

#18 2018-01-24 23:14:08

Рувим
Учасник
Зареєстрований: 2018-01-20
Повідомлень: 15

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Selen пише:

Вот как у меня это работает,
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)

Неактивний

#19 2018-01-25 00:27:23

Selen
Учасник
Зареєстрований: 2017-01-02
Повідомлень: 88

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

теперь понятно. ваши кнопки дают  при нажатии 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)

Неактивний

#20 2018-01-25 10:25:08

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Рувим пише:

Кнопки у меня вот такие
https://www.aliexpress.com/item/32761802828/32761802828.html

Ну да. С такими кнопками и дурак напишет.

Неактивний

#21 2018-01-25 11:46:15

Рувим
Учасник
Зареєстрований: 2018-01-20
Повідомлень: 15

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Green пише:
Рувим пише:

Кнопки у меня вот такие
https://www.aliexpress.com/item/32761802828/32761802828.html

Ну да. С такими кнопками и дурак напишет.

Тоесть вы хотите сказать, что я дурак раз не смог сам написать скетч ? ?

Неактивний

#22 2018-01-25 12:03:04

Рувим
Учасник
Зареєстрований: 2018-01-20
Повідомлень: 15

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Selen пише:

теперь понятно. ваши кнопки дают  при нажатии 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);
}

Попробую сегодня после обеда и отпишусь вам.
Пожалуйста пришлите мне на почту какие-то свои Контакты. Хотелось бы отблагодарить вас smile
Моя Почта. Ruvimx24@gmail.com

Остання редакція Рувим (2018-01-25 12:03:51)

Неактивний

#23 2018-01-25 14:07:59

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

Рувим пише:
Green пише:
Рувим пише:

Кнопки у меня вот такие
https://www.aliexpress.com/item/32761802828/32761802828.html

Ну да. С такими кнопками и дурак напишет.

Тоесть вы хотите сказать, что я дурак раз не смог сам написать скетч ? ?

Что тут можно объяснять. Каждый додумает сам. Это ж как 2х2.)

Неактивний

#24 2018-01-25 15:30:04

Рувим
Учасник
Зареєстрований: 2018-01-20
Повідомлень: 15

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

sketch_jan25b:26: error: 'WASSERHAHNAUSGANG' was not declared in this scope

   digitalWrite(WASSERHAHNAUSGANG, LOW);

                ^

exit status 1
'WASSERHAHNAUSGANG' was not declared in this scope



при компиляции видает вот такую ошибку.
Что делать?

Неактивний

#25 2018-01-25 16:30:02

Selen
Учасник
Зареєстрований: 2017-01-02
Повідомлень: 88

Re: Помогите пожалуйста написать скетч.(Умный кран для фильтрований воды)

извияюсь, ошибку сделал

#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);
}

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму