ค่าใน eeprom ไม่ตรงทำไงดีครับ

ค่าใน eeprom ไม่ตรงทำไงดีครับ

#include <EEPROM.h>
int temp_fan[10]     = {98, 29, 16, 17, 26, 35, 42, 49, 56, 63};
int a = 0;

void setup() {

  Serial.begin(9600);
  
  for (int i = 0; i < 10; i++)
  {
    EEPROM.put(i, temp_fan[i]);
  }
  Serial.println("Written float data type!");
}

void loop() {
  /* Empty loop */
}

ส่วนของ การเขียนเข้าไป

#include <EEPROM.h>
int temp_fan[10]     = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int a = 0;

void setup() {

  Serial.begin(9600);

  for (int i = 0; i < 10; i++)
  {
    EEPROM.get(i, temp_fan[i]);
    Serial.println(temp_fan[i]);
  }
}

void loop() {
  /* Empty loop */
}

การ อ่านออกมา

ก็ปกตินะครับ หรือผมไม่เข้าใจคำถาม อิ…อิ

#include <EEPROM.h>
int temp_fan[10]     = {98, 29, 16, 17, 26, 35, 42, 49, 56, 63};
int a = 0;

void setup() {

  Serial.begin(9600);





  for (int i = 0; i < 10; i++)
  {
    EEPROM.put(i, temp_fan[i]);
    delay(50);
    EEPROM.get(i, temp_fan[i]);
    Serial.println(temp_fan[i]);
    delay(50);
  }
  Serial.println("Written float data type!");





}

void loop() {
  /* Empty loop */
}

1

ใส่ delay ไว้ทำไรหรอครับ

put ถ้าเราเก็บ ทศนิยม เก็บยังไงหรอครับ

Delay สำหรับผมใส่เพื่อให้มันมีเวลาเก็บค่าลงในeeprom.แค่นั่นเองครับ​ กันพลาด​ อีกอย่าง​ ลองตั้งค่าตัวแปรจาก​ int เป็น​ float. แล้วใส่ค่าตัวเลขเป็นจุดทศนิยม​ 2 ตำแหน่งดูครับ

#include <EEPROM.h>
float temp_fan[10]     = {98.12, 2.90, 16.56, 1.7, 26.9, 3.45, 4.02, 49.16, 56.36, 6.56};


void setup() {

  Serial.begin(9600);





  for (int i = 0; i < 10; i++)
  {
    EEPROM.put(i, temp_fan[i]);
    delay(50);
    EEPROM.get(i, temp_fan[i]);
    Serial.println(temp_fan[i]);
    delay(50);
  }
  Serial.println("Written float data type!");





}

void loop() {
  /* Empty loop */
}

1


มันไม่ตรงอะครับ งง เลย 55

@Atthaphon ทำไมไม่ใช้โค้ตที่พี่ @PUYIOT ลงไว้ให้ละครับ โค้ตไม่เหมือนกันเอา ผลลัพธ์มาเปรียบเทียบกันไม่ได้นะครับ Confirm Code ใหม่ครับ

1 Like

ถ้างั้นลอง เคลียร์ค่าดูมั๊ยครับ อาจจะเป็นไปได้ว่า Esp8266 ตัวอาจโดนใช้แล้ว และยังมีค่าเก่าค้างอยู่

1

Up load เสร็จแล้ว จากนั้นก็เลือกกลับไปเหมือนเดิมครับ

2

ผมใช้ board UNO อะครับ ตามที่พี่ส่ง code มาให้ค่ามันตรงครับ แต่ ผมอยากลองแยกคนละ for loop แล้วทีนี้พอผมแยกเสร็จมันก็ขึ้นค่าไม่ตรงมันเกิดจากสาเหตุอะไรหรอครับ

#include <EEPROM.h>
int Day_stage[10]     = {450, 500, 16, 17, 26, 35, 42, 49, 56, 63};
int a = 0;

void setup() {

  Serial.begin(9600);





  for (int i = 0; i < 10; i++)
  {
    EEPROM.put(i, Day_stage[i]);
  }
  for (int a = 0; a < 10; a++)
  {
    EEPROM.get(a, Day_stage[a]);
    Serial.println(Day_stage[a]); 
  }
  Serial.println("Written float data type!");





}

void loop() {
  /* Empty loop */
}

ลอง Code ที่ให้มา ใน Esp8266 นะครับ ค่าออกมา มัน OK อยู่ครับ ส่วน board UNO ยังไม่เคยลองครับ

1

ผมไม่มี Esp8266 อะครับ

ลองดูแบบง่ายๆ ก่อน มั๊ยครับ ว่ามันเก็บค่าตรงหรือปล่าว

#include <EEPROM.h>
byte data1;
byte data2;
void setup() {
  Serial.begin(9600);
  Serial.println("Writing...");
  EEPROM.write(0, 5);
  EEPROM.write(1, 10);

  data1 = EEPROM.read(0);
  data2 = EEPROM.read(1);
  Serial.println(data1);
  Serial.println(data2);
}
void loop() {
}


ตรงครับผม

มันอาจจะต้อง write ก่อนมา put, get รึป่าวนะ


ตอนแรกผมกะจะใช้ write แต่ผมลืมว่าค่าที่ผมจะเอามาใช้มันเกิน 300 กว่า เลยเก็บไม่ได้

ลองเปลี่ยนค่าดูครับ 253,254,255,256,257,258,259,600,601,602

ถ้า 1 Address อาจจะรับค่าได้ แค่ 0-255

image