0 голосов

Снимаю данные о температуре через Ардуино раз в 10 минут.

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

Вот весь скетч:

#include <SPI.h>
#include <Ethernet.h>
#include <iarduino_RTC.h>
//#include <SD.h>
iarduino_RTC time(RTC_DS1307);
//#include <Arduino.h>
#include <TM1637Display.h>
#include <OneWire.h>
#include <DallasTemperature.h>

byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0x57, 0x57 }; //mac адрес сетевухи
IPAddress ip(192, 168, 157, 157); //ip сетевухи
EthernetServer server(80); //имя и порт web сервера

//Пины подключения дисплея
#define CLK 2
#define DIO 3

TM1637Display display(CLK, DIO);

OneWire oneWire(4); //Пин датчика температуры 18b20
DallasTemperature ds(&oneWire);

unsigned long timing; // Переменная для хранения точки отсчета

void setup()
{
  Ethernet.begin(mac, ip);
  time.begin();
  server.begin();
  ds.begin();
//  Serial.begin(9600);
//  time.settime(0,11,16,5,2,21,5);
}

void loop()
{
  //  Serial.println(time.gettime("d-m-Y, H:i:s, D"));
  if (millis() - timing > 600000) { // Пауза 10 минут
    timing = millis();
    ds.requestTemperatures();  //считываем температуру с датчиков, на это требуется 750мс
  }
  uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
  uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 };
  display.setBrightness(0x0f);

  // Show decimal numbers with/without leading zeros
  display.showNumberDec(ds.getTempCByIndex(0));

  EthernetClient client = server.available();
  client.println ("<!DOCTYPE HTML><html><head>");
  client.println ("<meta http-equiv='refresh' content='60';><meta charset='utf-8'>");
  client.println ("<title>Smart House</title></head><body align='center'>");
  client.println("<h1><font face='Arial'>");
  client.println(time.gettime("H:i"));
  client.println("</h1>");
  client.println("<h3>");
  client.println(time.gettime("d.m.Y"));
  client.println("</font></h3>");
  client.println("<p><font size='55' color='red' face='Arial Black'>");
  client.println (round(ds.getTempCByIndex(0)));
  client.println (" °C");
  client.println("</font></p>");
  client.println ("</body></html>");
  client.stop();
}

(2 баллов) 3

2 Ответы

+1 голос
В функцию setup() вставить функцию вызова запроса температуры.
(2.7 тыс. баллов) 5 27 55
+1 голос

При объявлении переменной timing сделайте её равной 10 минутам (600000) и усё.

Таймер будет сразу переполнен и датчик будет опрошен....

А можете опросить и попозже , -не сразу , тогда ставьте любое время какое Вам нужно.

Вот так:


unsigned long timing = 600000; // Переменная для хранения точки отсчета 
(575 баллов) 4 7 18
исправил
Вот так в итоге сделал:
Переменную сделал так: unsigned long timing = 0;

А в loop так:
  if (timing == 0 || millis() - timing > 600000) {
    timing = millis();
    ds.requestTemperatures();
  }
Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.

    За этот месяц ещё никого.

    ...