I have an interesting problem with my program which, is simply a modification of an example code for the DS3231 and a 128x64 OLED display. The code all runs smoothly except for the printing of the oled.print(daysOfTheWeek[now.dayOfTheWeek()]). It pulls the proper day with the first three letters but then appends the rest of the 3 letter array days for the rest of the week on to it.
EXAMPLE: THUFRISAT
I tried to use the (F(daysOfTheWeek[now.dayOfTheWeek())]); which I did not expect it to work but tried anyway.
Any Help would be greatly appreciated.
Hardware: Windows 10, Arduino IDE 1.8.15,
Sunfounder MEGA 2560
BN: Arduino Mega or Mega 2560
VID: 2341
PID: 0042
SN: 955303438343514062B1
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"
#include "RTClib.h"
RTC_DS3231 rtc;
//char daysOfTheWeek[7][4] = {"SUN", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"};
char daysOfTheWeek[7][3] = {"SUN", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"};
// OLED display size in pixels
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
DateTime now;
void setup() {
Serial.begin(9600);
delay(3000); // wait for console opening
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
initializeRTC();
initializeOLED();
}
void loop() {
now = rtc.now();
displayDay(); // ****Section where the issue is occuring
displayDate();
displayTime();
displayTemperature();
}
void initializeRTC() {
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, lets set the time!");
// 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));
}
}
void initializeOLED() {
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
oled.clearDisplay();
oled.display();
oled.setTextColor(WHITE, BLACK);
oled.setTextSize(1);
oled.setCursor(117, 55);
// Enable the Code Page 437
// https://en.wikipedia.org/wiki/Code_page_437
oled.cp437(true);
// Then print the chosen characters
// which in this case is the degrees symbol
// https://www.ascii-codes.com/
oled.write(248);
oled.setCursor(0, 55);
oled.print("TEMPERATURE =");
oled.setCursor(122, 55);
oled.print("C");
}
void displayDay() { // Function in which I believe the issue occurs
oled.setTextSize(1);
oled.setCursor(5, 15);
oled.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); //Placed in code for Troublshooting
Serial.println();
}
void displayDate() {
char currentDate [16];
uint8_t thisDay, thisMonth ;
thisDay = now.day();
thisMonth = now.month();
sprintf (currentDate, "%02d/%02d/", thisDay, thisMonth); //add leading zeros to the day and month
oled.setTextSize(1);
oled.setCursor(62, 15);
oled.print(currentDate);
oled.setTextSize(1);
oled.setCursor(102, 15);
oled.print(now.year(), DEC);
}
void displayTime() {
char buffer [16];
char AmPm[3];
uint8_t thisSec, thisMin, thisHour;
thisSec = now.second();
thisMin = now.minute();
thisHour = now.hour();
if (thisHour > 12) {
thisHour = thisHour - 12;
strcpy(AmPm, "PM");
} else strcpy(AmPm, "AM");
sprintf (buffer, "%02d:%02d:%02d", thisHour, thisMin, thisSec);
oled.setTextSize(2);
oled.setCursor(6, 32);
oled.print(buffer);
oled.setTextSize(1);
oled.setCursor(110, 32);
oled.print(AmPm);
}
void displayTemperature() {
oled.setTextSize(1);
oled.setCursor(82, 55);
oled.print(rtc.getTemperature());
oled.display();
}