Не могу вывести значение EEPROM
- Войдите на сайт для отправки комментариев
Сб, 06/02/2016 - 18:52
Где ошибка?
#include <EEPROM2.h> //I2C bus support #include <Wire.h> //I2C #include <LiquidCrystal_I2C.h> //OneWire bus suport #include <OneWire.h> //DS18B20 temperature sensor support #include <DallasTemperature.h> //DS18B20 sensor pin #define ONE_WIRE_BUS 10 int del = 80; // переменная ожидания между выборами меню unsigned int interval = 300; // интервал сколько будет длиться цикл while, после чего перейдёт к следующему меню.(кол-во итераций) float tempInk; // Температура DS18B20 // Setup a oneWire instance to communicate with any OneWire devices // (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display #define button_minus_pin 2 //пин кнопки "минус" #define button_plus_pin 3 //пин кнопки "плюс" #define button_enter_pin 4 //пин кнопки "enter" boolean button_minus; // статус нажатия кнопок boolean button_plus; boolean button_enter; boolean bottomView = 0; // флаг индикации нижней строки void setup() { Serial.begin(9600); lcd.init(); // Старт дисплея lcd.backlight(); // Включаем подсветку дисплея byte stat; byte error = 0; pinMode(button_minus_pin, INPUT_PULLUP); //подтягиваем входы кнопок к плюсу встроенными резисторами pinMode(button_plus_pin, INPUT_PULLUP); pinMode(button_enter_pin, INPUT_PULLUP); EEPROM_read(1, tempInk); if(tempInk > 40 || tempInk < 30) EEPROM_write(1, 37.5); lcd.clear(); lcd.setCursor(0, 0); lcd.print("INKUBATOR"); delay(5000); lcd.clear(); } void loop() { sensors.requestTemperatures(); //Read first sensor float temp = sensors.getTempCByIndex(0); //Print first sensor results lcd.setCursor (0, 0 ); // номер позиции lcd.print("T1: "); lcd.print(temp); lcd.print(" *C "); // значок температуры //Wait 0.1 sec delay(100); } ///читаем кнопки ///////////////////////////////////////////////////////////////////////// void button_read() {//функция проверки нажатия кнопки button_minus = digitalRead(button_minus_pin); //запоминаем значение кнопки button_plus = digitalRead(button_plus_pin); //запоминаем значение кнопки button_enter = digitalRead(button_enter_pin); //запоминаем значение кнопки } //меню//////////////////////////////////////////////////////////////////////////////////////// void menu() { temp_setup(); } //устанавливаем температуру в меню/////////////////////////////////////////////////////////// void temp_setup() { float tempInk; lcd.clear(); delay(del); button_read(); lcd.setCursor(0, 1); lcd.print(tempInk); delay(1000); int x = 0; while (1) { x++; if (x > interval) { break; } button_read(); EEPROM_write(1, 37.5); EEPROM_read_mem(1, &tempInk, sizeof(tempInk)); EEPROM_read(1, tempInk); if (!button_enter) { delay(del); lcd.clear(); //очищаем экран break; } if (!button_minus) { x = 0; EEPROM_write(1, tempInk - 0.1); if (tempInk < 30.0) { //проверяем, если выше 40, EEPROM_write(1, 30.0); //пишем в память 40 } lcd.clear(); } if (!button_plus) { x = 0; EEPROM_write(1, tempInk + 0.1); if (tempInk > 40.0) { //проверяем, если выше 30, EEPROM_write(1, 40.0); //пишем в память 30 } lcd.clear(); } lcd.setCursor(0, 1); lcd.print(tempInk); lcd.print(tempInk, 1); delay(del); } }
Ошибка в Вшем подходе к делу.
Вы в армии сержантом были? И до сих пор считаете, что все будут кидаться исполнять каждый Ваш чих? Без "пожалуйста", без объяснения проблемы, без ничего?
Ну, считайте дальше, Вам жить.
Поддержу Евгения.(((
Вам чисто интересно запустить I2C EEPROM? Если нет, то для хранения заданных значений температур и пунктов меню, за глаза бортового EEPROMа МК. К моменту, когда его ресурс придет к завершению, развалится и инкубатор, да и нас уже на этом свете не будет.
С этой библиотекой не работал, но смущает 46 строка. Как без дополнительных префиксов, в одну ячейку записать четырехбайтовое значение? А потом при считывании еще и узнать, что это не byte, char, int, long, а оказывается float? Ответите на этот вопрос, думаю ответите и на все остальные.
Я не знаю как вывести это значение на экран
Например, lcd.print(EEPROM_read(1));