Помогите с кодом

Тема в разделе "Arduino & Shields", создана пользователем Miheeei, 7 май 2017.

  1. Miheeei

    Miheeei Нерд

    Здравствуйте, собираю свой первый проект.
    Набор железа: Arduino nano, Енкодер, Дисплей 20х4, Фоторезистор, 2хРеле, Датчик ds18b20, светодиод.
    Идея и функционал:
    1) Чтение уличной температуры.
    2) Чтение показаний с электросчетчика при помощи фоторезистора.
    3) Управление насосом подачи воды со скважины(если давление в системе упадет реле запустит насос).
    4) Управление кабелем обогрева трубопровода(если на улице < = 3 С, включится реле обогрева).

    В целом вроде все работает, возникла проблема с дисплеем, так как дисплей не поддерживает кириллицу, приходится создавать собственный символы. Если все это делать в loop то скетч сильно тормозит. Решила создать личные процедуры для отображения.

    Проблема вот в чем: При запуске мк нужно отобразить главный дисплей (mymain), при нажатии на центральную кнопку енкодера должен экран очистится и отобразить (mysettings) тут я могу установить стартовые показания электросчетчика. После чего опять нажимаю на энкодер должно вернуться на главный экран (mymain).

    На экран настроек я попадаю, а назад вернутся не могу.
    пин энкодера всегда дает высокий уровень, при нажатий делает низкий.

     
  2. qwone

    qwone Гик

    Ну здесь банально. Вы беретесь за проект который вам буквально не по силам. 1 - не знаете принципа как писать большие программы 2 не знаете принципа как организовывать меню 3 не знаете как работать с экнодером.
    ПС: но даже если я за вас напишу, вы все равно не поймете. Так как минимума программирования на Ардуине не достаточно.
     
  3. mcureenab

    mcureenab Гуру

  4. Miheeei

    Miheeei Нерд

    Я с вами соглашусь, так как двухмесячный интерес и владение данным контроллером меня не делает гуру в области программирования. Однако без чьей либо помощи данный проект у меня в работе.
    На сегодняшний день он: импульсы считывает, насос запускает, обогрев включает, периодически производит запись и чтение информации на карту памяти, температуру меряет, выводит данные на экран и позволяет корректировать энкодером значения.
    Я конечна не против критики, но Ваш ответ как ветер в поле. Я всему научусь, а сейчас прошу помочь мне решить данную проблему. Спасибо.
     
  5. Miheeei

    Miheeei Нерд

    Вопрос уже не актуален. Разобралась.
    Всем спасибо!
     
  6. qwone

    qwone Гик

    Вот я и помогаю как могу. Другое дело вы уперлись в "свой потолок" и "местные успехи" не дают вам видить перспективу.
     
  7. NikitOS

    NikitOS Король шутов Администратор

    Код (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));
    }
    Первый проект?:eek::eek::eek::eek::eek::rolleyes:
     
  8. Miheeei

    Miheeei Нерд

    Первый!
     
  9. NikitOS

    NikitOS Король шутов Администратор

    мой первый проект - мигающий светодиод:oops:
     
  10. Miheeei

    Miheeei Нерд

    Ну этим я тоже баловалась. А сейчас первый дельный проект.
     
  11. NikitOS

    NikitOS Король шутов Администратор

    У меня первый дельный проект это то что делаю сейчас(вам не интересно..))хотя уже5 лет как занимаюсь))