Всем добрый день,
с помощью ФЛпрог я как новичок “наворотил” прилагаемый код.
сразу предупреждаю, что он не совсем рабочий! и в нем очень много недостатков.
Суть задачи: подключить через “расширитель” аналоговых входов HC4051 несколько датчиков влажности и вывести их данные на LCD дисплей
с подключением датчиков на прямую к ардуино отдельности я разобрался
с выводом нанных на дисплей тоже
с выводом данных с Сериал Монитор тоже
Пересмотрел кучу информации и везде коды и скетчи только на вывода данных в Serial монитор
но это совсем бесполезная инфа!
мне нужно чтобы данные поступающие через HC4051 выводились на дисплей
кто знает какую функцию или что для этого использовать в коде?
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C _lcd1(0x27, 16, 2);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;
int AnalogOut_29477153_1;
float Sens1_29477153_1;
float Sens2_29477153_1;
float Sens3_29477153_1;
const int selectPins_29477153_1[3] = {11,12, 13}; // подключение управляющих пинов6 S0~ S1~ S2
const int zOutput_29477153_1= 5;
const int zInput_29477153_1= AnalogOut_29477153_1; // определение аналогового входа Ардуино по которому будут передаваться данные
int _gtv2; //Датчик влажности почвы № 1
int _gtv1; //Датчик влажности № 2, аналоговый
float _gtv10; //Данные с датчика влажности № 1, преобразование из аналога в 2-х значное число
float _gtv9; //Данные с датчика влажности № 2, преобразование аналога в двухзначное число
bool _gtv17; //Гланое меню активно
int _disp1oldLength = 0;
int _disp5oldLength = 0;
void setup()
{
Wire.begin();
delay(10);
_lcd1.init();
_lcd1.backlight();
Serial.begin(9600); // запуск порта
for (int i=0; i<3; i++)
{
pinMode(selectPins_29477153_1[i], OUTPUT);
digitalWrite(selectPins_29477153_1[i], HIGH);
}
pinMode(zInput_29477153_1, INPUT); // Set up Z as an input
Serial.println("Sens1_29477153_1\Sens2_29477153_1\Sens3_29477153_1\Sens4\Sens5\Sens6\Sens7\Sens8");
Serial.println("---\H---\H---\H---\H---\H---\H---\H---\H---\H---\H---\H---\H---\H---\H--");
}
void loop()
{
if (_isNeedClearDisp1)
{
_lcd1.clear();
_isNeedClearDisp1= 0;
}
//Плата:1
for (byte pin=0; pin<=7; pin++)
{
selectMuxPin(pin); // Select one at a time
int inputValue = analogRead(zInput_29477153_1); // and read Z
Serial.print(String(inputValue) + "\t");
}
Serial.println();
delay(2000);
}
// The selectMuxPin function sets the 11, 12, and 13 pins
// accordingly, given a pin from 0-7.
void selectMuxPin(byte pin)
{
for (int i=0; i<3; i++)
{
if (pin & (1<<i))
digitalWrite(selectPins_29477153_1[i], HIGH);
else
digitalWrite(selectPins_29477153_1[i], LOW);
}
_gtv9 = Sens2_29477153_1;
_gtv10 = Sens1_29477153_1;
//Плата:2
_gtv10 = (map((_gtv2), (0), (1023), (0), (670)));
_gtv9 = (map((_gtv1), (0), (1023), (0), (670)));
//Плата:3
if (_gtv17)
{
_dispTempLength1 = ((((String("Н- ")) + ((_floatToStringWitRaz(_gtv9,2))) + (String("%"))))).length();
if (_disp1oldLength > _dispTempLength1)
{
_isNeedClearDisp1 = 1;
}
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(10, 1);
_lcd1.print((((String("Н- ")) + ((_floatToStringWitRaz(_gtv9,2))) + (String("%")))));
}
else
{
if (_disp1oldLength > 0)
{
_isNeedClearDisp1 = 1;
_disp1oldLength = 0;
}
}
if (_gtv17)
{
_dispTempLength1 = ((((String("Н- ")) + ((_floatToStringWitRaz(_gtv10,2))) + (String("%"))))).length();
if (_disp5oldLength > _dispTempLength1)
{
_isNeedClearDisp1 = 1;
}
_disp5oldLength = _dispTempLength1;
_lcd1.setCursor(10, 0);
_lcd1.print((((String("Н- ")) + ((_floatToStringWitRaz(_gtv10,2))) + (String("%")))));
}
else
{
if (_disp5oldLength > 0)
{
_isNeedClearDisp1 = 1;
_disp5oldLength = 0;
}
}
}
String _floatToStringWitRaz(float value, int raz)
{
return String(value,raz);
}```
а может кто уже делал такие проекты
мне бы только направление определить
как я догадываюсь с HC4051 данные с датчиков идут “потоком”
нужно как то разделить данные с каждого входа HC4051
Подозреваю что это делается с помощью разбивки по “case”
(нашел один ролик на ютубе - но там скетч не выложен!)
Чушь собачья!
Если Вам нужно вычислить значение выражения 2 * 3 * 4, то для этого, по Вашим словам, таблица умножения содержит абсолютно бесполезную инфу т.к. в таблице умножения показано только одно умножение, а Вам нужно выполнить целых два.
да какая разница, куда выводить - в монитор или на экран? Это же делается почти одинаково, куда важнее как эти данные с датчика получить - поэтому и примеры такие.
Всем добрый день,
всем спасибо за неадекватные коменты и бесполезные рекомендации))
но вчера ночью я нашел видео на ютубе, в котором был ответ на мой вопрос
видос на английском, спасибо зарубежным товарищам из кап стран - они оказались более продвинутые в поставленном мной вопросе))
я нашел нужный кусок кода
нужно просто “прописать” адрес каждой ножки мультиплексора HC4051 и каждую такую ножку считывать и выводить отдельно через несколько связанных переменных.
будет время - проверю работоспособность и размещу тут этот код.
да, 6 мало
мне нужно чтобы был резерв на перспективу - установка более 10 … датчиков в разные горшки (у каждого вида растений будет своей режим полива)
поэтому мне нужно увеличить количество аналоговых датчиков - и для этого я купил HC4051 и заказал еще разных модулей расширения
вот сейчас пробую с какой схемой будет лучше.
I2c конечно тоже можно использовать для датчиков - но в такой схеме есть большой недостаток: в полевых условиях нужно будет перепрописывать адреса датчиков, что очень не удобно.
Ну да, “нужно всего лишь написать правильный код” - мы примерно так вам и ответили.
Зачем было искать какие видосы на ютуюе, когда всего-то нужно было найти пример работы с мультиплексором HC4051. Их просто море в инете
Вот например, со схемой и кодом
всё вы прекрасно поняли…
просто злобно не захотели ответить на вопрос:)
ссылка с образцом который вы прислали не подходит - вернее не совсем подходит.
таких сайтов и роликов я пересмотрел несколько десятков.
и ни где в них не было куска кода позволяющего использовать данные с конкретной ножки и выводить его на LCD дисплей
(как указал выше - такой ролик я нашел только вчера)
присланный вами образец содержит код в котором данные с ножек идут “потоком” и “вываливаются” в Serial
а мне нужны были данные с конкретной одной ножки! которой можно присвоить свою, собственную переменную и использовать данные с неё самостоятельно.
и поэтому в таком виде этот код не подойдёт.
мало того - так я еще усложнил ситуацию тем - что не пишу код в ручную - а использую FLprog - а там нет такого блока как HC4051
поэтому мне пришлось сначала понять и создать какое то подобие пользовательского блока для FLprog, а потом уже “покарёжить” код под свои нужды)))
еще нашел на ютубе ролик 4-6 летней давности какого то там автора по фамилии Писанец - у него как раз оказался подходящий по смыслу код для скетча
но этот вредный тип не выложил файлы со скетчем
и мне пришлось вручную с экрана переписывать код - в итоге он оказался не рабочим - там не хватает каких то кусков, которые не попали в кадр - Ардуино ИДЕ отвергает его и пишет что код имеет недоделки.
короче перебрал кучу вариантов…
в общем ждите продолжения)))
нет, всё намного хуже!
в описанной выше ситуации (переписывание кода вручную с экрана) - “родители в 20 лет меня сразу привезли на шахту работать и бросили там”)))
так как при увеличении на экране часть символов было не разобрать, комментарий автора был сумбурный (сценарий для ролика он точно не готовил)))
и часть кода он скорее всего скрыл или он не попал в кадр.