ค่าใน eeprom ไม่ตรงทำไงดีครับ
EEPROM ESP8266 การบันทึกค่าให้เกิน 255
ช่วยแนะนำวิธีเขียน กำหนดค่าการทำงาน ตวามชื้น+อุณหภูมิ ผ่าน slider blynk
Arduino การบันทึกข้อมูล เพื่มนำมาใช้
PZEM-004T V3.0 สอบถามการอ่านค่าตัว kWh ให้สามารถเก็บค่าได้เกิน 9999 ครับ
Atthaphon September 15, 2020, 6:52am #2
#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 */
}
ส่วนของ การเขียนเข้าไป
Atthaphon September 15, 2020, 6:53am #3
#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 */
}
การ อ่านออกมา
PUYIOT September 15, 2020, 9:27am #4
ก็ปกตินะครับ หรือผมไม่เข้าใจคำถาม อิ…อิ
#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 */
}
Atthaphon September 15, 2020, 10:00am #5
ใส่ delay ไว้ทำไรหรอครับ
Atthaphon September 15, 2020, 10:26am #6
put ถ้าเราเก็บ ทศนิยม เก็บยังไงหรอครับ
PUYIOT September 15, 2020, 2:00pm #7
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 */
}
Atthaphon September 16, 2020, 2:14am #8
มันไม่ตรงอะครับ งง เลย 55
Remy_Martin (Permpol Thanapunnamas) September 16, 2020, 2:57am #9
@Atthaphon ทำไมไม่ใช้โค้ตที่พี่ @PUYIOT ลงไว้ให้ละครับ โค้ตไม่เหมือนกันเอา ผลลัพธ์มาเปรียบเทียบกันไม่ได้นะครับ Confirm Code ใหม่ครับ
1 Like
PUYIOT September 16, 2020, 3:03am #10
ถ้างั้นลอง เคลียร์ค่าดูมั๊ยครับ อาจจะเป็นไปได้ว่า Esp8266 ตัวอาจโดนใช้แล้ว และยังมีค่าเก่าค้างอยู่
Up load เสร็จแล้ว จากนั้นก็เลือกกลับไปเหมือนเดิมครับ
Atthaphon September 16, 2020, 3:23am #11
ผมใช้ board UNO อะครับ ตามที่พี่ส่ง code มาให้ค่ามันตรงครับ แต่ ผมอยากลองแยกคนละ for loop แล้วทีนี้พอผมแยกเสร็จมันก็ขึ้นค่าไม่ตรงมันเกิดจากสาเหตุอะไรหรอครับ
Atthaphon September 16, 2020, 3:23am #12
#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 */
}
PUYIOT September 16, 2020, 3:29am #13
ลอง Code ที่ให้มา ใน Esp8266 นะครับ ค่าออกมา มัน OK อยู่ครับ ส่วน board UNO ยังไม่เคยลองครับ
Atthaphon September 16, 2020, 3:29am #14
ผมไม่มี Esp8266 อะครับ
PUYIOT September 16, 2020, 3:31am #15
ลองดูแบบง่ายๆ ก่อน มั๊ยครับ ว่ามันเก็บค่าตรงหรือปล่าว
#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() {
}
Atthaphon September 16, 2020, 3:32am #16
ตรงครับผม
Remy_Martin (Permpol Thanapunnamas) September 16, 2020, 3:34am #17
มันอาจจะต้อง write ก่อนมา put, get รึป่าวนะ
Atthaphon September 16, 2020, 3:36am #18
ตอนแรกผมกะจะใช้ write แต่ผมลืมว่าค่าที่ผมจะเอามาใช้มันเกิน 300 กว่า เลยเก็บไม่ได้
PUYIOT September 16, 2020, 3:43am #19
ลองเปลี่ยนค่าดูครับ 253,254,255,256,257,258,259,600,601,602
ถ้า 1 Address อาจจะรับค่าได้ แค่ 0-255
Atthaphon September 16, 2020, 3:45am #20
PUYIOT September 16, 2020, 3:46am #21
ครับตามนั้นเลย
Atthaphon September 16, 2020, 3:46am #22
ควรทำไงให้เก็บได้มากกว่านั้นหรอครับ
PUYIOT September 16, 2020, 3:49am #23
1 Address เก็บค่าได้ 1Byte = 2ยกกำลัง8 =256 ครับ
Remy_Martin (Permpol Thanapunnamas) September 16, 2020, 3:54am #24
ถ้าอยากได้เกินนั้นควรเก็บทีละ Byte ครับ
เขียน
String text_In;
n = 0;
n = text_In.length();
Serial.println("writing eeprom text_In:");
for (int i = 0; i < n; ++i)
{
EEPROM.write(i, text_In[i]);
EEPROM.commit();
Serial.print("text_In: ");
Serial.println(text_In[i]);
}
โค้ตอ่าน
Serial.println("Reading EEPROM text_In");
for (int i = 0; i < 4; ++i) //ระบุต่ำแหน่ง EEPROM ที่เก็บ
{
text_In += char(EEPROM.read(i)); // นำค่ามารวมกัน
}
Serial.print("text_In: ");
Serial.println(text_In);
1 Like
PUYIOT September 16, 2020, 4:06am #25
อยากให้ลองดูอีกรอบนะครับ
#include <EEPROM.h>
int data1 = 600;
int data2 = 256;
void setup() {
Serial.begin(9600);
EEPROM.put(0, data1);
EEPROM.put(1, data2);
EEPROM.get(0, data1);
Serial.println(data1);
EEPROM.get(1, data2);
Serial.println(data2);
Serial.println("Written int data type!");
}
void loop() {
/* Empty loop */
}
Remy_Martin (Permpol Thanapunnamas) September 16, 2020, 4:12am #26
256 - 256 => 0
257 - 256 => 1
258 - 256 => 2
259 - 256 => 3
600 - 256 = 344 --Step1
344 - 256 = 88 --End
601 - 256 = 345 --Step1
345 - 256 = 89 --End
602 - 256 = 346 --Step1
346 - 256 = 90 --End
Atthaphon September 16, 2020, 4:12am #27
PUYIOT September 16, 2020, 4:19am #28
คือมันทำให้ผมสงสัยเรื่อง EEPROM ของ Arduino uno กับ Esp8266 น่ะครับ ว่ามันต่างกันยังไง ค่าใน ESP8266 มันแสดงค่าได้ครับ
Atthaphon September 16, 2020, 4:21am #29
อันนี้ผมก็ไม่รู้ครับ 555
PUYIOT September 16, 2020, 4:24am #30
http://fitrox.lnwshop.com/article/61/tutorial-การใช้งาน-eeprom-internal
PUYIOT September 16, 2020, 4:36am #31
ลองดูครับ
#include <EEPROM.h>
int data1 = 600;
void setup() {
Serial.begin(9600);
int addrEEPROM = 1;//// จะเริ่มต้นอ่าน/เขียนที่ Address ที่ 1
EEPROM.put(addrEEPROM, data1);
addrEEPROM += sizeof(data1);// เลื่อน Address ไปตามขนาดของ data1 กลายเป็น Address ใหม่
EEPROM.get(addrEEPROM, data1);
Serial.println(data1);
Serial.println("Written int data type!");
}
void loop() {
/* Empty loop */
}
Atthaphon September 16, 2020, 4:42am #32