Digital clock - Max 7219 dot matrix display - DS1307 RTC module - DHT11 sensor
Posted: 15 Sep 2021 20:25
Un alt montaj pentru incepatori.
Un ceas digital, afisat pe ecran dot matrix Max 7219, cu senzor de temperatura si umiditate, DHT11 in acest caz, si DS1307real time clock module.
Legatirule electrice le puteti vedea aici:

Iar codul care a fost incarcat in Arduino este acesta:
I-l puteti gasi si in pastebin.
Un mic video cu functionarea montajului
Codul sursa foloseste libraria MD_Parola, si este inspirata din exemplul din Arduino IDE de la aceasta librarie.
Numele exemplului din IDE se numeste PAROLA ANIMATION CATALOG

Un ceas digital, afisat pe ecran dot matrix Max 7219, cu senzor de temperatura si umiditate, DHT11 in acest caz, si DS1307real time clock module.
Legatirule electrice le puteti vedea aici:

Iar codul care a fost incarcat in Arduino este acesta:
Code: Select all
#include <MD_Parola.h>
#include "RTClib.h"
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
RTC_DS1307 RTC;
DateTime now;
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
int i = 9;
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
char daysOfTheWeek[7][12] = {"Duminica", "Luni", "Marti", "Miercuri", "Joi", "Vineri", "Sambata"};
char monthOfTheYear[12][12] = {"Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"};
// Sprite Definitions
const uint8_t F_PMAN1 = 6;
const uint8_t W_PMAN1 = 8;
static const uint8_t PROGMEM pacman1[F_PMAN1 * W_PMAN1] = // gobbling pacman animation
{
0x00, 0x81, 0xc3, 0xe7, 0xff, 0x7e, 0x7e, 0x3c,
0x00, 0x42, 0xe7, 0xe7, 0xff, 0xff, 0x7e, 0x3c,
0x24, 0x66, 0xe7, 0xff, 0xff, 0xff, 0x7e, 0x3c,
0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c,
0x24, 0x66, 0xe7, 0xff, 0xff, 0xff, 0x7e, 0x3c,
0x00, 0x42, 0xe7, 0xe7, 0xff, 0xff, 0x7e, 0x3c,
};
const uint8_t F_PMAN2 = 6;
const uint8_t W_PMAN2 = 18;
static const uint8_t PROGMEM pacman2[F_PMAN2 * W_PMAN2] = // ghost pursued by a pacman
{
0x00, 0x81, 0xc3, 0xe7, 0xff, 0x7e, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0xfe, 0x7b, 0xf3, 0x7f, 0xfb, 0x73, 0xfe,
0x00, 0x42, 0xe7, 0xe7, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0xfe, 0x7b, 0xf3, 0x7f, 0xfb, 0x73, 0xfe,
0x24, 0x66, 0xe7, 0xff, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0xfe, 0x7b, 0xf3, 0x7f, 0xfb, 0x73, 0xfe,
0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0xfe, 0x73, 0xfb, 0x7f, 0xf3, 0x7b, 0xfe,
0x24, 0x66, 0xe7, 0xff, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0xfe, 0x73, 0xfb, 0x7f, 0xf3, 0x7b, 0xfe,
0x00, 0x42, 0xe7, 0xe7, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0xfe, 0x73, 0xfb, 0x7f, 0xf3, 0x7b, 0xfe,
};
void setup()
{
//Serial.begin(9600);
P.begin();
P.setInvert(false);
P.setIntensity(1);
dht.begin();
Wire.begin();
RTC.begin();
if (! RTC.isrunning())
{
//Serial.println("RTC is NOT running!");
RTC.adjust(DateTime(__DATE__, __TIME__));
}
#if ENA_SPRITE
P.setSpriteData(pacman1, W_PMAN1, F_PMAN1, pacman2, W_PMAN2, F_PMAN2);
#endif
P.displayText("Digital clock Andrei & Levente Daradici" , PA_CENTER, 25, 0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
while (!P.displayAnimate());
}
const char *ZiuaCurenta = " ";
String Hour;
String TIMP=" ";
String ORA=" ";
String MINUT=" ";
String SECUNDA=" ";
String DATA="";
String Day;
String Month;
String Year;
String HumSTR;
String CelSTR;
String FarSTR;
void loop()
{
now = RTC.now();
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) {
//Serial.println(F("Failed to read from DHT sensor!"));
return;
}
float z = (float)h/1.0;
HumSTR = String(z,1);
HumSTR = HumSTR + " %";
const char *HumC = HumSTR.c_str();
float q = (float)t/1.0;
CelSTR = String(q,1);
CelSTR = CelSTR + " C";
const char *CelC = CelSTR.c_str();
float w = (float)f/1.0;
FarSTR = String(w,1);
FarSTR = FarSTR + " F";
const char *FarC = FarSTR.c_str();
String DayOfWeek = daysOfTheWeek[now.dayOfTheWeek()];
String MonthOfYear = monthOfTheYear[now.month() - 1];
const char *DayOfWeekC = DayOfWeek.c_str();
const char *MonthOfYearC = MonthOfYear.c_str();
ORA = (now.hour());
if (ORA.length() < 2)
{
ORA = "0"+ ORA;
}
MINUT = (now.minute());
if (MINUT.length() < 2)
{
MINUT = "0"+ MINUT;
}
TIMP = ORA + ":" + MINUT;
const char *Timp = TIMP.c_str();
Day = now.day();
Month = now.month();
Year = now.year();
const char *Ziua = Day.c_str();
const char *Luna = Month.c_str();
const char *Anul = Year.c_str();
String Date = Day + "/" + Month + "/" + Year;
const char *Data = Date.c_str();
if (i = 1)
{
P.displayText(DayOfWeekC, PA_CENTER, 50, 0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
while (!P.displayAnimate());
}
if (i = 2)
{
P.displayText(Ziua, PA_CENTER, 100, 1000, PA_SCROLL_DOWN_RIGHT, PA_SCROLL_DOWN_RIGHT);
while (!P.displayAnimate());
}
if (i = 3)
{
P.displayText(MonthOfYearC, PA_CENTER, 50, 0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
while (!P.displayAnimate());
}
if (i = 4)
{
P.displayText(Anul, PA_CENTER, 10, 3000, PA_SLICE, PA_SLICE);
while (!P.displayAnimate());
}
// if (i = 5)
// {
// P.displayText(Data, PA_CENTER, 50, 0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
// while (!P.displayAnimate());
//}
if (i = 6)
{
P.displayText(Timp, PA_CENTER, 50, 3000, PA_SPRITE, PA_SPRITE);
while (!P.displayAnimate());
}
if (i = 7)
{
String Celsius = String(t) + "°C";
P.displayText(CelC, PA_CENTER, 100, 3000, PA_MESH, PA_MESH);
while (!P.displayAnimate());
}
if (i = 8)
{
P.displayText(FarC, PA_CENTER, 150, 3000, PA_BLINDS, PA_BLINDS);
while (!P.displayAnimate());
}
if (i = 9)
{
P.displayText(HumC, PA_CENTER, 25, 3000, PA_RANDOM, PA_RANDOM);
while (!P.displayAnimate());
}
i= i+1;
if (i > 9)
{
i=0;
};
}
I-l puteti gasi si in pastebin.
Un mic video cu functionarea montajului
Codul sursa foloseste libraria MD_Parola, si este inspirata din exemplul din Arduino IDE de la aceasta librarie.
Numele exemplului din IDE se numeste PAROLA ANIMATION CATALOG
