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"
Dostosuj program do dat urodzenia od 1950 roku.
Poniżej przedstawiam kompletny program dla Arduino GIGA i GIGA Display Shield, który oblicza i wykreśla biorytmy na podstawie podanej daty urodzenia. Program uwzględnia daty urodzenia od 1950 roku i wykorzystuje podane biblioteki.
Arduino_H7_Video.h
, lvgl.h
, Arduino_GigaDisplayTouch.h
i Arduino_GigaDisplay_GFX.h
.#include "Arduino_H7_Video.h"
#include "lvgl.h"
#include "Arduino_GigaDisplayTouch.h"
#include "Arduino_GigaDisplay_GFX.h"
#include <TimeLib.h>
Arduino_GigaDisplayTouch TouchDetector;
Arduino_GigaDisplay_GFX display;
// Kolory dla biorytmów
#define COLOR_PHYSICAL 0xF800 // Czerwony
#define COLOR_EMOTIONAL 0x07E0 // Zielony
#define COLOR_INTELLECTUAL 0x001F // Niebieski
// Funkcja obliczająca liczbę dni od daty urodzenia
long calculateDaysSinceBirth(int birthYear, int birthMonth, int birthDay) {
tmElements_t birthDate;
birthDate.Year = birthYear - 1970;
birthDate.Month = birthMonth;
birthDate.Day = birthDay;
birthDate.Hour = 0;
birthDate.Minute = 0;
birthDate.Second = 0;
time_t birthTime = makeTime(birthDate);
time_t currentTime = now();
return (currentTime - birthTime) / 86400; // Liczba dni
}
// Funkcja obliczająca wartość biorytmu
float calculateBiorhythm(long days, int cycle) {
return sin(2 * PI * days / cycle);
}
// Funkcja rysująca wykres biorytmów
void drawBiorhythms(long daysSinceBirth) {
display.fillScreen(0x0000); // Czarny ekran
// Rysowanie osi
display.drawFastHLine(40, 240, 720, 0xFFFF); // Oś X
display.drawFastVLine(400, 40, 400, 0xFFFF); // Oś Y
// Rysowanie biorytmów
for (int x = -360; x <= 360; x++) {
int dayOffset = x;
float physical = calculateBiorhythm(daysSinceBirth + dayOffset, 23);
float emotional = calculateBiorhythm(daysSinceBirth + dayOffset, 28);
float intellectual = calculateBiorhythm(daysSinceBirth + dayOffset, 33);
int yPhysical = 240 - (int)(physical * 200);
int yEmotional = 240 - (int)(emotional * 200);
int yIntellectual = 240 - (int)(intellectual * 200);
display.drawPixel(400 + x, yPhysical, COLOR_PHYSICAL);
display.drawPixel(400 + x, yEmotional, COLOR_EMOTIONAL);
display.drawPixel(400 + x, yIntellectual, COLOR_INTELLECTUAL);
}
// Legenda
display.setTextColor(COLOR_PHYSICAL);
display.setCursor(10, 10);
display.print("Fizyczny");
display.setTextColor(COLOR_EMOTIONAL);
display.setCursor(10, 30);
display.print("Emocjonalny");
display.setTextColor(COLOR_INTELLECTUAL);
display.setCursor(10, 50);
display.print("Intelektualny");
}
void setup() {
Serial.begin(115200);
display.begin();
TouchDetector.begin();
// Ustawienie bieżącej daty (przykład: 1 stycznia 2023)
setTime(0, 0, 0, 1, 1, 2023);
// Wprowadzenie daty urodzenia
Serial.println("Podaj date urodzenia (DD MM YYYY):");
while (!Serial.available()) {
delay(100);
}
int birthDay = Serial.parseInt();
int birthMonth = Serial.parseInt();
int birthYear = Serial.parseInt();
// Obliczenie liczby dni od daty urodzenia
long daysSinceBirth = calculateDaysSinceBirth(birthYear, birthMonth, birthDay);
// Rysowanie biorytmów
drawBiorhythms(daysSinceBirth);
}
void loop() {
// Obsługa dotyku (opcjonalna)
if (TouchDetector.available()) {
TS_Point p = TouchDetector.getPoint();
if (p.z > 0) {
Serial.print("Dotyk na pozycji: ");
Serial.print(p.x);
Serial.print(", ");
Serial.println(p.y);
}
}
}
Arduino_H7_Video
, lvgl
, Arduino_GigaDisplayTouch
i Arduino_GigaDisplay_GFX
są zainstalowane w środowisku Arduino IDE.setTime()
. W rzeczywistym zastosowaniu warto użyć modułu RTC lub synchronizacji z internetem.Program oblicza i wykreśla biorytmy na podstawie daty urodzenia, wykorzystując wyświetlacz GIGA Display Shield. Dzięki zastosowaniu bibliotek graficznych i matematycznych, program jest zarówno funkcjonalny, jak i estetyczny.