Napisz program dla arduino GIGA wyświetlający biorytmy dla osoby urodzonej 10.06.1955 roku z wykorzystaniem
#include "stm32h7xx.h"
#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, który wyświetla biorytmy dla osoby urodzonej 10.06.1955 roku. Program wykorzystuje biblioteki Arduino_H7_Video.h
, lvgl.h
, Arduino_GigaDisplayTouch.h
oraz Arduino_GigaDisplay_GFX.h
. Kod oblicza biorytmy fizyczne, emocjonalne i intelektualne, a następnie wyświetla je na ekranie w formie wykresu.
#include "stm32h7xx.h"
#include "Arduino_H7_Video.h"
#include "lvgl.h"
#include "Arduino_GigaDisplayTouch.h"
#include "Arduino_GigaDisplay_GFX.h"
#include <math.h>
#include <time.h>
// Inicjalizacja wyświetlacza i dotyku
Arduino_GigaDisplayTouch TouchDetector;
Arduino_GigaDisplay_GFX display;
// Data urodzenia
const int birthYear = 1955;
const int birthMonth = 6;
const int birthDay = 10;
// Funkcja obliczająca liczbę dni od daty urodzenia
long calculateDaysSinceBirth(int year, int month, int day) {
struct tm birthDate = {0};
birthDate.tm_year = birthYear - 1900; // Rok w formacie od 1900
birthDate.tm_mon = birthMonth - 1; // Miesiące od 0 do 11
birthDate.tm_mday = birthDay;
struct tm currentDate = {0};
currentDate.tm_year = year - 1900;
currentDate.tm_mon = month - 1;
currentDate.tm_mday = day;
time_t birthTime = mktime(&birthDate);
time_t currentTime = mktime(¤tDate);
return difftime(currentTime, birthTime) / (60 * 60 * 24); // Liczba dni
}
// Funkcja obliczająca wartość biorytmu
float calculateBiorhythm(long days, int cycle) {
return sin(2 * M_PI * days / cycle);
}
// Funkcja rysująca wykres biorytmu
void drawBiorhythmChart(long daysSinceBirth) {
display.fillScreen(BLACK);
// Wymiary wykresu
int chartWidth = 760;
int chartHeight = 200;
int chartX = 40;
int chartY = 20;
// Rysowanie osi
display.drawLine(chartX, chartY + chartHeight / 2, chartX + chartWidth, chartY + chartHeight / 2, WHITE); // Oś X
display.drawLine(chartX, chartY, chartX, chartY + chartHeight, WHITE); // Oś Y
// Rysowanie biorytmów
for (int x = 0; x < chartWidth; x++) {
long days = daysSinceBirth + x - chartWidth / 2;
// Obliczanie wartości biorytmów
float physical = calculateBiorhythm(days, 23);
float emotional = calculateBiorhythm(days, 28);
float intellectual = calculateBiorhythm(days, 33);
// Mapowanie wartości na przestrzeń wykresu
int physY = chartY + chartHeight / 2 - (int)(physical * chartHeight / 2);
int emoY = chartY + chartHeight / 2 - (int)(emotional * chartHeight / 2);
int intelY = chartY + chartHeight / 2 - (int)(intellectual * chartHeight / 2);
// Rysowanie punktów
display.drawPixel(chartX + x, physY, RED);
display.drawPixel(chartX + x, emoY, GREEN);
display.drawPixel(chartX + x, intelY, BLUE);
}
}
void setup() {
// Inicjalizacja wyświetlacza
display.begin();
display.setRotation(1); // Obrót ekranu
display.fillScreen(BLACK);
// Inicjalizacja dotyku
TouchDetector.begin();
}
void loop() {
// Obliczanie bieżącej daty (przykładowo ustawiona na 16 stycznia 2025)
int currentYear = 2025;
int currentMonth = 1;
int currentDay = 16;
// Obliczanie liczby dni od daty urodzenia
long daysSinceBirth = calculateDaysSinceBirth(currentYear, currentMonth, currentDay);
// Rysowanie wykresu biorytmów
drawBiorhythmChart(daysSinceBirth);
// Odświeżanie co 5 sekund
delay(5000);
}
Przedstawiony program oblicza i wyświetla biorytmy fizyczne, emocjonalne i intelektualne na ekranie Arduino GIGA. Kod jest zoptymalizowany pod kątem prostoty i czytelności, a jednocześnie oferuje możliwość dalszego rozwoju, np. poprzez integrację z RTC lub dodanie interaktywności.