• 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
Pobranie zmiennej z RTC DS3231
#1
Witam serdecznie.
Jestem na etapie tworzenia atrapy "bomby" do Paintballa i mam pewien problem z kodem.
Udało zaprogramować mi się tak atmege aby po przełączeniu przycisku załączał się na wyświetlaczu licznik z modułu RTC DS3231. (odmierza od zera czas w górę). Mam jednak problem z wykonaniem danej funkcji w określonym czasie tzn gdy licznik dojdzie do powiedzmy 2 min to chciałbym aby "coś się zadziało". Poniżej wklejam kodzik. Wiem że nie jest on może idealny ale do tego momentu się sprawdza Wink TO co próbowałem zrobić to komendą rtc.setTime wstawić za godziny minuty sekundy zmienne x,y,z i później zmienna w zależności od wartości zmiennej y miała się zapalić dioda jednakże nie stało się to. Prosiłbym o krótkie wyjaśnienie w jaki sposób to zrobić. Pozdrawiam

Kod:
#include <DS3231.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27,16,2);
DS3231  rtc(SDA, SCL);


int x=0;
int y=0;
int z=0;
int counter=1;

void setup() {
  lcd.init();
  lcd.backlight();
  rtc.begin(); 
  pinMode(2, OUTPUT);
  pinMode(6, INPUT_PULLUP);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  lcd.setCursor(0,0);
  lcd.print("Przygotowywanie");
  lcd.setCursor(0,1);
  lcd.print("ladunku");
  delay(30000);
  lcd.clear();
}

void loop() {
  digitalWrite(2, HIGH);
  lcd.print("Przesun dzwignie");
  lcd.setCursor(0,1);
  lcd.print("by uzbroic");
  lcd.setCursor(0,0);
 
 
    if((digitalRead(6) == LOW) && (counter==1)){
      lcd.clear();
      digitalWrite(4, HIGH);
        delay(4500);
        digitalWrite(4, LOW);
        rtc.setTime(x,y,z);
      while(y<1){
      lcd.print(rtc.getTimeStr());
        lcd.setCursor(0,0);
        counter++;
      }
       
    }
 
   }
 
Odpowiedź
#2
RTC jak sama nazwa wskazuje real time clock służy do wskazania czasu w oderwaniu od uC. Powinien mieć też własne zasilanie, przydaje się by coś zrobić raz dziennie, co godzinę, czy ileś tam razy w miesiącu. Do takiego odmierzania jak w CS używa się timerów wbudowanych, a w Arduino wystarcza funkcja millis(). Wywal while, naucz się odmierzać czas z millis() jednej sekundy, co tyle odświeżaj ekran, a resztę czasu poświęcasz na sprawdzanie czy zostało coś podane/wciśnięte.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości