Не могу вывести значение EEPROM

artur141
Offline
Зарегистрирован: 06.02.2016

Где ошибка?

#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);
  }
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ошибка в Вшем подходе к делу.

Вы в армии сержантом были? И до сих пор считаете, что все будут кидаться исполнять каждый Ваш чих? Без "пожалуйста", без объяснения проблемы, без ничего?

Ну, считайте дальше, Вам жить.

bwn
Offline
Зарегистрирован: 25.08.2014

Поддержу Евгения.(((
Вам чисто интересно запустить I2C EEPROM? Если нет, то для хранения заданных значений температур и пунктов меню, за глаза бортового EEPROMа МК. К моменту, когда его ресурс придет к завершению, развалится и инкубатор, да и нас уже на этом свете не будет.
С этой библиотекой не работал, но смущает 46 строка. Как без дополнительных префиксов, в одну ячейку записать четырехбайтовое значение? А потом при считывании еще и узнать, что это не byte, char, int, long, а оказывается float? Ответите на этот вопрос, думаю ответите и на все остальные.

artur141
Offline
Зарегистрирован: 06.02.2016

Я не знаю как вывести это значение на экран

bwn
Offline
Зарегистрирован: 25.08.2014

Например, lcd.print(EEPROM_read(1));