17-08-2020, 16:54
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 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
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 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++;
}
}
}