Помогите переделать скетч
- Войдите на сайт для отправки комментариев
Втр, 27/03/2018 - 10:38
Имеется такой цикл для нескольких датчиков температуры. Он опрашивает каждую минуту сразу все датчики, а мне надо, чтоб опрашивался первый датчик, потом через минуту 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]
не получается:(
Есть большая разница между "не получается" и "не пробовал". Если первое, то скетчи-попытки в студию, если же второе, то в профильный раздел.
Вроде так работает:)
[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]