Здравствуйте, собираю свой первый проект. Набор железа: Arduino nano, Енкодер, Дисплей 20х4, Фоторезистор, 2хРеле, Датчик ds18b20, светодиод. Идея и функционал: 1) Чтение уличной температуры. 2) Чтение показаний с электросчетчика при помощи фоторезистора. 3) Управление насосом подачи воды со скважины(если давление в системе упадет реле запустит насос). 4) Управление кабелем обогрева трубопровода(если на улице < = 3 С, включится реле обогрева). В целом вроде все работает, возникла проблема с дисплеем, так как дисплей не поддерживает кириллицу, приходится создавать собственный символы. Если все это делать в loop то скетч сильно тормозит. Решила создать личные процедуры для отображения. Проблема вот в чем: При запуске мк нужно отобразить главный дисплей (mymain), при нажатии на центральную кнопку енкодера должен экран очистится и отобразить (mysettings) тут я могу установить стартовые показания электросчетчика. После чего опять нажимаю на энкодер должно вернуться на главный экран (mymain). На экран настроек я попадаю, а назад вернутся не могу. пин энкодера всегда дает высокий уровень, при нажатий делает низкий.
Ну здесь банально. Вы беретесь за проект который вам буквально не по силам. 1 - не знаете принципа как писать большие программы 2 не знаете принципа как организовывать меню 3 не знаете как работать с экнодером. ПС: но даже если я за вас напишу, вы все равно не поймете. Так как минимума программирования на Ардуине не достаточно.
Я с вами соглашусь, так как двухмесячный интерес и владение данным контроллером меня не делает гуру в области программирования. Однако без чьей либо помощи данный проект у меня в работе. На сегодняшний день он: импульсы считывает, насос запускает, обогрев включает, периодически производит запись и чтение информации на карту памяти, температуру меряет, выводит данные на экран и позволяет корректировать энкодером значения. Я конечна не против критики, но Ваш ответ как ветер в поле. Я всему научусь, а сейчас прошу помочь мне решить данную проблему. Спасибо.
Вот я и помогаю как могу. Другое дело вы уперлись в "свой потолок" и "местные успехи" не дают вам видить перспективу.
Код (C++): #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3f, 20, 4); byte bukva_B[8] = {B11110,B10000,B10000,B11110,B10001,B10001,B11110,B00000,}; // Буква "Б" byte bukva_G[8] = {B11111,B10001,B10000,B10000,B10000,B10000,B10000,B00000,}; // Буква "Г" byte bukva_D[8] = {B01111,B00101,B00101,B01001,B10001,B11111,B10001,B00000,}; // Буква "Д" byte bukva_ZH[8] = {B10101,B10101,B10101,B11111,B10101,B10101,B10101,B00000,}; // Буква "Ж" byte bukva_Z[8] = {B01110,B10001,B00001,B00010,B00001,B10001,B01110,B00000,}; // Буква "З" byte bukva_I[8] = {B10001,B10011,B10011,B10101,B11001,B11001,B10001,B00000,}; // Буква "И" byte bukva_IY[8] = {B01110,B00000,B10001,B10011,B10101,B11001,B10001,B00000,}; // Буква "Й" byte bukva_L[8] = {B00011,B00111,B00101,B00101,B01101,B01001,B11001,B00000,}; // Буква "Л" byte bukva_P[8] = {B11111,B10001,B10001,B10001,B10001,B10001,B10001,B00000,}; // Буква "П" byte bukva_Y[8] = {B10001,B10001,B10001,B01010,B00100,B01000,B10000,B00000,}; // Буква "У" byte bukva_F[8] = {B00100,B11111,B10101,B10101,B11111,B00100,B00100,B00000,}; // Буква "Ф" byte bukva_TS[8] = {B10010,B10010,B10010,B10010,B10010,B10010,B11111,B00001,}; // Буква "Ц" byte bukva_CH[8] = {B10001,B10001,B10001,B01111,B00001,B00001,B00001,B00000,}; // Буква "Ч" byte bukva_SH[8] = {B10101,B10101,B10101,B10101,B10101,B10101,B11111,B00000,}; // Буква "Ш" byte bukva_SHCH[8] = {B10101,B10101,B10101,B10101,B10101,B10101,B11111,B00001,}; // Буква "Щ" byte bukva_Mz[8] = {B10000,B10000,B10000,B11110,B10001,B10001,B11110,B00000,}; // Буква "Ь" byte bukva_IYI[8] = {B10001,B10001,B10001,B11001,B10101,B10101,B11001,B00000,}; // Буква "Ы" byte bukva_AE[8] = {B01110,B10001,B00111,B00001,B00001,B10001,B01110,B00000,}; // Буква "Э" byte bukva_YU[8] = {B10111,B10101,B10101,B11101,B10101,B10101,B10111,B00000,}; // Буква "Ю" byte bukva_YA[8] = {B01111,B10001,B10001,B01111,B00101,B01001,B10001,B00000,}; // Буква "Я" byte bukva_GRAD[8] = {B00010,B00101,B00010,B00000,B00000,B00000,B00000,B00000,}; // Символ "Цельсия" bool Encoder_OK = HIGH; bool flagmain = false; bool flagsettings = false; void setup() { Serial.begin(9600); Wire.begin(); lcd.backlight(); lcd.init(); lcd.clear(); } void mymain() { if(flagmain == false) { lcd.clear(); lcd.createChar(1, bukva_I); lcd.createChar(2, bukva_CH); lcd.createChar(3, bukva_P); lcd.createChar(4, bukva_Y); lcd.createChar(5, bukva_G); lcd.createChar(6, bukva_L); lcd.createChar(7, bukva_GRAD); lcd.setCursor(0, 0); lcd.print("TEM\3EPAT\4PA |"); lcd.setCursor(18, 0); lcd.print("\7C"); lcd.setCursor(0, 1); lcd.print("C\2ET\2\1K |"); lcd.setCursor(0, 2); lcd.print("HACOC |"); lcd.setCursor(0, 3); lcd.print("HA\5PEB |"); flagmain = true; } } void mysettings() { if(flagmain == true && flagsettings == false) { lcd.clear(); lcd.createChar(1, bukva_CH); lcd.createChar(2, bukva_I); lcd.setCursor(0, 0); lcd.print("** CTAPT C\1ET\1\2KA **"); lcd.setCursor(0, 1); lcd.print("[-] - 12345^1 - [+]"); lcd.setCursor(0, 2); lcd.print("********************"); lcd.setCursor(0, 3); lcd.print("PhotoRes = "); flagsettings = true; } } void loop() { mymain(); Encoder_OK = digitalRead(10); if(Encoder_OK == LOW && flagmain == true && flagsettings == false) { mysettings(); } if(Encoder_OK == LOW && flagmain == true && flagsettings == false) { flagmain = false; flagsettings = false; } Serial.println(String(Encoder_OK)+(flagmain)+(flagsettings)); } Первый проект?
У меня первый дельный проект это то что делаю сейчас(вам не интересно..))хотя уже5 лет как занимаюсь))