พอดีผมได้ทำการซึกษาเขียน code เก็บข้อมูลจาก input(คือจะเอาไปวัดโซล่าเซลล์) เก็บข้อมูลใส่ SDcard แบบ realtime โดยมีโมดุล RTC ที่ใช้กับ Arduino มาช่วยอะคับ
** ปัญหาคือ ผมอยากให้มันเริ่มบันทึกข้อมูลเองเวลาประมาณ ตี 5 ถึง 6 โมงเย็นของทุกๆวันอะคับโดยที่เราจะใส่ไฟเลี้ยงไว้ตลอดเวลา ผมเขียนไม่เป็น ตอนนี้เขียนได้แค่ delay ให้เก็บค่าเป็นวินาทีและทันทำงานไปเรื่อยๆอะคับ ใครพอรู้ช่วยเติมให้หน่อยได้มั่ยคับ
#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
File myFile;
const int chipSelect = 10;
String time ;
tmElements_t tm;
int volt = A0;
int datavolt = 0;
boolean present =0;
int i=0;
int val11;
float val2;
float amp ;
void setup()
{
Serial.begin(9600);
while(!Serial) {
;
} // wait for serial
pinMode(SS, OUTPUT);
pinMode(volt,INPUT);
pinMode(3,OUTPUT);
pinMode(10,OUTPUT);
checkSD();
//write label excel = หัวข้อของตารางใน Excel
myFile = SD.open("arduino.csv", FILE_WRITE);
if(myFile)
{
myFile.print("time:date");
myFile.print(",");
myFile.print(" volt");
myFile.print(",");
myFile.print(" AMP");
myFile.print(",");
myFile.println(" line");
myFile.close();
}
}
void loop() {
time = Now();
//WriteText(time);
{
float temp;
val11=analogRead(A1);
temp=val11/4.092;
val11=(int)temp;//
val2=((val1100)/10);
int sensorValue = analogRead(A2);
amp = (( 520-sensorValue ) * 27.03/1023);
Serial.print(time);
Serial.print(" : ");
Serial.print(val2);
Serial.print(" volt");
Serial.print(" ");
Serial.print(amp);
Serial.println("A");
}
if(present==1)
{
//ถ้าเท่ากับ 1 เมื่อไหร่ให้มันทำงาน
i++;
writeSD();
}
delay(3000); //////// เนี่ยคับทำได้แค่ให้มัน delay
}
void ReadText(){
// re-open the file for reading:
myFile = SD.open("arduino.csv");
if (myFile) {
Serial.println("arduino.csv:");
// read from the file until there's nothing else in it:
while (myFile.available()) {
Serial.write(myFile.read());
}
// close the file:
myFile.close();
}
else {
// if the file didn't open, print an error:
Serial.println("error opening arduino.csv");
}
}
void checkSD()
{
Serial.println("sheck SD card");
if (!SD.begin(chipSelect)) {
Serial.println("Card failed");
return;
}
Serial.println("Card OK");
present=1;
delay(2000);
}
void writeSD()
{
myFile = SD.open("arduino.csv", FILE_WRITE);
if(myFile)
{
myFile.print(time);
myFile.print(",");
myFile.print(val2);
myFile.print(",");
myFile.print(amp);
myFile.print(",");
myFile.println(i);
myFile.close();
}
}
String Now(){
String time = "";
if (RTC.read(tm)) {
// time = String(tm.Hour+":"+tm.Minute+":"+tm.Secnd+" DAY : "+tm.Day+"/"+tm.Month+"/"+tmYearToCalendar(tm.Year));
time+=tm.Hour;
time+=":";
time+=tm.Minute;
time+=":";
time+=tm.Second;
time+=" DAY : ";
time+=tm.Day;
time+="/";
time+=tm.Month;
time+="/";
time+=tmYearToCalendar(tm.Year);
}
else {
time = "NO";
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
}
else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
}
return time;
}
ใครพอรู้วิธีเขียนโปรแกรมตั้งเวลาการทำงานมั่งคับ
** ปัญหาคือ ผมอยากให้มันเริ่มบันทึกข้อมูลเองเวลาประมาณ ตี 5 ถึง 6 โมงเย็นของทุกๆวันอะคับโดยที่เราจะใส่ไฟเลี้ยงไว้ตลอดเวลา ผมเขียนไม่เป็น ตอนนี้เขียนได้แค่ delay ให้เก็บค่าเป็นวินาทีและทันทำงานไปเรื่อยๆอะคับ ใครพอรู้ช่วยเติมให้หน่อยได้มั่ยคับ
#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
File myFile;
const int chipSelect = 10;
String time ;
tmElements_t tm;
int volt = A0;
int datavolt = 0;
boolean present =0;
int i=0;
int val11;
float val2;
float amp ;
void setup()
{
Serial.begin(9600);
while(!Serial) {
;
} // wait for serial
pinMode(SS, OUTPUT);
pinMode(volt,INPUT);
pinMode(3,OUTPUT);
pinMode(10,OUTPUT);
checkSD();
//write label excel = หัวข้อของตารางใน Excel
myFile = SD.open("arduino.csv", FILE_WRITE);
if(myFile)
{
myFile.print("time:date");
myFile.print(",");
myFile.print(" volt");
myFile.print(",");
myFile.print(" AMP");
myFile.print(",");
myFile.println(" line");
myFile.close();
}
}
void loop() {
time = Now();
//WriteText(time);
{
float temp;
val11=analogRead(A1);
temp=val11/4.092;
val11=(int)temp;//
val2=((val1100)/10);
int sensorValue = analogRead(A2);
amp = (( 520-sensorValue ) * 27.03/1023);
Serial.print(time);
Serial.print(" : ");
Serial.print(val2);
Serial.print(" volt");
Serial.print(" ");
Serial.print(amp);
Serial.println("A");
}
if(present==1)
{
//ถ้าเท่ากับ 1 เมื่อไหร่ให้มันทำงาน
i++;
writeSD();
}
delay(3000); //////// เนี่ยคับทำได้แค่ให้มัน delay
}
void ReadText(){
// re-open the file for reading:
myFile = SD.open("arduino.csv");
if (myFile) {
Serial.println("arduino.csv:");
// read from the file until there's nothing else in it:
while (myFile.available()) {
Serial.write(myFile.read());
}
// close the file:
myFile.close();
}
else {
// if the file didn't open, print an error:
Serial.println("error opening arduino.csv");
}
}
void checkSD()
{
Serial.println("sheck SD card");
if (!SD.begin(chipSelect)) {
Serial.println("Card failed");
return;
}
Serial.println("Card OK");
present=1;
delay(2000);
}
void writeSD()
{
myFile = SD.open("arduino.csv", FILE_WRITE);
if(myFile)
{
myFile.print(time);
myFile.print(",");
myFile.print(val2);
myFile.print(",");
myFile.print(amp);
myFile.print(",");
myFile.println(i);
myFile.close();
}
}
String Now(){
String time = "";
if (RTC.read(tm)) {
// time = String(tm.Hour+":"+tm.Minute+":"+tm.Secnd+" DAY : "+tm.Day+"/"+tm.Month+"/"+tmYearToCalendar(tm.Year));
time+=tm.Hour;
time+=":";
time+=tm.Minute;
time+=":";
time+=tm.Second;
time+=" DAY : ";
time+=tm.Day;
time+="/";
time+=tm.Month;
time+="/";
time+=tmYearToCalendar(tm.Year);
}
else {
time = "NO";
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
}
else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
}
return time;
}