Помогите переделать скетч

sega66
Offline
Зарегистрирован: 09.11.2011

Имеется такой цикл для нескольких датчиков температуры. Он опрашивает каждую минуту сразу все датчики, а мне надо, чтоб опрашивался первый датчик, потом через минуту 2-й и т. д.

Туплю и не получается:(


[code]
void loop()
{
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) { // каждую минуту считываем температуру

    previousMillis = currentMillis;
    byte address[ADDR_SIZE];

    for (byte i = 0; i < NUMBER_OF_SENSORS; i++)
    {

      for (byte j = 0; j < ADDR_SIZE; j++)
      {
        address[j] = sensor_addresses[i * ADDR_SIZE + j];
      }
      temp[i] = sen18b20.getTempC100(address);

      zunoSendReport(1 + i);

      digitalWrite(LED_PIN, LOW);
      MY_SERIAL.print("Temperature - ");
      MY_SERIAL.print(i);
      MY_SERIAL.print(" - ");
      MY_SERIAL.println(sen18b20.getTempC100(address) / 100);
    }
  }
}
[/code]
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sega66 пишет:

не получается:(

Есть большая разница между "не получается" и "не пробовал". Если первое, то скетчи-попытки в студию, если же второе, то в профильный раздел.

sega66
Offline
Зарегистрирован: 09.11.2011

Вроде так работает:)

[code]
#include <ZUNO_DS18B20.h>
#define PIN_OW 9     // 9- номер пина для датчиков температуры DS18B20
OneWire ow(PIN_OW);  // подключаем библиотеку One Ware
DS18B20Sensor sen18b20(&ow);// scanAloneSensor() возвращает 8-байтовый уникальный адрес датчика, подключенного к шине.
#define NUMBER_OF_SENSORS 7  // кол-во датчиков температуры
#define ADDR_SIZE 8

#define MY_SERIAL Serial

unsigned long previousMillis = 0;
const long interval = 10000;
byte i = 0;

byte  sensor_addresses[NUMBER_OF_SENSORS * ADDR_SIZE] =
{
  0x28, 0xEE, 0xC4, 0x3A, 0x2E, 0x16, 0x01, 0x32,
  0x28, 0xEE, 0x0C, 0xE4, 0x1C, 0x16, 0x01, 0xAB,
  0x28, 0xEE, 0xF2, 0x38, 0x2E, 0x16, 0x01, 0x2D,
  0x28, 0xEE, 0x29, 0xD9, 0x2C, 0x16, 0x02, 0x68,

  0x28, 0xEE, 0x1E, 0xB4, 0x13, 0x15, 0x01, 0x86,
  0x28, 0xEE, 0xA5, 0xBC, 0x13, 0x15, 0x01, 0xA5,
  0x28, 0xEE, 0xCB, 0xAC, 0x13, 0x15, 0x01, 0x2E
};
int temp[NUMBER_OF_SENSORS];

void setup() {
  MY_SERIAL.begin(9600);
}

void loop()
{
  unsigned long currentMillis = millis();
  byte address[ADDR_SIZE];
  if (currentMillis - previousMillis >= interval) { // каждую минуту считываем температуру
    if (i >= NUMBER_OF_SENSORS) {
      i = 0;
    }

    {
      for (byte j = 0; j < ADDR_SIZE; j++)
      {
        address[j] = sensor_addresses[i * ADDR_SIZE + j];
      }
      temp[i] = sen18b20.getTempC100(address);
      zunoSendReport(1 + i);
      previousMillis = currentMillis;

      MY_SERIAL.print("Temperature - ");
      MY_SERIAL.print(i);
      MY_SERIAL.print(" - ");
      MY_SERIAL.println(sen18b20.getTempC100(address) / 100);
    }
    i++;
  }
}
[/code]