Поплавковый выключатель не обнаружен

my set up

Всем добрый день, простите меня за потрепанный рисунок, я просто паникую, почему мои поплавковые выключатели внезапно остаются незамеченными моим Arduino mega. Я проверил все поплавковые выключатели один за другим, чтобы убедиться, что все работает непосредственно перед их установкой.

у меня есть 18 комплектов поплавковых выключателей, 5 насосов управляются реле, мой основной блок питания-12В 20А. Желтый прямоугольник обозначает поплавковый выключатель, фиолетовая линия соединена с цифровыми контактами от резистора между 10 ком и переключателем. зеленая линия-это общее заземляющее соединение от бака 5,2 В (блок питания для устройств, которым требуется от 5 до 5,5 В) до gnd Arduino mega.

вот мой код, и это не код проекта, а просто простой тестовый скетч, потому что мои поплавковые выключатели внезапно ведут себя странно:

#include <OneWire.h>
#include "OneButton.h"
#include <DallasTemperature.h>
#include "GravityTDS.h"
#include <EEPROM.h>
#include "Wire.h" // Include the I2C Wire Library
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);

#define bp1 (uint8_t) 10 /*Button 1*/
#define bp2 (uint8_t) 11 /*Button 2*/
#define bp3 (uint8_t) 12 /*Button 3*/

OneButton btn1 = OneButton(bp1,false,false); uint8_t bx1 = 0;
OneButton btn2 = OneButton(bp2,false,false); uint8_t bx2 = 0;
OneButton btn3 = OneButton(bp3,false,false); uint8_t bx3 = 0;

//Float Switches...........
/*Collector Float Switch*/
#define CT_Fs2 (uint8_t) 9

/*Sieve & Cloth*/
#define SC_Fs1 (uint8_t) 8

/*Primary Test Tank*/
#define PT_Fs1 (uint8_t) 7
#define PT_Fs2 (uint8_t) 6

/*Grease Trap*/
#define GT_Fs1 (uint8_t) 5

/*First Filtration*/
#define FFP_Fs1 (uint8_t) 4
#define FFP_Fs2 (uint8_t) 3

/*Sediment Filter*/
#define SD_Fs1 (uint8_t) 2

/*Second Filtration Passed*/
#define SP_Fs1 (uint8_t) 24
#define SP_Fs2 (uint8_t) 25

/*Final Test Tank*/
#define FT_Fs1 (uint8_t) A7
#define FT_Fs2 (uint8_t) A8

/*Tank A*/
#define TA_Fs1 (uint8_t) 45
#define TA_Fs2 (uint8_t) 47

/*Tank B*/
#define TB_Fs1 (uint8_t) 42
#define TB_Fs2 (uint8_t) 43

/*Tank C*/
#define TC_Fs1 (uint8_t) 40
#define TC_Fs2 (uint8_t) 41

void setup() 
{
  Serial.begin(9600); /* Show Serial Monitor */
  lcd.begin(); /* LCD Screen Set Up */
  
//---------------------------------------------------------------------dont forget to set up the pins
//ALL DIGITAL PINS ARE INPUT AS DEFAULT, DECLARE ONLY IF MODE IS OUTPUT:
  pinMode(FT_Fs1,INPUT);
  pinMode(FT_Fs2,INPUT);

  
//----------------------------------------------------------------------One Button Single Click event attachment
  btn1.attachClick(handleClick1);
  btn2.attachClick(handleClick2);
  btn3.attachClick(handleClick3);

}

//simple show txt on LCD Screen
void lcd_print(String txt ,uint8_t a, uint8_t b) 
{ lcd.setCursor(a,b); lcd.print(txt);}

void loop()
{
  FSTester();
}

void FSTester() // to check FLOAT SWITCH 
{
  if (digitalRead(CT_Fs2) == 1)
  {
    lcd.clear();
    lcd_print("CT_Fs2 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(SC_Fs1) == 1)
  {
    lcd.clear();
    lcd_print("SC_Fs1 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(PT_Fs1) == 1)
  {
    lcd.clear();
    lcd_print("PT_Fs1 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(PT_Fs2) == 1)
  {
    lcd.clear();
    lcd_print("PT_Fs2 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(GT_Fs1) == 1)
  {
    lcd.clear();
    lcd_print("GT_Fs1 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(FFP_Fs1) == 1)
  {
    lcd.clear();
    lcd_print("FFP_Fs1 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(FFP_Fs2) == 1)
  {
    lcd.clear();
    lcd_print("FFP_Fs2 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(SD_Fs1) == 1)
  {
    lcd.clear();
    lcd_print("SD_Fs1 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(SP_Fs1) == 1)
  {
    lcd.clear();
    lcd_print("SP_Fs1 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(SP_Fs2) == 1)
  {
    lcd.clear();
    lcd_print("SP_Fs2 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(FT_Fs1) == 1)
  {
    lcd.clear();
    lcd_print("FT_Fs1 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(FT_Fs2) == 1)
  {
    lcd.clear();
    lcd_print("FT_Fs2 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(TA_Fs1) == 1)
  {
    lcd.clear();
    lcd_print("TA_Fs1 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(TA_Fs2) == 1)
  {
    lcd.clear();
    lcd_print("TA_Fs2 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(TB_Fs1) == 1)
  {
    lcd.clear();
    lcd_print("TB_Fs1 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(TB_Fs2) == 1)
  {
    lcd.clear();
    lcd_print("TB_Fs2 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(TC_Fs1) == 1)
  {
    lcd.clear();
    lcd_print("TC_Fs1 Detected",0,1);
    delay(5000);
  }
  else if (digitalRead(TC_Fs2) == 1)
  {
    lcd.clear();
    lcd_print("TC_Fs2 Detected",0,1);
    delay(5000);
  }
  else
  {
    lcd.clear();
    lcd_print("NOTHING",0,1);
  }
}

Я проверил непрерывность связи, и все в порядке. почему это так странно?

кто нибудь пожалуйста исправьте мои ошибки

, 👍1

Обсуждение

"внезапно вести себя странно" не дает нам много для продолжения. Я бы предложил попробовать небольшой фрагмент вашего кода, в котором используется только один поплавковый переключатель, и заставить его работать. Затем добавьте остальные из них (с любыми изменениями, которые вам, возможно, пришлось бы внести для первого). Возможно ли, что переключатели работают в противоположном смысле, в котором вы их тестируете? Вы тестируете на ВЫСОКИЙ - они действительно переключаются на НИЗКИЙ? В противном случае нам нужно будет знать, чего вы ожидали от своего кода и что он делает вместо этого. И все равно будет полезно свести его к одному реле - то есть к простейшему случаю, когда происходит сбой., @JRobert

Что такое желтый компонент в вашем чертеже и что такое зеленое/фиолетовое соединение?, @Sim Son

В чем причина того, что вы используете дополнительный источник питания для - что я предполагаю из вашего рисунка - это просто простые переключатели? Почему бы просто не использовать для этого контакт 5 вольт ардуино напрямую?, @chrisl

Вашей схеме почти невозможно следовать. Можете ли вы нарисовать фактическую проводку без использования цветных коробок и т. Д.? **В частности** часть о переключателе. Мы предполагаем, что вы подаете питание на различные устройства, вам не нужно это показывать. Возможно, входы вашего переключателя "плавают" (то есть неопределенны) либо в открытом, либо в закрытом положении., @Nick Gammon

См. [моя страница о переключателях](http://www.gammon.com.au/forum/?id=11955) и если это поможет, я могу дать ответ в этом направлении (если его еще нет, что, вероятно, есть)., @Nick Gammon


1 ответ


Лучший ответ:

1

Из диаграммы трудно определить, находится ли зеленый провод под тем же напряжением, что и черный провод, питающий плату Arduino. Даже если они соединены, трудно сказать, является ли ток номинальным. Поскольку есть источник питания неизвестной конструкции, задействованный как для Arduino, так и для поплавкового переключателя.

Это может привести к неожиданным результатам и даже к необратимому повреждению чувствительных деталей. Рассмотрите возможность использования конструкции только с одним источником питания, тем самым снижая риск неожиданных результатов.

,

Предполагается, что ваш код, датчики и насос работали вместе в одной точке ("на испытательном стенде"). Так что код, вероятно, работает. И только после того, как вы установили его и некоторое время запускали, вы заметили, что он выходит из строя. Это правильно?, @st2000

Ты новенькая @princessbubbles15. Если приведенные выше ответы на ваш вопрос, выберите его как правильный ответ. Если вы хотите подождать и попробовать, чтобы проверить, работает ли он, это тоже нормально. Или напишите комментарий/вопрос здесь, если что-то не ясно, и я отредактирую ответ. Не стесняйтесь также редактировать свой вопрос, если вы обнаружите, что забыли задать что-то конкретное., @st2000