как записать данные с ds18b20 в eeprom?
- Войдите на сайт для отправки комментариев
Ср, 28/10/2015 - 04:45
Подскажите, записать данные с ds18b20 в eeprom? Пытаюсь разобраться, но не получается...
#include <EEPROM.h>
#include <OneWire.h>
OneWire ds(7);
unsigned long currentTime;
unsigned long loopTime;
int addr = 0;
int val = 0;
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
byte data[2];
ds.reset();
ds.write(0xCC);
ds.write(0x44);
delay(750);
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read();
data[1] = ds.read();
int Temp = (data[1] << 8) + data[0];
Temp = Temp >> 4;
val = Temp;
EEPROM.write(addr, val);
currentTime = millis();
if (currentTime >= (loopTime + 30000)) {
digitalWrite(13, HIGH);
loopTime = currentTime;
}
Serial.println(EEPROM.read(val));
}
Тебя не смущает, что второй параметр uint8_t размером в 1 байт, а int - 2 байта?
Запись в ячейку идет только значения от 0 до 255. Приведите температуру к этой величине. Отсейте "неправильные" значения (-127 если правильно помню), сделайте приращение например на 100. Сохраняйте это значение. При считывании производите обратную операцию.
Есть такая либа http://dump.bitcheese.net/files/igigavo/EEPROM2.rar
Там оберки для eeprom_read_byte и eeprom_write_byte с циклами.
Подскажи, пожалуйста, как правльно температуру загнать еепром, не догоняю я((
Строку 7 заменить на "uint8_t val = 0"
Строку 27 заменить на "val = Temp + 100"
Строку 35 заменить на "Serial.println(EEPROM.read(addr)-100)"
Или если нет отрицательных температур, то можно без смещения писать и читать.
температура то как раз с минусом...
Кстати главный вопрос: за какое время вы убьете флеш при условии что в ячейку можно записать всего 100т раз?
Вопрос хороший, но альтернативного решения запоминания температуры и последующего сравнения её с измененной я не нашел
Запоминайте в другую переменную. И если очень надо (боитесь пропадания напряжения) пишите раз в 10-30 минут. Или возьмите внешний флеш (который будет ежеденвно меняться :).
Или еще вариант: делайте запись при изменении на 2-3 градуса.
спасибо
Есть такая либа http://dump.bitcheese.net/files/igigavo/EEPROM2.rar
Там оберки для eeprom_read_byte и eeprom_write_byte с циклами.
Есть такая либа http://dump.bitcheese.net/files/igigavo/EEPROM2.rar
Там оберки для eeprom_read_byte и eeprom_write_byte с циклами.