#include <OneWire.h>
#include <DallasTemperature.h>
#include <TimerOne.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define BUFFER_SIZE 10
volatile float buffer[BUFFER_SIZE];
volatile int head = 0;
volatile int tail = 0;
volatile int count = 0;
volatile bool bufferFullFlag = false;
unsigned long lastPlotTime = 0;
void readSensorISR() {
if (count >= BUFFER_SIZE) {
bufferFullFlag = true;
} else {
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
buffer[head] = tempC;
head = (head + 1) % BUFFER_SIZE;
count++;
}
}
void setup() {
Serial.begin(115200);
sensors.begin();
Timer1.initialize(200000);
Timer1.attachInterrupt(readSensorISR);
}
void loop() {
if (millis() - lastPlotTime >= 1000) {
lastPlotTime = millis();
if (bufferFullFlag) {
Serial.println("BUFFER FULL");
noInterrupts();
bufferFullFlag = false;
interrupts();
}
while (count > 0) {
float dataSuhu;
noInterrupts();
dataSuhu = buffer[tail];
tail = (tail + 1) % BUFFER_SIZE; count--;
interrupts();
Serial.println(dataSuhu);
}
}
}