как записать данные с 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 с циклами.