• 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
Zmienne
#11
Ja się nie gniewam, ale nie daje mi to spokoju od kilku dni, niby proste a nie. Chcę włączyć grzałkę w określonym czasie, na ten moment to jest pierwszy i możliwe że ostatni projekt ( z braku czasu ). Myślałem, że mogę to załatwić w bardzo "jak dla mnie" prosty sposób.

#include <dht11.h>
#include <LiquidCrystal_I2C.h>
#include <DS1302.h>

dht11 DHT11;
#define DHT11PIN 2


LiquidCrystal_I2C lcd(0x27,16,2); 

DS1302 rtc(3, 4, 5);





void setup()
{
  lcd.init();                     
  lcd.backlight();
  lcd.clear();
  Serial.begin(9600);
     
}

void loop()
{
  int chk = DHT11.read(DHT11PIN);
 
  int godz = 17; //odczytana godzina

      if (godz >= 12 && godz < 18) {
    Serial.println("wlaczone ");
      }
          else {
    Serial.println("wylaczone ");

  }
 
  lcd.setCursor(11,0);
  lcd.print(rtc.getTimeStr());

  Serial.print("godz - ");
  Serial.println(rtc.getTimeStr(FORMAT_SHORT));
  Serial.print("temp - ");
  Serial.println((float)DHT11.temperature, 0);
  Serial.print("czas - ");
  Serial.println(godz);
  Serial.print("data - ");
  Serial.println(rtc.getDateStr());
 
 
  lcd.setCursor(0, 0);
  lcd.print("T: ");
  lcd.print((float)DHT11.temperature, 0);
  lcd.print(" C");
 
  lcd.setCursor(0, 1);
  lcd.print("W: ");
  lcd.print((float)DHT11.humidity, 0);
  lcd.print(" %");
 
  delay(1000);
}



Na ten moment dla prób stworzyłem zmienną  "int godz = 17; //odczytana godzina" i to działa jak zmienię liczby ręcznie. Wiem, że dużo się muszę nauczyć ale myślałem, że można to tak rozwiązać. Próbowałem wywnioskować coś z tego t.hour = _decodeH(_burstArray[2]); z pliku DS1302.cpp ale szybko padłem z braku wiedzy i doświadczenie. Dzieki za odpowiedź.
 
Odpowiedź
#12
I tak do tej pory nie powiedziałeś ze funkcja zwraca 12:25:40 czyli do sekundy...

W skrócie to będzie tak zmień string-a na tablice char, wyciągnij co trzeba i zmień na init-a lub unit-a...
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#13
(10-01-2020, 22:39)Jarewa0606 napisał(a): I tak do tej pory nie powiedziałeś ze funkcja zwraca 12:25:40 czyli do sekundy...

W skrócie to będzie tak zmień string-a na  tablice char, wyciągnij co trzeba i zmień na init-a lub unit-a...

Powiedziałem na samym początku że odtczytuje uproszczoną wersję godziny co pokazałem w dalszych wpisach Serial.println(rtc.getTimeStr(FORMAT_SHORT));.
FORMAT_SHORT podsunął mi pewien pomysł, odnalazłem w pliku DS1302.cpp taki wpis:

char *output= "xxxxxxxx";

Time t;
t=getTime();
if (t.hour<10)
output[0]=48;
else
output[0]=char((t.hour / 10)+48);
output[1]=char((t.hour % 10)+48);
output[2]=58;
if (t.min<10)
output[3]=48;
else
output[3]=char((t.min / 10)+48);
output[4]=char((t.min % 10)+48);
output[5]=58;
if (format==FORMAT_SHORT)
output[5]=0;
else
i wydedukowałem, że najłatwiej w output[5]=0; zmienić 5 na 2 i tym prostym krokiem rozwiązałem mój problem, z funkcji Serial.println(rtc.getTimeStr(FORMAT_SHORT)); odczytałem godzinę złożoną z 2 cyfr. O użyciu tablic myślałem przed zadaniem pytania na forum i doszedłem do wniosku, że nie będę przeliczał wielu zmiennych więc tablica to trochę przerost formy nad treścią. Dzięki za odpowiedź.

Jest inne pytanie, do jakiej zmiennej mogę przypisać dane z (rtc.getTimeStr(FORMAT_SHORT)). ?
 
Odpowiedź
#14
czy taki wpis jest poprawny?

int godzrozp = 12;
  int godzzak = 14;

      if ((rtc.getTimeStr(FORMAT_SHORT)) >= godzrozp && (rtc.getTimeStr(FORMAT_SHORT)) < godzzak ) {
    Serial.println("wlaczone ");
      }
          else {
    Serial.println("wylaczone ");

  }
 
Odpowiedź
#15
po przypisaniu ((rtc.getTimeStr(FORMAT_SHORT)) do int x otrzymuję nie godzinę np: 13 tylko liczbę 382
 
Odpowiedź
#16
Powiedz jakiej biblioteki używasz, kto jest autorem, strona domowa. Tak jak napisał Elvis być może walczysz o coś, co jest już przygotowane do podania na tacy, nawet z przykładami w pliku DS1302_Serial_Hard.pde: Serial.print(t.hour, DEC);.
 
Odpowiedź
#17
(12-01-2020, 02:59)kaczakat napisał(a): Powiedz jakiej biblioteki używasz, kto jest autorem, strona domowa. Tak jak napisał Elvis być może walczysz o coś, co jest już przygotowane do podania na tacy, nawet z przykładami w pliku DS1302_Serial_Hard.pde: Serial.print(t.hour, DEC);.

Witaj kaczkat. Tu jest link do pdf biblioteki.
http://www.rinkydinkelectronics.com/reso...DS1302.pdf
Tak myslę, że jest to gotowe tylko nie potrafię tego wywołać i przypisać do zmiennej int, a może źle to rozumiem. 

jak zmienną String przekształcić na int 

String aktualczas = "123";

int = 123

Proszę o przykład
 
Odpowiedź
#18
Wink 
Problem rozwiązany.

zastosowałem taką konwersję i wszystko działa super ( jak na razie  Blush )

int aktualgodz = czas.toInt();

rozwiazanie:

void loop()
{
 
  int chk = DHT11.read(DHT11PIN);
  int godzrozp = 10;
  int godzzak = 14;

String czas = rtc.getTimeStr(FORMAT_SHORT);
int aktualgodz = czas.toInt();


      if (aktualgodz >= godzrozp && aktualgodz < godzzak ) {
    Serial.println("wlaczone ");
      }
          else {
    Serial.println("wylaczone ");

  }


Dziękuję wszystkim za pomoc. Widzę, że to dopiero początek łamigłówki  Big Grin
 
Odpowiedź
#19
Działa to super, zrobiłeś to naokoło, jedyny plus, że nauczyłeś się konwertować string do liczby.
Nie mniej jednak Twoja biblioteka to ta sama, którą wspomniał Elvis, a przynajmniej ma ten sam przykład "Serial_Hard", gdzie jest pokazane jak pobrać od razu liczbę godzin:
Serial.print(t.hour, DEC);
można też zrobić przypisanie do zmiennej
int godziny=t.hour;
t.hour to zmienna przechowująca szukaną przez Ciebie liczbę.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości