Вывод информации с датчиков

Тема в разделе "Arduino & Shields", создана пользователем Владимир70, 30 окт 2016.

  1. rkit

    rkit Гуру

    Читайте даташиты по 1wire, пожалуйста. Совершенно нормальный совет для поделок на 2-3 датчика.
     
  2. AlexVS

    AlexVS Гик

    В даташите прописано как привязать конкретный датчик к нужной позиции на дисплее или веб-страничке? У ТС изначально 2-3 датчика?
     
  3. rkit

    rkit Гуру

    По порядку отклика, алло. Разговор был изначально не с ТС, читайте внимательно.
     
  4. AlexVS

    AlexVS Гик

    Да ну, а кому же тогда вы ответили вот этим ?
    и вот этим
    Не ТС, не? Сами внимательно читайте.
    И потом вас спросили, а что будет с порядком отклика, если 1 из датчиков отключиться?
     
  5. rkit

    rkit Гуру

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

    AlexVS Гик

    Давайте про мозги не будем.
    И я вас не пытаюсь подловить, просто зачастую, ваши ответы/советы поверхностны и не уместны, как в этом топике например.
    Ладно, проехали.
     
  7. rkit

    rkit Гуру

    Потому что я хочу. чтобы люди учились разрабатывать что-то сами, а не просто бездумно копировали чужие решения.
     
  8. Круто, например 30 датчиков - где искать "чинить" начнете? Да извините меня, с логикой у вас не очень!
     
  9. rkit

    rkit Гуру

    А кто говорит про 30 датчиков? Опять то же самое. Вместо решения реальной задачи выдумывается какая гипотетическая фигня - "А что будет, если посреди ночи к вам домой влезет Обама и поставит стабилитрон на полтора вольта между сигнальным проводом и землей? А?".
    И единственная цель этой всей ментальной гимнастики - обосрать человека.
     
  10. Объединить в двух предложениях Обаму, стабилитрон и ментальную гимнастику - надо суметь! Вам бы на форум словесности ...
     
    Денчик_45 и Securbond нравится это.
  11. s1984i

    s1984i Нерд

    как сделать что бы температура измерялась с двумя цифрами после запятой. а то сейчас мерит. ...,5 всегда на конце.
    21.5
    22.5
    23.5
    хотелось бы что бы было 21.1 21.3 23.6
     
  12. rkit

    rkit Гуру

    Скорее всего, у вас датчик с точностью 0.5 градусов.
     
  13. s1984i

    s1984i Нерд

    дело в том что их 3 у меня DS18b20 1 один показывал как мне надо , но потом стал показывать как другие
    ну а что он не может показывать 21.1 - 21.6 22.1?
     
  14. rkit

    rkit Гуру

    s1984i нравится это.
  15. s1984i

    s1984i Нерд

    с разрешением понял, но 2 датчика все равно показывают 0.5. заказывал 1 заказом. какая в них разница? как их различать? так как ещё надо дозаказать
    Temp1= 26.00 Temp2= 26.37 Temp3= 29.00
    Temp1= 28.00 Temp2= 26.37 Temp3= 29.00
    Temp1= 29.50 Temp2= 26.37 Temp3= 29.50
    Temp1= 30.50 Temp2= 26.37 Temp3= 29.50
     
  16. AlexVS

    AlexVS Гик

    Скетч свой покажите, где вы устанавливаете разрешение и считываете температуру.
     
  17. s1984i

    s1984i Нерд

    Код (C++):
    #include <OneWire.h>
    OneWire  ds(2);
    byte addr1[8]={0x28,0xFF,0xA0,0xE4,0x83,0x16,0x03,0x1E};
    byte addr2[8]={0x28,0xFF,0xE0,0x18,0x85,0x16,0x05,0x98};
    byte addr3[8]={0x28,0xFF,0x53,0xD0,0x84,0x16,0x05,0x17};
    volatile int temp1,temp2,temp3;
    #include <SD.h>
    File myFile;
    int time = 0;

    void setup(void) {
    Serial.begin(9600);
    WDTCSR=(1<<WDCE)|(1<<WDE); //установить биты WDCE WDE (что б разрешить запись в другие биты
    WDTCSR=(1<<WDIE)| (1<<WDP2)|(1<<WDP1); // разрешение прерывания + выдержка 1 секунда
    // снять все ремарки если нужно поменять разрешение
      ds.reset(); // сброс шины
      ds.select(addr2); //выставить адрес
    ds.write(0x4E); // разрешение записать конфиг
      ds.write(0x7F); // Th контроль температуры макс 128грд
      ds.write(0xFF); //Tl контроль температуры мин -128грд
    ds.write(0x60); // 0x60 12-бит разрешение, 0x00 -9бит разрешение
                 
      Serial.print("Initializing SD card...");  // Выдаём сообщение о том, что начинается инициализация SD-карты
      pinMode(10, OUTPUT);
      if (!SD.begin(4)) {
      Serial.println("initialization failed!"); // Проверяем готовность SD модуля. Если модуль не готов - выдаём сообщение
      return;
      }
      if(SD.exists("data.csv")) {  // Проверяем, существует ли на карте файл data.csv, если существует, то удаляем его.
        SD.remove("data.csv");
      }
      Serial.println("initialization done."); // Выводим сообщение о том, что инициализация прошла успешно
      myFile = SD.open("data.csv", FILE_WRITE);  // Если удалось открыть файл для записи, то записываем данные
      if (myFile) {
      String header = "Id; Kook; Hall; Bedroom; North street; East street";
      myFile.println(header);
      myFile.close();
      }
      else
      {
      Serial.println("error opening data.csv");} // Выводим сооб щение о том, что открыть файл не удалось
     
    }

    void loop(void) {
    delay(5000);
    // Выводим данные на экран
    Serial.print("Temp1= ");
    Serial.print(temp1/16.0);
    Serial.print("   ");
    Serial.print("Temp2= ");
    Serial.print (temp2/16.0);
    Serial.print("   ");
    Serial.print("Temp3= ");
    Serial.print(temp3/16.0);
    Serial.println("   ");
      // Открываем файл data.csv для записи
      time = time + 5;
      myFile = SD.open("data.csv", FILE_WRITE);  // Если удалось открыть файл для записи, то записываем данные
      if (myFile) {
        // Записываем время
        myFile.print(time);
        myFile.print(";");
        myFile.print(temp1/16.0);// Добавляем температуру
        myFile.print(";");
        myFile.print(temp2/16.0);// Добавляем температуру
        myFile.print(";");
        myFile.print(temp3/16.0);// Добавляем температуру
        myFile.println(";");
        myFile.close();  // закрываем файл
      } else {
        Serial.println("error opening data.csv");// Выводим сооб щение о том, что открыть файл не удалось
      }
    }
    ISR (WDT_vect){ //вектор прерывания WD
    static boolean n=0; // флаг работы: запрос температуры или её чтение
    n=!n;
    if (n) {ds.reset();  // сброс шины
            ds.write(0xCC);//обращение ко всем датчикам
            ds.write(0x44);// начать преобразование (без паразитного питания)
           }
    else   {ds.reset();
            ds.select(addr1);  
            ds.write(0xBE); // Read Scratchpad (чтение регистров)
            temp1 =  ds.read() | (ds.read()<<8); //прочитаны 2 байта      
            // получение с 2-го датчика
            ds.reset();
            ds.select(addr2);  
            ds.write(0xBE); // Read Scratchpad (чтение регистров)
            temp2 =  ds.read() | (ds.read()<<8); //прочитаны 2 байта
            // получение с 3-го датчика
            ds.reset();
            ds.select(addr3);  
            ds.write(0xBE); // Read Scratchpad (чтение регистров)
            temp3 =  ds.read() | (ds.read()<<8); //прочитаны 2 байта
           }
    }
     
  18. AlexVS

    AlexVS Гик

    Вы разве не видите что установили разрешение только для одного датчика?
    На форуме, где вы взяли этот пример, ниже по тексту, есть пример как установить разрешение для всех датчиков одновременно.
     
    s1984i нравится это.
  19. s1984i

    s1984i Нерд

    ds.select(addr2); :) понял
     
  20. AlexVS

    AlexVS Гик

    Код (C++):
       ds.reset();
       ds.write(0xCC);
       ds.write(0x4E);
       ds.write(0);  
       ds.write(0);  
       ds.write(0x7F); // разрешение датчика 12 бит