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

А вообще этому бреду самое место в ЧЧ

1 лайк

Федя, ответьте, только честно - чтобы вы сказали подрядчику, который построил дом без фундамента, с кривыми стенами, с дырявой крышей и с нарушением всех норм - а на все претензии отвечал бы “Помалкивайте, я этим всего три месяца как занимаюсь, а так я парикмахер и архитектуры не изучал” ?

1 лайк

Вы, похоже, чего-то недопоняли.
НА ЭТОМ ФОРУМЕ ФЛПРОГ НЕ ПРИНИМАЕТСЯ. От слова “совсем”.
Ищите другой форум.

субъект, который не уважает чужой труд - не человек! - от слова СОВСЕМ!

@Федор , Вы, кажется, не заметили, что Ваша тема была перемещена в “мусорный” раздел.
Подумайте над этим.
А еще подумайте над пословицей “В чужой монастырь со своим уставом не ходят”.
И если форум посвящен особенностям приготовления блюд из баранины, то вряд ли на него нужно тащить особенности переборки двигателей Тойоты только потому, что “надо уважать чужой труд”.

Я думаю, как раз это поняли уже все участники “обсуждения”.

У FLPROG есть свой форум, размещай свой говнокод там, здесь кубиками не программируют

3 лайка

Солнышко! претензии не к коду, а к дебилу, который его выложил. не нужно какать на форуме. Тебе объяснили, что ты тут не нужен? Так какого хрена ты еще здесь?

@Федор, я же тебе сразу сказал - нет тут специалистов, разбирающихся в сортах говна.
Поэтому и оценить красоту твоего кода на этом форуме никто и не способен.

Прости нас всех и отпусти с миром, пусть мы тут изайдемся в страданиях без твоих гениальных творений…

1 лайк

да ладно, видали хуже, несколько незамысловатых движений мышкой и, даже читабельно:

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int TempLength=0;
boolean clearDisp;
int AnalogOut1;
float Sens1;
float Sens2;
float Sens3;
const int selectPins1[3] = {11,12, 13}; // подключение управляющих пинов6 S0~ S1~ S2
const int zOutput1 = 5;
const int zInput1 = AnalogOut1; // определение аналогового входа Ардуино по которому будут передаваться данные
int gtv1; //Датчик влажности почвы № 1
int gtv2; //Датчик влажности № 2, аналоговый
float data_gtv1; //Данные с датчика влажности № 1, преобразование из аналога в 2-х значное число
float data_gtv2; //Данные с датчика влажности № 2, преобразование аналога в двухзначное число
bool is_menu; //Гланое меню активно
int disp1_OldLength = 0;
int disp2_OldLength = 0;

void setup()
{
    Wire.begin();
    delay(10);
    lcd.init();
    lcd.backlight();
    Serial.begin(9600); // запуск порта 
      for (int i=0; i<3; i++)
    {
        pinMode(selectPins1[i], OUTPUT);
        digitalWrite(selectPins1[i], HIGH);
    }
    pinMode(zInput1, INPUT); // Set up Z as an input
    Serial.println("Sens1   \Sens2    \Sens3    \Sens4    \Sens5    \Sens6    \Sens7    \Sens8");
    Serial.println("---\H---\H---\H---\H---\H---\H---\H---\H---\H---\H---\H---\H---\H---\H--");
}

void loop()
{
    if (clearDisp) 
    {
        lcd.clear();
        clearDisp= 0;
    }
    //Плата:1
      for (byte pin=0; pin<=7; pin++)
    {
        selectMuxPin(pin); // Select one at a time
            int inputValue = analogRead(zInput1); // 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(selectPins1[i], HIGH);
        else
        digitalWrite(selectPins1[i], LOW);
    }
    data_gtv2 = Sens2;
    data_gtv1 = Sens1;
    //Плата:2
    data_gtv1 = (map((gtv1), (0), (1023), (0), (670)));
    data_gtv2 = (map((gtv2), (0), (1023), (0), (670)));
    //Плата:3
    if (is_menu) 
    {
        TempLength = ((((String("Н- ")) + ((convert(data_gtv2,2))) + (String("%"))))).length();
        if (disp1_OldLength > TempLength) 
        {
            clearDisp = 1;
        }
        disp1_OldLength = TempLength;
        lcd.setCursor(10, 1);
        lcd.print((((String("Н- ")) + ((convert(data_gtv2,2))) + (String("%")))));
    }
     else 
    {
        if (disp1_OldLength > 0) 
        {
            clearDisp = 1;
            disp1_OldLength = 0;
        }
    }
    if (is_menu) 
    {
        TempLength = ((((String("Н- ")) + ((convert(data_gtv1,2))) + (String("%"))))).length();
        if (disp2_OldLength > TempLength) 
        {
            clearDisp = 1;
        }
        disp2_OldLength = TempLength;
        lcd.setCursor(10, 0);
        lcd.print((((String("Н- ")) + ((convert(data_gtv1,2))) + (String("%")))));
    }
     else 
    {
        if (disp2_OldLength > 0) 
        {
            clearDisp = 1;
            disp2_OldLength = 0;
        }
    }
}
String  convert(float value, int raz)
{
    return String(value,raz);
}

Это ПРИМЕР, а не ОБРАЗЕЦ. Деточка, в программировании копипастить невозможно, т.к. нет абсолютно одинаковых задач, есть похожие.
“Не совсем подходит” почему? Названия переменных не те?)

Мертвечина.

Ой… думал ща как дам жару🤣

Это тест на внимательность. Для любителей

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

Да, процесс обучения не быстрый. Но ведь интересней и полезней так, чем получить готовое?)

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

1 лайк

Это нормально.
Токарь выточит тебе пару деталек за 1000р по чертежу. А представь чертежа нет. Надо изучить целевой механизм, провести замеры, расчитать допуски и посадки, выбрать материал. Это раз 10 дороже, а иногда и в 100. И квалификация шире, чем просто “токарь”.
Если не трудно, можно ссылочку на эти труды? Интересно глянуть. Вообще ошибки не редкость.

Это ты ещё к стоматологам не ходил.

5 лайков

Тут у вас серьезное противоречие.