Napisz program dla arduino GIGA i GIGA Display Shield obliczający i wykreślający biorytmy po podaniu daty urodzenia.
Do wykorzystania:
#include "Arduino_H7_Video.h"
#include "lvgl.h"
#include "Arduino_GigaDisplayTouch.h"
Arduino_GigaDisplayTouch TouchDetector;
#include "Arduino_GigaDisplay_GFX.h"
Poniżej znajduje się kompletny program dla Arduino GIGA i GIGA Display Shield, który oblicza i wykreśla biorytmy na podstawie daty urodzenia. Program wykorzystuje biblioteki Arduino_H7_Video
, lvgl
, Arduino_GigaDisplayTouch
oraz Arduino_GigaDisplay_GFX
.
#include "Arduino_H7_Video.h"
#include "lvgl.h"
#include "Arduino_GigaDisplayTouch.h"
#include "Arduino_GigaDisplay_GFX.h"
#include <TimeLib.h> // Biblioteka do obsługi daty i czasu
Arduino_GigaDisplay_GFX display;
Arduino_GigaDisplayTouch TouchDetector;
// Funkcja obliczająca biorytmy
float calculateBiorhythm(int days, int cycle) {
return sin(2 * PI * days / cycle);
}
// Funkcja do rysowania wykresu biorytmów
void drawBiorhythm(int daysAlive) {
display.fillScreen(BLACK);
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(10, 10);
display.print("Biorytmy");
// Rysowanie osi
display.drawLine(40, 220, 760, 220, WHITE); // Oś X
display.drawLine(40, 20, 40, 420, WHITE); // Oś Y
// Rysowanie biorytmów
for (int i = 0; i < 720; i++) {
int x = i + 40;
int days = daysAlive + i - 360;
// Fizyczny (czerwony)
int y1 = 220 - calculateBiorhythm(days, 23) * 100;
display.drawPixel(x, y1, RED);
// Emocjonalny (zielony)
int y2 = 220 - calculateBiorhythm(days, 28) * 100;
display.drawPixel(x, y2, GREEN);
// Intelektualny (niebieski)
int y3 = 220 - calculateBiorhythm(days, 33) * 100;
display.drawPixel(x, y3, BLUE);
}
// Legenda
display.fillRect(600, 350, 20, 20, RED);
display.setCursor(630, 350);
display.print("Fizyczny");
display.fillRect(600, 380, 20, 20, GREEN);
display.setCursor(630, 380);
display.print("Emocjonalny");
display.fillRect(600, 410, 20, 20, BLUE);
display.setCursor(630, 410);
display.print("Intelektualny");
}
void setup() {
Serial.begin(9600);
display.begin();
TouchDetector.begin();
display.setRotation(1);
display.fillScreen(BLACK);
display.setTextColor(WHITE);
display.setTextSize(3);
display.setCursor(10, 10);
display.print("Podaj date urodzenia:");
display.setCursor(10, 50);
display.print("DD/MM/YYYY");
}
void loop() {
static bool dateEntered = false;
static int birthDay, birthMonth, birthYear;
if (!dateEntered) {
if (Serial.available() > 0) {
String dateString = Serial.readStringUntil('\n');
sscanf(dateString.c_str(), "%d/%d/%d", &birthDay, &birthMonth, &birthYear);
dateEntered = true;
// Obliczanie liczby dni od daty urodzenia
tmElements_t birthDate = {0, 0, 0, birthDay, birthMonth, birthYear - 1970};
time_t birthTime = makeTime(birthDate);
int daysAlive = (now() - birthTime) / 86400;
drawBiorhythm(daysAlive);
}
} else {
// Obsługa dotyku do odświeżenia wykresu
if (TouchDetector.available()) {
tmElements_t birthDate = {0, 0, 0, birthDay, birthMonth, birthYear - 1970};
time_t birthTime = makeTime(birthDate);
int daysAlive = (now() - birthTime) / 86400;
drawBiorhythm(daysAlive);
}
}
}
lvgl
jest obecnie jednym z najpopularniejszych narzędzi do tworzenia interfejsów graficznych na mikrokontrolerach.makeTime
zakłada, że rok bazowy to 1970. W przypadku dat wcześniejszych należy dostosować obliczenia.lvgl
.Program oblicza i wyświetla biorytmy na Arduino GIGA z GIGA Display Shield. Użytkownik wprowadza datę urodzenia przez port szeregowy, a wyniki są wizualizowane na ekranie. Kod można rozbudować o bardziej zaawansowany interfejs graficzny i dodatkowe funkcje.