DS1307 a dýchání led pásku

jankop
Příspěvky: 441
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: DS1307 a dýchání led pásku

Příspěvek od jankop » 11 úno 2019, 23:42

Tedy pár ladících-testovacích řádků jsem tam zapomněl navíc, spíš takhle:

Kód: Vybrat vše

#include <interval.h>
#include <RTClib.h>
#include <Wire.h>
#define DELAY 50 // nastaveni rychlosti dychani
#define DELAY_MEZI 800 // prodleva mezi nadechem a vydechem
#define DELAY_PRINT 1000
#define MIN_PWM 1 // minimalni jas LED, nejmene 0
#define MAX_PWM 40 // maximalni jas LED, nejvyse 255
#define VYPNI_PWM 0
#define LED_PIN 11
bool NadechTrue = false;// priznak nadech nebo vydech
bool Dychej = false;
bool Zrovna_Dycham = false;
int PWM_VALUE = MIN_PWM;
Interval DelayInterval;
Interval DelayPrint;
RTC_DS1307 rtc;
DateTime now;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  rtc.begin();
  if (!rtc.isrunning())Serial.println("RTC is NOT running!");
}
void loop() {
  if (DelayPrint.expired()) {
    now = rtc.now();
    Serial.print(now.year(), DEC);
    Serial.print("/");
    Serial.print(now.month(), DEC);
    Serial.print("/");
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(now.hour(), DEC);
    Serial.print(":");
    Serial.print(now.minute(), DEC);
    Serial.print(":");
    Serial.print(now.second(), DEC);
    Serial.print(")");
    Serial.println();
    DelayPrint.set(DELAY_PRINT);
  }
  if (now.hour() == 18 && now.minute() == 0)Dychej = true;
  if (now.hour() == 18 && now.minute() == 5) Dychej = false;
  if (DelayInterval.expired() && (Dychej || Zrovna_Dycham)) {
    Zrovna_Dycham = true;
    if (NadechTrue) {
      DelayInterval.set(DELAY);
      analogWrite(LED_PIN, PWM_VALUE);
      PWM_VALUE++;
      if (PWM_VALUE > MAX_PWM) {
        DelayInterval.set(DELAY_MEZI);
        PWM_VALUE = MAX_PWM;
        NadechTrue = false;
      }
    } else {
      DelayInterval.set(DELAY);
      analogWrite(LED_PIN, PWM_VALUE);
      PWM_VALUE--;
      if (PWM_VALUE < MIN_PWM) {
        DelayInterval.set(DELAY_MEZI);
        PWM_VALUE = MIN_PWM;
        NadechTrue = true;
        Zrovna_Dycham = false;
        if (!Dychej)analogWrite(LED_PIN, VYPNI_PWM);
      }
    }
  }
}

gilhad
Příspěvky: 170
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: DS1307 a dýchání led pásku

Příspěvek od gilhad » 12 úno 2019, 08:30

Grischnackh píše:
11 úno 2019, 17:46
Program je to hezký,takle nějak jsem si představoval že mne nakopnete,díky.Jen mám dotaz proč když chci nahrát výše uvedený program tak mi napíše že "now" was not declared. a když dám pouze "hour" a "minute",tak mi to napíše pro změnu že hour was not declared??
Já mám dotaz, kde deklaruješ now mimo blok

Kód: Vybrat vše

if (DelayPrint.expired()) {...};
- pokud takové místo nenajdeš před jeho použitím řádku

Kód: Vybrat vše

  if (now.hour() == 18 && now.minute() == 0)Dychej = true;
tak se nediv, když ho nenajde ani překladač.

Grischnackh
Příspěvky: 6
Registrován: 17 led 2019, 16:45
Reputation: 0

Re: DS1307 a dýchání led pásku

Příspěvek od Grischnackh » 12 úno 2019, 18:11

Díky všem,už jsem si uvědomil že tam "now" nebylo deklarováno.ladícířádky jsem si vyignoroval lomítkami.jen mi bylo divné že samotný program když jsem nahrál o pár příspěvků výše tak po mne nechtěl deklarovat "now".Jinak jen dotaz:Proč když program který spouští dýchání v 18:00 a já jej nahraji třeba v 17:50 a vypnout se má v 18:05 tak do 18:00 led pásek svítí plným svitem?Prominte,možná můj dotaz je pitomý ale snažím se to pochopit..díky.

jankop
Příspěvky: 441
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: DS1307 a dýchání led pásku

Příspěvek od jankop » 12 úno 2019, 21:06

Odpovím ti otázkou. Co ve svém programu děláš proto, aby po jeho startu byla na pinu 11 garantovaně logická úroveň LOW, tedy LED vypnuty? Problém bude nejspíš právě v tomhle, přestože netuším, jak máš spínač LED zapojen.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host