Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Timestamp issue with Hypnos #182

Open
garysekhon09 opened this issue Mar 15, 2022 · 0 comments
Open

Timestamp issue with Hypnos #182

garysekhon09 opened this issue Mar 15, 2022 · 0 comments

Comments

@garysekhon09
Copy link

Having issues with the timestamp while logging data with SD using Hypnos.
I tried to reset it by taking the coin cell battery out but it still not synching with the current time.

Timestamp1 2022-03-15

Timestamp2 2022-03-15

#define _dout A0 //MISO
#define _sclk A1 //SCK
#define _pdwn A2 //A2

#define sdPin 11 // Change to 11 if using HypnosV3.3
#define alarmPin 12 // Hypnos interrupt pin

#include "ADS1232.h"
#include "RTClib.h"
#include <SD.h>

ADS1232 weight = ADS1232(_pdwn, _sclk, _dout);
File myFile;
RTC_DS3231 rtc;

const float startingWeight = 815.00; // Known weight to divide by in grams
int unit = 0; // Units: {0 = grams, 1 = kilograms, 2 = ounces}
char buff[] = "Start time is hh:mm:ss DDD, DD MMM YYYY";

int packet = 0; // Packet number

void do_calibration() {
long t_new_offset = 0;
long t_raw_read = 0;
float t_set_scale_value = 0;
float t_weight = 0;

// reset to default values
weight.OFFSET = 0;
weight.SCALE = 1.0;

// tare
t_new_offset = weight.raw_read(100); // Takes 8 measurements and averages it
weight.OFFSET = t_new_offset;
Serial.print("Calibration offset = ");Serial.println(weight.OFFSET);
Serial.println("You have 15 seconds to put a known weight on the scale");
delay(15000);

// do calibration based on a known weight
t_raw_read = weight.raw_read(3);
Serial.print("Units read = ");Serial.println(t_raw_read);
t_set_scale_value = t_raw_read / startingWeight; // divide it to a known weight
weight.SCALE = t_set_scale_value;
Serial.print("Calibration scale value = ");Serial.println(weight.SCALE);

/*
// Force Calibrate
weight.OFFSET = 8521423; // Set to "Calibration offset" from calibration (8527704)
weight.SCALE = 2069.49; // Set to "Calibration Scale value" from calibration (427.06) */

// read weight
t_weight = weight.units_read(3);
Serial.print("Weight = ");Serial.println(t_weight, 5);

}

void print_units() {
if (unit == 0)
Serial.println(" g");
else if (unit == 1)
Serial.println(" kg");
else if (unit == 2)
Serial.println(" oz");
else
Serial.println("Unknown unit");
}

void rtcSetup() {

if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}

if (rtc.lostPower()) {
Serial.println("RTC lost power, let's set the time!");
// When time needs to be set on a new device, or after a power loss, the
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(DATE), F(TIME)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}

DateTime now = rtc.now(); // Get current time

// Print current time and date
Serial.println(now.toString(buff));

}

void sdSetup() {

// Checking if SD is active
if (!SD.begin(sdPin)) {
Serial.println("initialization failed!");
return;
}

Serial.println("SD initialized!");
myFile = SD.open("data.csv", FILE_WRITE);

// if the file opened okay, write to it:
if (myFile) {

myFile.print("Packet,Timestamp,Weight");
myFile.println(",");

// close the file:
myFile.close();
Serial.println("SD successfully logged.");

} else {
// if the file didn't open, print an error:
Serial.println("Error opening data.csv");
}

}

void sdLog() {

DateTime now = rtc.now(); // Get current time
myFile = SD.open("data.csv", FILE_WRITE);

// Writes sensor values
if (myFile) {

// Packet number
myFile.print(packet); 
myFile.print(",");

// Timestamp
myFile.print("Date: ");
myFile.print(now.year(), DEC);
myFile.print('/');
myFile.print(now.month(), DEC);
myFile.print('/');
myFile.print(now.day(), DEC);
myFile.print(" Time: ");
myFile.print(now.hour(), DEC);
myFile.print(':');
myFile.print(now.minute(), DEC);
myFile.print(':');
myFile.print(now.second(), DEC);
myFile.print(",");

// Weight
myFile.print(weight.units_read(3), 5); // Weight
myFile.println(",");

myFile.close();

Serial.println("Data successfully logged");

}
else {
// if the file didn't open, print an error
Serial.println("Error opening data.csv");
}
}

void setup() {

Serial.begin(9600);
//while(!Serial);

// Initializing and setting pinouts
pinMode(5, OUTPUT);
digitalWrite(5, LOW);
pinMode(6, OUTPUT);
digitalWrite(6, HIGH);

pinMode(sdPin, OUTPUT);

// Setting up scale and calibrating it
weight.power_up();
do_calibration();

// Setting up RTC and SD
rtcSetup();
sdSetup();
}

void loop() {

packet++;
DateTime now = rtc.now(); // Get current time

// Print data on serial monitor
// Packet Number
Serial.println("Packet: " + String(packet));

// Timestamp
Serial.print("Date: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" Time: ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();

// Weight
Serial.println(weight.units_read(3), 5);

// Log data to SD
sdLog();

delay(60000);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant