Napisz program dla arduino MEGA na obliczanie i wykresy biorytmów dla osoby urodzonej 10.06.1955 roku z wykorzystaniem
#include <LCDWIKI_GUI.h>
#include <LCDWIKI_KBV.h>
LCDWIKI_KBV my_lcd(ILI9486, 40, 38, 39, 44, 41);
LCDWIKI_KBV
do obsługi wyświetlacza TFT oraz funkcje matematyczne do obliczeń biorytmów.Obliczanie biorytmów:
Wyświetlanie wykresów:
Obsługa wyświetlacza:
LCDWIKI_KBV
umożliwia rysowanie pikseli, linii i tekstu na ekranie TFT.Data i czas:
#include <LCDWIKI_GUI.h>
#include <LCDWIKI_KBV.h>
#include <math.h>
// Inicjalizacja wyświetlacza TFT
LCDWIKI_KBV my_lcd(ILI9486, 40, 38, 39, 44, 41);
// Parametry wyświetlacza
#define TFT_WIDTH 480
#define TFT_HEIGHT 320
// Kolory
#define COLOR_BACKGROUND BLACK
#define COLOR_PHYSICAL RED
#define COLOR_EMOTIONAL GREEN
#define COLOR_INTELLECTUAL BLUE
// Dane urodzenia
const int birthDay = 10;
const int birthMonth = 6;
const int birthYear = 1955;
// Funkcja obliczająca liczbę dni od daty urodzenia do podanej daty
long calculateDays(int year, int month, int day) {
long days = 0;
for (int y = birthYear; y < year; y++) {
days += (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)) ? 366 : 365;
}
for (int m = 1; m < month; m++) {
days += (m == 2 && year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) ? 29 : (m == 2 ? 28 : (m % 2 == 1 || m == 8 ? 31 : 30));
}
days += day - birthDay;
return days;
}
// Funkcja obliczająca wartość biorytmu
float calculateBiorhythm(long days, int cycle) {
return sin(2 * PI * days / cycle);
}
// Funkcja rysująca wykres biorytmów
void drawBiorhythmGraph(long days) {
int middleX = TFT_WIDTH / 2;
int middleY = TFT_HEIGHT / 2;
int amplitude = TFT_HEIGHT / 4;
// Rysowanie osi
my_lcd.Set_Draw_color(WHITE);
my_lcd.Draw_Line(0, middleY, TFT_WIDTH, middleY); // Oś X
my_lcd.Draw_Line(middleX, 0, middleX, TFT_HEIGHT); // Oś Y
// Rysowanie biorytmu fizycznego
my_lcd.Set_Draw_color(COLOR_PHYSICAL);
for (int x = 0; x < TFT_WIDTH; x++) {
float value = calculateBiorhythm(days + x - middleX, 23);
int y = middleY - value * amplitude;
my_lcd.Draw_Pixel(x, y);
}
// Rysowanie biorytmu emocjonalnego
my_lcd.Set_Draw_color(COLOR_EMOTIONAL);
for (int x = 0; x < TFT_WIDTH; x++) {
float value = calculateBiorhythm(days + x - middleX, 28);
int y = middleY - value * amplitude;
my_lcd.Draw_Pixel(x, y);
}
// Rysowanie biorytmu intelektualnego
my_lcd.Set_Draw_color(COLOR_INTELLECTUAL);
for (int x = 0; x < TFT_WIDTH; x++) {
float value = calculateBiorhythm(days + x - middleX, 33);
int y = middleY - value * amplitude;
my_lcd.Draw_Pixel(x, y);
}
}
void setup() {
// Inicjalizacja wyświetlacza
my_lcd.Init_LCD();
my_lcd.Fill_Screen(COLOR_BACKGROUND);
// Ustawienie bieżącej daty (przykład: 15 października 2023)
int currentYear = 2023;
int currentMonth = 10;
int currentDay = 15;
// Obliczenie liczby dni od urodzenia
long days = calculateDays(currentYear, currentMonth, currentDay);
// Rysowanie wykresu biorytmów
drawBiorhythmGraph(days);
}
void loop() {
// Program działa w trybie statycznym, brak nowych operacji w pętli głównej
}
Program oblicza i wyświetla biorytmy fizyczny, emocjonalny i intelektualny na wyświetlaczu TFT. Kod jest gotowy do użycia, ale można go rozszerzyć o dodatkowe funkcje, takie jak obsługa modułu RTC czy interaktywność.