stevestrong wrote: ↑Sat Nov 28, 2020 1:46 pm
Code: Select all
//-----------------------------------------------------------------------------
#define NR_BYTES 10
uint8 inBytes[NR_BYTES], inCnt, rxBytes;
uint32 rxTime;
//-----------------------------------------------------------------------------
void loop()
{
if (Serial2.available()>0) // serial data available?
{
uint32 m = millis();
if ((m-rxTime)>80)
{
rxBytes = inCnt;
inCnt = 0
}
rxTime = m;
if (inCnt>=NR_BYTES)
inCnt = 0;
inBytes[inCnt++] = Serial2.read();
}
if (is_button_press==LOW && !digitalRead(buttonPin)) // button pressed?
{
is_button_press = HIGH;
digitalWrite(ledPin, LOW); // turn LED on
Serial.print("Received bytes: "); Serial.println(rxBytes);
for (int i=0; i<rxBytes; i++)
Serial.write(inBytes[i]);
delay(debounce_delay);
}
if (is_button_press==HIGH && digitalRead(buttonPin)) // button released?
{
is_button_press = LOW;
digitalWrite(ledPin, HIGH); // turn LED off
}
}
Sir, could you please integrate this code with this:
Code: Select all
#include <RTClock.h>
#define buttonPin PA10
RTClock rtclock (RTCSEL_LSE); // initialise
int timezone = 8; // change to your timezone
time_t tt, tt1;
tm_t mtt;
uint8_t dateread[11];
bool dispflag = true;
const char * weekdays[] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};
const char * months[] = {"Dummy", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
uint8_t str2month(const char * d)
{
uint8_t i = 13;
while ( (--i) && strcmp(months[i], d)!=0 );
return i;
}
const char * delim = " :";
char s[128]; // for sprintf
void ParseBuildTimestamp(tm_t & mt)
{
// Timestamp format: "Dec 8 2017, 22:57:54"
sprintf(s, "Time: %s, %s\n", __DATE__, __TIME__);
//Serial.print(s);
char * token = strtok(s, delim); // get first token
// walk through tokens
while( token != NULL ) {
uint8_t m = str2month((const char*)token);
if ( m>0 ) {
mt.month = m;
//Serial.print(" month: "); Serial.println(mt.month);
token = strtok(NULL, delim); // get next token
mt.day = atoi(token);
//Serial.print(" day: "); Serial.println(mt.day);
token = strtok(NULL, delim); // get next token
mt.year = atoi(token) - 1970;
//Serial.print(" year: "); Serial.println(mt.year);
token = strtok(NULL, delim); // get next token
mt.hour = atoi(token);
//Serial.print(" hour: "); Serial.println(mt.hour);
token = strtok(NULL, delim); // get next token
mt.minute = atoi(token);
//Serial.print(" minute: "); Serial.println(mt.minute);
token = strtok(NULL, delim); // get next token
mt.second = atoi(token);
//Serial.print(" second: "); Serial.println(mt.second);
}
token = strtok(NULL, delim);
}
}
void SecondCount ()
{
tt++;
}
void setup()
{
Serial.begin(115200);
ParseBuildTimestamp(mtt); // get the Unix epoch Time counted from 00:00:00 1 Jan 1970
tt = rtclock.makeTime(mtt) + 25; // additional seconds to compensate build and upload delay
rtclock.setTime(tt);
tt1 = tt;
rtclock.attachSecondsInterrupt(SecondCount);// Call SecondCount
}
void loop()
{
if ( Serial.available()>10 )
{
for (uint8_t i = 0; i<11; i++)
{
dateread[i] = Serial.read();
}
Serial.flush();
tt = atol((char*)dateread);
rtclock.setTime(rtclock.TimeZone(tt, timezone)); //adjust to your local date
}
if (tt1 != tt && dispflag == true && is_button_press == LOW && !digitalRead(buttonPin))
{
is_button_press = HIGH;
tt1 = tt;
rtclock.breakTime(rtclock.now(), mtt);
sprintf(s, "Time: %s %u %u, %s, %02u:%02u:%02u\n",
months[mtt.month], mtt.day, mtt.year+1970, weekdays[mtt.weekday], mtt.hour, mtt.minute, mtt.second);
Serial.print(s);
}
}
To make it display weight data along with RTC date on button press.... Please sir.....