• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Zegar MAX7219
#1
Witam,
próbuję zrobić coś na kształt zegarka wyświetlającego datę i czas. Korzystam z Arduino Uno, DS3231, matryc 16x kostka 8x8. Przerobiłem część kodu z przykładu biblioteki DS3231 odpowiadającą za wyświetlanie daty i czasu. Po wgraniu kodu na wyświetlaczu jest widoczna tylko liczba minut. Wydaje mi się, że to dlatego, że każda wartość jest w innej funkcji print. Próbowałem umieścić to w jednej funkcji, ale wtedy kompletnie nic nie działa. 

Kod:
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <DS3231.h>
#include <Wire.h>
#include "Parola_Fonts_data.h"

#define HARDWARE_TYPE MD_MAX72XX::ICSTATION_HW
#define MAX_DEVICES 16
#define CLK_PIN   13
#define DATA_PIN  11
#define CS_PIN    10

MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

DS3231 Clock;
bool Century=false;
bool h24;
bool PM;
byte ADay, AHour, AMinute;
bool ADy, A12h, Apm;

void setup() {
 // Start the I2C interface
 Wire.begin();
 P.begin();
}

void loop() {
 P.print("2");
 if (Century) {
   P.print("1");
 } else {
   P.print("0");
 }
 // dzien
 P.print(Clock.getDate(), DEC);
 P.print(' ');
 // miesiac
 P.print(Clock.getMonth(Century), DEC);
 P.print(' ');
 //rok
 P.print(Clock.getYear(), DEC);
 P.print(' ');
 // godzina i minuty
 P.print(Clock.getHour(h24, PM), DEC);
 P.print(' ');
 P.print(Clock.getMinute(), DEC);
 delay(60000);
}

Proszę o pomoc, jestem dosyć zielony, za wszelkie wskazówki będę wdzięczny. Pozdrawiam
 
Odpowiedź
#2
Ja to bym sobie wczytał datę i czas do zmiennych a później skonwertował do porządanej postaci przez sprintf po czym wysłał tekst na matrycę LED. Wszystko to kilka linijek kodu, bez "if" itp kombinacji. Szybko, łatwo i przyjemnie.
Kod z Delay i/lub bez WDT to nie kod, to DEMO!
Kod wymaga komentarzy!
Nie pomagam leniwym analfabetom.

Zaawansowana Sonda Logiczna


 
Odpowiedź
#3
Idziesz mocno na około. Są kursy do Arduino, zupełnie darmowe, na stronach WWW link i na Youtube. Oczywiście płatne i bezpłatne książki też byś znalazł.
Korzystając z gotowych funkcji Arduino można sobie zrobić stringa, posklejać i jego wysłać na ekran.
Kod:
String napis;

napis = String(Clock.getHour(h24, PM))+ String(Clock.getMinute());
Nie rób delay(60000), to jest tak przykre, że aż śmieszne. Dlatego przypuszczam, że ominąłeś cały Internet z kursami.
Nowe wyświetlenie rób wtedy gdy stara minuta jest inna niż aktualna (porównanie zmiennych).
Będziesz chciał sobie ustawić godzinę, to będziesz czekał z wciśniętym przyciskiem 60s aż Arduino to zauważy?
 
Odpowiedź
#4
Tyle, ze klasa string, jest jaka jest i na uC z 2kB RAM z nią raczej nie da się poszaleć jak nie ma się dużej wiedzy.
Początkującym, na małych uC, powinno zabronić się używania "string", bo później często jest rozczarowanie. Podobnie z dynamicznym rezerwowaniem pamięci co często "string" robi.
Kod z Delay i/lub bez WDT to nie kod, to DEMO!
Kod wymaga komentarzy!
Nie pomagam leniwym analfabetom.

Zaawansowana Sonda Logiczna


 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości