А вообще этому бреду самое место в ЧЧ
Федя, ответьте, только честно - чтобы вы сказали подрядчику, который построил дом без фундамента, с кривыми стенами, с дырявой крышей и с нарушением всех норм - а на все претензии отвечал бы “Помалкивайте, я этим всего три месяца как занимаюсь, а так я парикмахер и архитектуры не изучал” ?
Вы, похоже, чего-то недопоняли.
НА ЭТОМ ФОРУМЕ ФЛПРОГ НЕ ПРИНИМАЕТСЯ. От слова “совсем”.
Ищите другой форум.
субъект, который не уважает чужой труд - не человек! - от слова СОВСЕМ!
@Федор , Вы, кажется, не заметили, что Ваша тема была перемещена в “мусорный” раздел.
Подумайте над этим.
А еще подумайте над пословицей “В чужой монастырь со своим уставом не ходят”.
И если форум посвящен особенностям приготовления блюд из баранины, то вряд ли на него нужно тащить особенности переборки двигателей Тойоты только потому, что “надо уважать чужой труд”.
Я думаю, как раз это поняли уже все участники “обсуждения”.
У FLPROG есть свой форум, размещай свой говнокод там, здесь кубиками не программируют
Солнышко! претензии не к коду, а к дебилу, который его выложил. не нужно какать на форуме. Тебе объяснили, что ты тут не нужен? Так какого хрена ты еще здесь?
@Федор, я же тебе сразу сказал - нет тут специалистов, разбирающихся в сортах говна.
Поэтому и оценить красоту твоего кода на этом форуме никто и не способен.
Прости нас всех и отпусти с миром, пусть мы тут изайдемся в страданиях без твоих гениальных творений…
да ладно, видали хуже, несколько незамысловатых движений мышкой и, даже читабельно:
#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 нашел я тут одно Пособие для студентов программистов (воронежского какого то тех вуза)
в этом пособии пример был прям как мне нужно.
все сделал как написано - но код не работал
Вернее работал, но на экран при нажатии на кнопки выводилась ерунда.
Долго с этим возился - потом внёс небольшие изменения в код - и в целом заработало!
сразу заподозрил, что там какая то нестыковка с “рядами” и “столбцами”
вот только непонятно это в пособии специально допустили ошибку, чтобы студентов помучить, то ли действительно косяк преподавателей))
Это нормально.
Токарь выточит тебе пару деталек за 1000р по чертежу. А представь чертежа нет. Надо изучить целевой механизм, провести замеры, расчитать допуски и посадки, выбрать материал. Это раз 10 дороже, а иногда и в 100. И квалификация шире, чем просто “токарь”.
Если не трудно, можно ссылочку на эти труды? Интересно глянуть. Вообще ошибки не редкость.
Это ты ещё к стоматологам не ходил.
Тут у вас серьезное противоречие.