Мотор, датчик температуры и влажности DHT-11, QuadDisplay.

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем DavilkaFM, 25 ноя 2016.

  1. DavilkaFM

    DavilkaFM Нерд

    здравствуйте. у меня не получается одновременно выводить информацию с датчика DHT-11 на QuadDisplay и включать мотор (с motor shield) когда температура превышает 15 градусов.

    Я написал программу, мотор включается, без строк, отвечающих за вывод на дисплей
    // выводим показания влажности и температуры
    displayTemperatureC(DISPLAY_PIN, dht.getTemperatureC());
    delay(3000);
    displayInt(DISPLAY_PIN, dht.getHumidity());
    delay(3000);

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

    вот код:

    #include <QuadDisplay.h>
    #include <TroykaDHT11.h>

    #define DISPLAY_PIN 10

    #define SPEED_1 5
    #define DIR_1 4

    int temp=0;
    DHT11 dht(11);

    void setup()
    {
    dht.begin();

    Serial.begin(9600);

    // Настраивает выводы платы 4, 5, 6, 7 на вывод сигналов
    for(int i = 4; i < 8; i++)
    pinMode(i, OUTPUT);
    }

    void loop()
    {
    temp = dht.read();

    Serial.print("Temperature = ");
    Serial.print(dht.getTemperatureC());
    Serial.print("C \t");

    if (temp > 15)
    {
    analogWrite(SPEED_1, 250);
    digitalWrite(DIR_1, LOW);
    }

    else
    {
    analogWrite(SPEED_1, 0);
    }

    // выводим показания влажности и температуры
    displayTemperatureC(DISPLAY_PIN, dht.getTemperatureC());
    delay(3000);
    displayInt(DISPLAY_PIN, dht.getHumidity());
    delay(3000);
    }

    //подскажите пожалуйста что мне сделать чтобы все работало.
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    пины 4, 5, 6, 7 для чего используются?
    И оформляйте код правильно, в это вникать никто не будет.
     
    Мама ДавилкиFm нравится это.
  3. vvr

    vvr Инженерище

    делеи тупо тормозят вашу программу
    сначала от них нужно избавиться
     
    Мама ДавилкиFm нравится это.
  4. kulverstukas

    kulverstukas Нуб

    У Вас стоит дэлэй 3000, это 3 секунды. Чтобы на дисплее отображалась инфа раз в 3-много секунд можно написать например так:
    if (millis()%3000<3) displayTemperatureC(DISPLAY_PIN, dht.getTemperatureC());
    if (millis()%4500<3) displayInt(DISPLAY_PIN, dht.getHumidity());
    температура раз в 3 сек, влажность раз в 4.5 можно и вместе их запускать, но эти функции отбирают достаточно много времени и будут тормоза больше чем если разбить их "по очереди"
     
    Мама ДавилкиFm нравится это.
  5. Господа, всем спасибо. Просим прощения за код: только осваиваем программирование. Будем стараться писать лучше.
    Ошибку нашли сами: дело в том, что переменная temp читает с датчика два значения. поэтому if (temp > 15) не приводило к вращению мотора.

    Ввели вторую переменную для записи значения конкретно температуры.

    За delay тоже спасибо, изучили millis.