Проблема с подключением дисплея

Тема в разделе "Arduino & Shields", создана пользователем marting, 13 май 2019.

Метки:
  1. marting

    marting Нуб

    Добрый день. На плате имеется свободные следующие пины: 11, 12, 13, 0, 1. Мне необходимо подключить дисплей Nokia 5110. Я пытаюсь подключить следующим способом:
    Код (C++):
    Adafruit_PCD8544 display = Adafruit_PCD8544(13, 12, 11, 0, 1);
    И, он не работает. Это из-за пина 0 и 1?
    Если да, то что сделать чтобы они заработали?
    Или, можно ли часть проводов перекинуть на аналоговый пин (А5, А4, А3 которые свободны)?
     
    Последнее редактирование: 13 май 2019
  2. b707

    b707 Гуру

    Какая плата? Сериал в скетче используется?
     
  3. marting

    marting Нуб

    Arduino Uno. Что за сериал?
     
  4. DetSimen

    DetSimen Гуру

    Богатые плачут, рогатые - скачут.

    Ещё один знаток.

    Надо дальше смотреть - при одиночной прокладке или групповой.

    И снова нет.

    Это что? Марку давай.
     
    Последнее редактирование модератором: 16 май 2019
    Airbus нравится это.
  5. Daniil

    Daniil Гуру

    вывод в последовательный порт
     
  6. marting

    marting Нуб

    Да, сериал используется.
     
  7. marting

    marting Нуб

    У меня сейчас загружен следующий скетч
    Код (C++):
    #include <SoftwareSerial.h>
    #include "DHT.h"
    // тип датчика DHT
    #define DHTTYPE DHT11

    // контакты подключения bluetooth-модуля HC-05
    int pinBlRx=8;
    int pinBlTx=9;
    // контакт подключения входа данных модуля DHT11
    int pinDHT11=10;
    // контакт подключения аналогового выхода модуля влажности почвы
    int pinSoilMoisture=A0;
    // контакт подключения аналогового выхода датчика температуры TMP36
    int pinTMP36=A1;
    // контакт подключения аналогового выхода фоторезистора
    int pinPhotoresistor=A2;

    // пины светодиодов индикации
    #define LED_TEMP 5
    #define LED_MOISTURE 6
    #define LED_LIGHT 7

    // значения для условий
    #define TEMP_DETECT 30
    #define MOISTURE_DETECT 500
    #define LIGHT_DETECT 250

    // реле
    int pinRelays[]={2,3,4};
    // статусы полива, освещения, вентилятора
    boolean statusRelays[]={false,false,false};

    // создание экземпляра объекта SoftwareSerial
    SoftwareSerial HC05Serial(pinBlRx,pinBlTx);
    // создание экземпляра объекта DHT
    DHT dht(pinDHT11, DHTTYPE);

    unsigned long millisupdate=0;
    // для получения данных из SoftwareSerial
    String inputString0 = "";
    // признак конца полученной строки
    boolean stringComplete0 = false;

    void setup()
    {
    // запуск последовательного порта
    Serial.begin(9600);
    //
    pinMode(LED_TEMP,OUTPUT);digitalWrite(LED_TEMP,LOW);
    pinMode(LED_MOISTURE,OUTPUT);digitalWrite(LED_MOISTURE,LOW);
    pinMode(LED_LIGHT,OUTPUT);digitalWrite(LED_LIGHT,LOW);
    // инициализация dht
    dht.begin();
    // запуск SoftwareSerial
    HC05Serial.begin(9600);
    // резервирование 50 bytes для the inputString:
    inputString0.reserve(50);

    }

    void loop()
    {
    // ожидание конца строки для анализа поступившего запроса:
    serialEvent0();
    if (stringComplete0)
    {
    Serial.println(inputString0);
    parse_string0(inputString0);
    // очистить :
    inputString0 = "";
    stringComplete0 = false;
    }
    // каждые 5 сек - получение показаний датчиков
    // и вывод на дисплей
    if(millis()-millisupdate>5000)
    {
    millisupdate=millis();
    // получение данных с DHT11
    float h = dht.readHumidity();
    if (isnan(h))
    {
    Serial.println("Failed to read from DHT");
    HC05Serial.println("Failed to read from DHT");
    delay(10);
    }
    else
    {
    Serial.print("HumidityDHT11= "); Serial.print(h);Serial.println(" %");
    HC05Serial.println("----------");
    HC05Serial.print("Влажность = ");HC05Serial.print(h);HC05Serial.print(" %");HC05Serial.println();
    delay(10);
    }
    // получение значения с аналогового вывода модуля влажности почвы
    int val0=analogRead(pinSoilMoisture);
    Serial.print("SoilMoisture= "); Serial.println(val0);
    HC05Serial.print("Влажность почвы = ");HC05Serial.print(val0);HC05Serial.println();
    delay(10);
    // получение значения с аналогового вывода датчика температуры TMP36
    int val1=analogRead(pinTMP36);
    // перевод в мВ
    int mV= val1*1000/1024;
    // перевод в градусы цельсия
    int t=(mV-500)/10+75;//t=23;
    Serial.print("TempTMP36= "); Serial.print(t);Serial.println(" C");
    HC05Serial.print("Температура = ");HC05Serial.print(t);HC05Serial.print(" C");HC05Serial.println();
    delay(10);
    // получение значения с аналогового вывода фоторезистора
    int val2=analogRead(pinPhotoresistor);
    Serial.print("Light= "); Serial.println(val2);
    HC05Serial.print("Показатель света = ");HC05Serial.print(val2);HC05Serial.println();
    delay(10);
    // обновить
    // вывод состояние полива, лампы, вентилятора
    Serial.print("pump - "); Serial.println(statusRelays[2]);
    Serial.print("fun - "); Serial.println(statusRelays[1]);
    Serial.print("lamp - "); Serial.println(statusRelays[0]);
    HC05Serial.print("Полив:");HC05Serial.print(statusRelays[2]);HC05Serial.print(" ");
    delay(10);
    HC05Serial.print("Вентилятор:");HC05Serial.print(statusRelays[1]);HC05Serial.print(" ");
    delay(10);
    HC05Serial.print("Состояние света:");HC05Serial.print(statusRelays[0]);HC05Serial.println(" ");HC05Serial.println("----------");
    delay(10);
    //// проверка условий
    // увлажненность почвы
    if(val0 > MOISTURE_DETECT)
    digitalWrite(LED_MOISTURE,HIGH);
    else
    digitalWrite(LED_MOISTURE,LOW);
    // температура воздуха
    if(t > TEMP_DETECT)
    digitalWrite(LED_TEMP,HIGH);
    else
    digitalWrite(LED_TEMP,LOW);
    // освещенность
    if(val2 < LIGHT_DETECT)
    digitalWrite(LED_LIGHT,HIGH);
    else
    digitalWrite(LED_LIGHT,LOW);
    // пауза 5 секунд
    Serial.println();
    }
    }
    // SerialEvent для HC05
    void serialEvent0() {
    while (HC05Serial.available()) {
    // получить очередной байт:
    char inChar = (char)HC05Serial.read();
    // добавить в строку
    inputString0 += inChar;
    // /n - конец передачи
    if (inChar == '#') {
    stringComplete0 = true;
    }
    }
    }
    // парсинг строки из android
    void parse_string0(String inputString)
    {
    // длина строки
    int length1=inputString.length();
    if(length1!=5)
    {Serial.println("ERROR1"); return;}
    if(inputString.charAt(2)!='=')
    {Serial.println("ERROR2"); return;}
    if(inputString.charAt(4)!='#')
    {Serial.println("ERROR3"); return;}
    String param1=inputString.substring(0,2);
    int param2=inputString.substring(3,4).toInt();
    Serial.print("param1=");Serial.println(param1);
    Serial.print("param2=");Serial.println(param2);
    if(param1=="PM")
    doCommand(2,min(param2,1));
    else if(param1=="FN")
    doCommand(1,min(param2,1));
    else if(param1=="LM")
    doCommand(0,min(param2,1));
    }

    // исполнение команды от смартфона
    void doCommand(int relay, int status1)
    {
    // изменить статус
    statusRelays[relay]=status1;
    // изменить состояние реле
    digitalWrite(pinRelays[relay],statusRelays[relay]);
    }
     
    и рядом необходимо подключить дисплей.

    Чтобы данные также, передавались на дисплей как в Bluetooth.
     
    Последнее редактирование: 14 май 2019
  8. Airbus

    Airbus Радиохулиган

    И где в коде дисплей?
     
  9. Daniil

    Daniil Гуру

    Выводы 0 и 1 это и есть сериал.
    На плате есть преобразователь USB-uart.
    У МК выводы rx и tx uart"a идут на преобразователь И на колодку с номерами 0 и 1. Поэтому их использовать для дисплея нельзя или отказываться от сериала.
     
  10. marting

    marting Нуб

    А можно, тогда на пины 0 и 1 подключить Bluetooth модуль (HC-05) или светодиоды?
     
  11. marting

    marting Нуб

    В этот код я добавлю
    Код (C++):
    #include <Adafruit_GFX.h>
    #include <Adafruit_SPITFT.h>
    #include <Adafruit_SPITFT_Macros.h>
    #include <gfxfont.h>

    #include <Adafruit_Sensor.h>

    // подключение библиотек для nokia 5110
    #include <Adafruit_PCD8544.h>
    // подключение библиотеки DHT
    #include "DHT.h"
    // тип датчика DHT
    #define DHTTYPE DHT11

    // контакт подключения входа данных модуля DHT11
    int pinDHT11=9;
    // контакт подключения аналогового выхода модуля влажности почвы
    int pinSoilMoisture=A0;
    // контакт подключения аналогового выхода датчика температуры TMP36
    int pinTMP36=A1;
    // контакт подключения аналогового выхода фоторезистора
    int pinPhotoresistor=A2;

    // пины светодиодов индикации
    #define LED_TEMP 5
    #define LED_MOISTURE 6
    #define LED_LIGHT 7

    // значения для условий
    #define TEMP_DETECT 30
    #define MOISTURE_DETECT 500
    #define LIGHT_DETECT 250

    // создание экземпляра объекта DHT
    DHT dht(pinDHT11, DHTTYPE);

    // Nokia 5110
    // pin 13 - Serial clock out (SCLK)
    // pin 12 - Serial data out (DIN)
    // pin 11 - Data/Command select (D/C)
    // pin 10 - LCD chip select (CS)
    // pin 8 - LCD reset (RST)
    Adafruit_PCD8544 display = Adafruit_PCD8544(13, 12, 11, 10, 8);

    void setup() {
    // запуск последовательного порта
    Serial.begin(9600);
    //
    pinMode(LED_TEMP,OUTPUT);digitalWrite(LED_TEMP,LOW);
    pinMode(LED_MOISTURE,OUTPUT);digitalWrite(LED_MOISTURE,LOW);
    pinMode(LED_LIGHT,OUTPUT);digitalWrite(LED_LIGHT,LOW);
    //
    dht.begin();
    // инициализация дисплея
    display.begin();
    // установить контраст фона экрана
    display.setContrast(60);
    display.clearDisplay(); // очистить экран
    display.setTextSize(1); // размер шрифта
    display.setTextColor(BLACK); // цвет
    // заставка
    display.setCursor(15,15);
    display.print("Home Flower");
    display.display();
    delay(2000);
    }

    void loop()
    {
    display.clearDisplay();
    display.setCursor(5,0);
    display.print("Home Flower");
    // получение данных с DHT11
    float h = dht.readHumidity();
    display.setCursor(5,10);
    if (isnan(h))
    {
    Serial.println("Failed to read from DHT");
    display.print("airH= error");
    }
    else
    {
    Serial.print("HumidityDHT11= "); Serial.print(h);Serial.println(" %");
    display.print("airH=");display.print(h);display.print("%");
    }
    // получение значения с аналогового вывода модуля влажности почвы
    display.setCursor(5,20);
    int val0=analogRead(pinSoilMoisture);
    Serial.print("SoilMoisture= "); Serial.println(val0);
    display.print("soilM=");display.print(val0);
    // получение значения с аналогового вывода датчика температуры TMP36
    display.setCursor(5,30);
    int val1=analogRead(pinTMP36);
    // перевод в мВ
    int mV= val1*1000/1024;
    // перевод в градусы цельсия
    int t=(mV-500)/10+75;//t=23;
    Serial.print("TempTMP36= "); Serial.print(t);Serial.println(" C");
    display.print("airT=");display.print(t);display.print(" C");
    // получение значения с аналогового вывода фоторезистора
    display.setCursor(5,40);
    int val2=analogRead(pinPhotoresistor);
    Serial.print("Light= "); Serial.println(val2);
    display.print("Light=");display.print(val2);
    // обновить
    display.display();
    //// проверка условий
    // увлажненность почвы
    if(val0 > MOISTURE_DETECT)
    digitalWrite(LED_MOISTURE,HIGH);
    else
    digitalWrite(LED_MOISTURE,LOW);
    // температура воздуха
    if(t > TEMP_DETECT)
    digitalWrite(LED_TEMP,HIGH);
    else
    digitalWrite(LED_TEMP,LOW);
    // освещенность
    if(val2 < LIGHT_DETECT)
    digitalWrite(LED_LIGHT,HIGH);
    else
    digitalWrite(LED_LIGHT,LOW);
    // пауза 5 секунд
    Serial.println();
    delay(5000);
    }
     
    часть этого кода. Мне необходимо чтобы на плате был реле, Bluetooth модуль, светодиоды и дисплей.
     
  12. Belkin

    Belkin Гик

    Схемку нарисуйте и сюда покажите.
    Думаете, кто-то будет из программы подключения выцарапывать ?
    Пока рисовать будете - часть вопросов отпадет.
    Оставшиеся - в студию. ;)
     
    Daniil нравится это.
  13. DetSimen

    DetSimen Гуру

    купи себе расширитель входов/выходов и все кнопки со светодиодами перекинь туда, освободишь нужные пины.
     
    Daniil и Belkin нравится это.
  14. Belkin

    Belkin Гик

    К сожалению, ТС не полностью понимает, какие пины ему нужны вообще... ;)
    Вот "аналоговые" они - и все тут... ;)
     
    DetSimen нравится это.
  15. marting

    marting Нуб

    Вот https://playarduino.ru/wp-content/u...ema-soedinenij-dlya-nashej-Umnoj-teplitsy.jpg схема. И, необходимо добавить дисплей. Чтобы, туда поступали те же данные что, и на Bluetooth.
     
  16. marting

    marting Нуб

    Как добавить дисплей рядом Bluetooth?
     
  17. parovoZZ

    parovoZZ Гуру

    ну...рядом положи.
     
    Belkin нравится это.
  18. Daniil

    Daniil Гуру

    Если вы одной рукой пишете книгу, вы можете ей же включать/выключать лампочку, не отрываясь от ручки с бумагой?
    Вывод мк делает что-то одно, если хотите большее, то нужно изучать схемотенику и контроллеры и программирование.
    Слишком сложная картинка, лично я не буду в ней копаться.
    Увидел, что есть свободные пины с 10 по 13 - чем не дисплей?
    (отредактировал, я имел в виду с 10 пина)
     
    Последнее редактирование: 15 май 2019
    Belkin нравится это.
  19. Belkin

    Belkin Гик

    Да свободных пинов - как дерьма за сараем (судя по схеме)... ;)
    marting, полистайте документацию по микроконтроллерам, выясните для себя - что является портом МК, как "оно" работает, как это соотносится понятием "пин" в Ардуино.
    Поверьте - будете сами улыбаться над своими здесь заданными вопросами... ;)

    Читайте документацию (даташиты), ищите описания, а потом уже, когда зайдете "в тупик" (что вполне возможно для начинающего), начинайте задавать вопросы, указывая на те моменты, которые вам непонятны.
    Поверьте, разговор станет более предметным и квалифицированных ответов вы получите в разы больше.

    А разгадывать ваши ребусы за просто так никто не будет. ;)
    И даже заплатив за "разгадку" и получив желаемый результат - ума не прибавится...
    Я уже насмотрелся на бьющих себя пяткой в грудь выпускников с "высшим образованием", знания которых на уровне плинтуса...
     
    Daniil нравится это.