ต่อไป จะแก้ไขข้อที่ 1 ให้สามารถเขียนข้อมูลได้เลยเมื่อระบบเริ่มทำงานแต่ลืมเสียบ SD card เข้าไป แต่หลังจากเสียบแล้ว ก็ เริ่มทำการเขียนข้อมูลต่อได้เลย
(1. ช่วงที่ esp 8266 เริ่มทำงาน ถ้าไม่ได้ใส่ SD Card เข้าไป ตั้งแต่แรก ระบบจะไม่สามารถเขียนหรืออ่านข้อมูลจาก SD Card ได้ หลังจากใส่ SD Card เข้าไปแล้วให้กดปุ่ม Reset esp 8266 1 ครั้ง ระบบก็จะทำงานปกติ)
เอา Code ส่วนนี้ ไปแทนที่ ในส่วนของ void setup{ }
void setup()
{
Serial.begin(115200);
dht.begin();
#ifdef ARDUINO_ARCH_ESP8266
Wire.begin(4, 5); // GPIO4 = D2 and GPIO5 = D1 on ESP8266
#else
Wire.begin();
#endif
//rtc.set(0, 17, 15, 3, 5, 3, 20);//ใช้เฉพาะตั้งเวลา ถ้าจะตั้งก็ เอา // ออก เมื่อตั้งได้ตรงแล้วก็เอา // ใส่กลับไปเหมือนเดิม
// RTCLib::set(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)
Serial.println();
Serial.println("Initializing SD card...");
delay(300);
pinMode(SS, OUTPUT);//หรือขา CS จะกำหนดเป็นขาใดก็ได้ ในที่นี้กำหนดเป็นขา D4
insert_card://กรณีเริ่มระบบใหม่ แต่ SD card ยังไม่ได้เสียบ
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
//Serial.println("initialization failed. Things to check:");
Serial.println("* is a card inserted?");
//Serial.println("* is your wiring correct?");
//Serial.println("* did you change the chipSelect pin to match your shield or module?");
//return;
goto insert_card;
} else {
if (!SD.begin(chipSelect)) {
Serial.println("initialization failed!");// ถ้าเริ่มทำงาน ถ้าไม่เสียบ SD Card ได้ แสดงข้อความ initialization failed
return;
}
Serial.println("initialization done."); // ถ้าเริ่มทำงาน SD Card ได้ แสดงข้อความ initialization done
// ปักหมุดชื่อว่า createNew ไว้หากสร้างไฟล์ไม่เสร็จ จะให้กลับมาที่จุดนี้ใหม่
createNew:
// เปิดไฟล์ ชื่อ test.txt ขึ้นมา เราจะสามารถเปิดได้ครั้งละ 1 ไฟล์เท่านั้น
// หากต้องการใช้งานหลายไฟล์ ทำได้โดยการปิดไฟล์หนึ่งไปก่อน แล้วเปิดอีกไฟล์ขึ้นมาทำงาน
// หากไม่มีไฟล์ที่ชื่อตามต้องการ จะเป็นการสร้างไฟล์ขึ้นมาใหม่
myFile = SD.open("PM_check.txt", FILE_WRITE);
// ปิดไฟล์ลงไปก่อน
myFile.close();
// ลองตรวจสอบดูว่ามีไฟล์อยู่หรือไม่ ถ้ามี Serial monitor บอกว่ามีไฟล์อยู่ ถ้าไม่มีให้แสดงว่าไม่มี
// เราเพิ่งสร้างไฟล์ใหม่ขึ้นมา ปกติต้องมีไฟล์ แต่หากไม่มีก็เขียนดค้ด goto กลับไฟสร้างไฟล์ใหม่อีกครั้ง
if (SD.exists("PM_check.txt")) {
Serial.println("File exists.");
} else {
Serial.println("File doesn't exists.");
goto createNew;
}
delay(3000);
// ปักหมุดชื่อ newWrite ไว้กรณีเขียนไฟล์ไม่สำเร็จ ให้กลับมาจุดนี้ใหม่
newWrite:
// ทำการเปิดไฟล์อีกครั้งแล้วทำการเขียนข้อความว่า testing SD Card..... ลงไปในไฟล์
myFile = SD.open("PM_check.txt", FILE_WRITE);
if (myFile) {
Serial.print("Writing to PM_check.txt...");
//myFile.println("รายงานการเก็บข้อมูล.....");
// ปิดไฟล์แล้วแสดงผล done
myFile.close();
Serial.println("done.");
} else {
// หากเปิดไฟล์ขึ้นมาไม่สำเร็จ แสดง error แล้วกลับไปที่ newWrite เพื่อลองทำใหม่
Serial.println("error opening file");
goto newWrite;
}
delay(3000);
}