#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
Сообщений: 490

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

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

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

Selen
Участник
Зарегистрирован: 2017-01-02
Сообщений: 71

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

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

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

qwone
Участник
Зарегистрирован: 2016-07-25
Сообщений: 128

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
Сообщений: 490

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
Сообщений: 371

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
Сообщений: 520

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

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

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

Selen
Участник
Зарегистрирован: 2017-01-02
Сообщений: 71

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
Сообщений: 71

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
Сообщений: 128

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

Рувим пишет:

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

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

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

Selen
Участник
Зарегистрирован: 2017-01-02
Сообщений: 71

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
Сообщений: 71

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
Сообщений: 520

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
Сообщений: 520

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
Сообщений: 71

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

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела