Вывод данных полученных через hc4051 на LCD дисплей

Я правильно понял что ЛГБТ шники помогли - своего приметили ?

2 лайка

С таким подходом марихуану в горшке ты не вырастишь. Никогда.

1 лайк

вранье

for(int i = 0; i < 8; i ++){
    Serial.print("Value at channel ");
    Serial.print(i);
    Serial.print("is : ");
    Serial.println(readMux(i));
    delay(1000);
  }

что это как не чтение данных “с конкретной ножки”?
Если вы код не поняли - так и говорите, не надо наговаривать на автора

блин, а выводить на дисплей и на сериал - это такая принципиальная разница?

Или все дело в том, что вы такая ленивая Ж, которой лень хоть чуть-чуть изменить готовый пример и вы ждете, пока вам не поднесут готовое на блюде?

так кто в этом виноват, кроме вас?
вам сразу было сказано, что у нас тут ФЛПрог не уважают.

Вы можете “упростить ситуацию” тем, что откажетесь от этой мурзилки и начнете писать “вручную”. Поверьте, это в разы легче, чем адаптировать найденные коды для ФЛПрога

короче … вы бузатёр ещё тот)))
в самом вопрос мной было указано, чтобы тот кто сталкивался с подобной ситуацией сообщил - в каком месте и как добавить или изменить код
присланный вами кусок кода я тоже изучал и в таком виде без больших изменений приспособить его не получилось
опять же повторюсь - что я уже разобрался ,что нужно основательно менять код и не только в этом месте.

про ФЛПрог вы ни чего не писали
да и зря вы наговариваете!
с его помощью, подключив ножки датчиков к аналоговым входам А0 и А1 у меня сразу получилось вывести данные на LCD
в общем всё будет норм

И шо, никто не кинулся? Вот ведь злыдни злобные :sweat_smile:

1 лайк

меня запинали, а больше и некому, жадные однако…

Типичный непрограммист уверен, что для любой задачи где-то лежит готовый код… И нам всего-то надо ему сказать, где именно. А мы злые - готовый код показать не хотим

И это не может не радовать!

Всем добрый день,
проверил и немного доработал под свои нужды прилагаемый ниже код, который нашел на ютубе.
Задача составленного кода: вывод данных с нескольких аналоговых датчиков через два (2) мультиплексора HC4051 на LCD 2004. Дисплей подключен по шине i2c.
Количество мультиплексоров может быть увеличено.
В последующем будет еще:
2) меню (оно у меня уже частично работает но на дисплее 1602)
3) подключение матричной клавиатуры 4*5 через расширители портов HC595 и HC165 (над этим буду работать в ближайшее время).

Код составлен с помощью программы FL Prog - но для неё мне пришлось сделать дополнительный специальный Пользовательский блок HC 4051.

Возможно код громоздкий и его можно упростить, но зато он относительно понятен начинающему!
Есть еще один вариант кода, похожий по принципу на этот - но оказался “не рабочий” (что то в нём нужно дорабатывать).

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C _lcd1(0x27, 20, 4);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;
int Sensor1_10069704_2;
int Sensor2_10069704_2;
int Sensor3_10069704_2;
int Sensor4_10069704_2;
int Sensor5_10069704_2;
int Sensor6_10069704_2;
int Sensor7_10069704_2;
int Sensor8_10069704_2;
int wait_10069704_2= 10;
const int A_Ports_10069704_2= A0;
const int B_Ports_10069704_2= A1;
const int Inhibit_Mux_10069704_2= 7;
int _gtv2; //Датчик влажности почвы № 1
int _gtv1; //Датчик влажности № 2, аналоговый
float _gtv10; //Данные с датчика влажности № 1, преобразование из аналога в 2-х значное число
float _gtv9; //Данные с датчика влажности № 2, преобразование аналога в двухзначное число
int _gtv3; //Датчик влажности почвы № 3
int _gtv4; //Датчик влажности № 4
float _gtv5; //Преобразование данных датчика в %
float _gtv6; //Преобразование данных датчика 4 в %
int _gtv7; //Датчик влажности почвы
int _gtv8; //Датчик влажности почвы 6
int _gtv11; //Датчик влажности 7
int _gtv12; //Датчик влажности № 8
float _gtv13; //Преобразование данных датчика 5 в %
float _gtv14; //Преобразование данных датчика 6 в %
float _gtv15; //Преобразование данных датчика 7 в %
float _gtv16; //Преобразование данных датчика 8 в %
int _disp1oldLength = 0;
int _disp5oldLength = 0;
int _disp9oldLength = 0;
int _disp2oldLength = 0;
void setup()
{
    Wire.begin();
    delay(10);
    _lcd1.init();
    _lcd1.backlight();
    Serial.begin(9600);
    pinMode(Inhibit_Mux_10069704_2,OUTPUT);
    digitalWrite(Inhibit_Mux_10069704_2,LOW);
    DDRB = 0b00000111; //PORT 8,9,10 as output
    PORTB = 0b00000000; //PORT 8,9,10 set to low
    pinMode(A_Ports_10069704_2,INPUT);
    pinMode(B_Ports_10069704_2,INPUT);
}
void loop()
{
    if (_isNeedClearDisp1) 
    {
        _lcd1.clear();
        _isNeedClearDisp1= 0;
    }
    //Плата:1
//Наименование:Плата подключения двух мультиплексоров HC4051
    PORTB=0b00000000; //Data flow - X0
    int Sensor1_10069704_2 = analogRead(A_Ports_10069704_2); //чтение канала № 1 A_Port
    Serial.println(Sensor1_10069704_2);
    int Sensor9 = analogRead(B_Ports_10069704_2); //чтение канала № 9 B_Port
    Serial.print(" ");
    Serial.println(Sensor9);
    delay(2000);
    PORTB=0b00000001; //Data flow - X1
    int Sensor2_10069704_2 = analogRead(A_Ports_10069704_2); //чтение канала № 2 A_Port
    Serial.println(Sensor2_10069704_2);
    int Sensor10 = analogRead(B_Ports_10069704_2); //чтение канала № 10 B_Port
    Serial.print(" ");
    Serial.println(Sensor10);
    delay(2000);
    PORTB=0b00000010; //Data flow - X1
    int Sensor3_10069704_2 = analogRead(A_Ports_10069704_2); //чтение канала № 3 A_Port
    Serial.println(Sensor3_10069704_2);
    int Sensor11 = analogRead(B_Ports_10069704_2); //чтение канала № 11 B_Port
    Serial.print(" ");
    Serial.println(Sensor11);
    delay(2000);
    PORTB=0b00000011; //Data flow - X1
    int Sensor4_10069704_2 = analogRead(A_Ports_10069704_2); //чтение канала № 4 A_Port
    Serial.println(Sensor4_10069704_2);
    int Sensor12 = analogRead(B_Ports_10069704_2); //чтение канала № 12 B_Port
    Serial.print(" ");
    Serial.println(Sensor12);
    delay(2000);
    PORTB=0b00000100; //Data flow - X1
    int Sensor5_10069704_2 = analogRead(A_Ports_10069704_2); //чтение канала № 5 A_Port
    Serial.println(Sensor5_10069704_2);
    int Sensor13 = analogRead(B_Ports_10069704_2); //чтение канала № 13 B_Port
    Serial.print(" ");
    Serial.println(Sensor13);
    delay(2000);
    PORTB=0b00000110; //Data flow - X1
    int Sensor7_10069704_2 = analogRead(A_Ports_10069704_2); //чтение канала № 7 A_Port
    Serial.println(Sensor7_10069704_2);
    int Sensor15 = analogRead(B_Ports_10069704_2); //чтение канала № 15 B_Port
    Serial.print(" ");
    Serial.println(Sensor15);
    delay(2000);
    PORTB=0b00000111; //Data flow - X1
    int Sensor8_10069704_2 = analogRead(A_Ports_10069704_2); //чтение канала № 8 A_Port
    Serial.println(Sensor7_10069704_2);
    int Sensor16 = analogRead(B_Ports_10069704_2); //чтение канала № 16 B_Port
    Serial.print(" ");
    Serial.println(Sensor16);
    delay(2000);
    _gtv12 = Sensor8_10069704_2;
    _gtv11 = Sensor7_10069704_2;
    _gtv8 = Sensor6_10069704_2;
    _gtv7 = Sensor5_10069704_2;
    _gtv4 = Sensor4_10069704_2;
    _gtv3 = Sensor3_10069704_2;
    _gtv1 = Sensor2_10069704_2;
    _gtv2 = Sensor1_10069704_2;
    //Плата:2
    _gtv10 = (map((_gtv2), (0), (1023), (0), (100)));
    _gtv9 = (map((_gtv1), (0), (1023), (0), (100)));
    _gtv5 = (map((_gtv3), (0), (1023), (0), (100)));
    _gtv6 = (map((_gtv4), (0), (1023), (0), (100)));
    _gtv13 = (map((_gtv7), (0), (1023), (0), (100)));
    _gtv14 = (map((_gtv8), (0), (1023), (0), (100)));
    _gtv15 = (map((_gtv11), (0), (1023), (0), (100)));
    _gtv16 = (map((_gtv12), (0), (1023), (0), (100)));
    //Плата:3
    //Плата:4
    if (1) 
    {
        _dispTempLength1 = ((((String("H- ")) + ((_floatToStringWitRaz(_gtv10,0))) + (String("%"))))).length();
        if (_disp9oldLength > _dispTempLength1) 
        {
            _isNeedClearDisp1 = 1;
        }
        _disp9oldLength = _dispTempLength1;
        _lcd1.setCursor(13, 0);
        _lcd1.print((((String("H- ")) + ((_floatToStringWitRaz(_gtv10,0))) + (String("%")))));
    }
     else 
    {
        if (_disp9oldLength > 0) 
        {
            _isNeedClearDisp1 = 1;
            _disp9oldLength = 0;
        }
    }
    if (1) 
    {
        _dispTempLength1 = ((((String("H- ")) + ((_floatToStringWitRaz(_gtv9,0))) + (String("%"))))).length();
        if (_disp5oldLength > _dispTempLength1) 
        {
            _isNeedClearDisp1 = 1;
        }
        _disp5oldLength = _dispTempLength1;
        _lcd1.setCursor(13, 1);
        _lcd1.print((((String("H- ")) + ((_floatToStringWitRaz(_gtv9,0))) + (String("%")))));
    }
     else 
    {
        if (_disp5oldLength > 0) 
        {
            _isNeedClearDisp1 = 1;
            _disp5oldLength = 0;
        }
    }
    if (1) 
    {
        _dispTempLength1 = ((((String("H- ")) + ((_floatToStringWitRaz(_gtv5,0))) + (String("%"))))).length();
        if (_disp1oldLength > _dispTempLength1) 
        {
            _isNeedClearDisp1 = 1;
        }
        _disp1oldLength = _dispTempLength1;
        _lcd1.setCursor(13, 2);
        _lcd1.print((((String("H- ")) + ((_floatToStringWitRaz(_gtv5,0))) + (String("%")))));
    }
     else 
    {
        if (_disp1oldLength > 0) 
        {
            _isNeedClearDisp1 = 1;
            _disp1oldLength = 0;
        }
    }
    if (1) 
    {
        _dispTempLength1 = ((((String("H- ")) + ((_floatToStringWitRaz(_gtv6,0))) + (String("%"))))).length();
        if (_disp2oldLength > _dispTempLength1) 
        {
            _isNeedClearDisp1 = 1;
        }
        _disp2oldLength = _dispTempLength1;
        _lcd1.setCursor(13, 3);
        _lcd1.print((((String("H- ")) + ((_floatToStringWitRaz(_gtv6,0))) + (String("%")))));
    }
     else 
    {
        if (_disp2oldLength > 0) 
        {
            _isNeedClearDisp1 = 1;
            _disp2oldLength = 0;
        }
    }
}
String  _floatToStringWitRaz(float value, int raz)
{
    return String(value,raz);
}

Класс!

Четырежды повторённое условие if (1) да ещё и с else - это прямо-таки шедевр! До такого хрен кто догадается!

Ну, а чё? Надо же программе знать, что делать, если единица, вдруг, окажется равной нулю!

2 лайка

Нулю-то наврядли, но вот если код вдруг окажется скомпилирован с помощью лживого ЯП - сразу else и выстрелит.

Сразу всем пишу, что:
ПРЕТЕНЗИИ ПО КОДУ НЕ ПРИНИМАЮТСЯ!
так как:

  1. из вас ни кто не ответил и своего не предложил
  2. это не моя основная работа!
    моя работа: ходить по арбитражным судам, заниматься подрядами, стройками
    и по выходным выращивать декоративные хвойные растения в мелкопромышленных масштабах
    этим вопросом (по подготовке кода) - я занялся только 2-3 месяца назад, урывками!
    то есть ни когда в жизни не изучал ни одного языка программирования, вообще!
    вник в вопрос - “на бегу”.
    Поэтому претензии оставьте при себе.

тем более что на верху я указал, что код можно еще дорабатывать и соответственно сокращать и прочее - на это у меня нет времени.

Да нам по сути чихать на твой код, какие могут быть претензии!

2 лайка

интересно, кто из двоих ничего не знает про массивы - ФЛПрог или автор? А может оба?

От себя лично отвечаю:
ПРЕТЕНЗИИ ПО КОДУ НЕ ПРЕДЪЯВЛЯЮТСЯ! Ибо он он нахрен никому не интересен.

P.S. Вот это не было претензией, просто выражение восторга.

1 лайк

а нахрена он тогда выложен? Похвастаться достижениеми? -
нууууу получилось не очень :slight_smile:

Именно! И заодно “умыть” некоторых бездарей, которые тут пальцы гнут, а такого гениального кода написать не сумели :frowning:

2 лайка

О! Я догадался!
Этот код выложен тут на случай, “вдруг он кому-то пригодится” (с)
Поэтому и забота, чтоб он был “понятен” :)))))