Макет защиты от протечек на Ардуино

Azzor
Offline
Зарегистрирован: 10.01.2017

Вктратце на данной стадии замысел такой

На water level sensor поступает вода, загарается светодиод, по нажатию кнопки он отключается

Мой скетч

__________________________________________________________________________________________

#define BUTTON_PIN  3
#define LED_PIN     12
 
boolean buttonWasUp = true;  
boolean ledEnabled = false;  
int x; 
 
void setup() 
 
{
 
  pinMode(LED_PIN, OUTPUT); 
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(A0, INPUT); 
  Serial.begin(9600); 
}
 
void loop() 
 
{
   boolean buttonIsUp = digitalRead(BUTTON_PIN);
   if (buttonWasUp && !buttonIsUp) {
    delay(10);
    buttonIsUp = digitalRead(BUTTON_PIN);
    if (!buttonIsUp) {       
    }
  }
  buttonWasUp = buttonIsUp;
   
    x = analogRead(A0);
 
    if (x > 100) { digitalWrite (LED_PIN, HIGH); } 
    if (x < 100) { digitalWrite (LED_PIN, LOW); } 
 
}
 
 
 
 
 
 
 
подскажите что не так, ибо после подключения кнопки диод горит непереставая.
Заранее спасибо
tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Для начала: в скетче состояние светодиода зависит исключительно от уровня напряжения на входе А0, то есть от трёх последних строчек. На этот вход АЦП на макетке хоть что-нибудь подключено? Схему соединений хорошо бы набросать.

Зачем в скетче инициализация serial, если не используется вывод отладочной информации?

Azzor
Offline
Зарегистрирован: 10.01.2017

tekagi пишет:

Для начала: в скетче состояние светодиода зависит исключительно от уровня напряжения на входе А0, то есть от трёх последних строчек. На этот вход АЦП на макетке хоть что-нибудь подключено? Схему соединений хорошо бы набросать.

Зачем в скетче инициализация serial, если не используется вывод отладочной информации?

На А0 подключен тот самый water level sensor

Azzor
Offline
Зарегистрирован: 10.01.2017

смотрим вверх

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

В коде

    if (!buttonIsUp)
   {       

    }

между фигурными скобками должно быть гашение светодиода. Плюс он гаснет при снижении значения АЦП меньше 100. Коль уж прицепили сериал - выводите туда переменные и значеня с АЦП для контроля.

И выкладывайте код правильно, с использованием кнопки code, большой код должен быть по умолчанию свёрнут.

Azzor
Offline
Зарегистрирован: 10.01.2017

уровень программирования маленький.. сам до такого не дойду)

 

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Дык уровень повышать надо.

 

#define BUTTON_PIN 3
#define LED_PIN     12
 
boolean buttonWasUp = true;  
//boolean ledEnabled = false;  
int x; 
 
void setup() 
 
{
 
  pinMode(LED_PIN, OUTPUT); 
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(A0, INPUT); 
}
 
void loop() 
 
{
   boolean buttonIsUp = digitalRead(BUTTON_PIN);
   if (buttonWasUp && !buttonIsUp) 
		{
			delay(10);
			buttonIsUp = digitalRead(BUTTON_PIN);
			if (!buttonIsUp) 
				{       
				digitalWrite (LED_PIN, LOW);
				}
		}
   buttonWasUp = buttonIsUp;
   
    x = analogRead(A0);
 
    if (x > 100) { digitalWrite (LED_PIN, HIGH); } 
    if (x < 100) { digitalWrite (LED_PIN, LOW); } 
 
}

Вот код с добавленым гашением светодиода. Но! Он отработает только один раз (поскольку при изменении buttonWasUp на LOW входа в условие уже не будет), и то при условии, что в момент нажатия кнопки значение с АЦП меньше 100. Почему - разбирайтесь)

Azzor
Offline
Зарегистрирован: 10.01.2017

Большое спасибо, поразбираюсь)))