DS1307 órachippel beállítható kapcsolóóra

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
Victor
DrótVégénSzéndarab
Hozzászólások: 17
Csatlakozott: 2012. április 16. hétfő, 6:00

Hozzászólás Szerző: Victor »

A zárójelek variálásával én is próbálkoztam, de semmi hatása nincs a végeredményre, bárhová is teszem, vagyis így sem jó. A időzített kimenet így is bekapcsolva marad, csak mikor a gomb kimenete lekapcsol akkor szakad meg egy másodpercre, de persze utána egyből vissza is kapcsol
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Összesített és kapcsolat kell.
Akkor a gombkezelésnél lehet vmi elcsúszásod...

Ezért írtam kapcsolót. Ott a beolvasott állapot egyezik a kapcsolóval :)
A pinstate==LOW, az pillanatnyi állapotot jelent csak!
Avatar
Victor
DrótVégénSzéndarab
Hozzászólások: 17
Csatlakozott: 2012. április 16. hétfő, 6:00

Hozzászólás Szerző: Victor »

sikerült megoldani :D

az időkapcsolt vezérlésbe nem is kell beleírni, az maradt az eredetei

Kód: Egész kijelölése

if (hour*60+minute>506 and hour*60+minute<1545) 
viszont hirtelen ötlettől vezérleve, na meg láttam egy LED kapcsolást amiben, az "if"-es sor alatt után két kimenet is volt kapcsolva, az egyik be másik ki, szóval bepróbáltam a kapcsoló részébe és bejött

Kód: Egész kijelölése

 buttonState = digitalRead(buttonPin);
 if (buttonState == HIGH)
 {    
 digitalWrite(rel2Pin, HIGH); // nyomógomb
 digitalWrite (relco2Pin, LOW); // időzített CO2 vezérlés
 delay(12000); 
 }
 else 
 //{
 digitalWrite(rel2Pin, LOW);
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Nono!
Ilyet nem illik:

digitalWrite(rel2Pin, HIGH);

Ezzel ugyanis egy ki/bemeneti láb belső felhúzóellenállását használod állapotjelzésre, változó helyett! Ez vezet majd misztikus hibákhoz a későbbiekben...
Avatar
Victor
DrótVégénSzéndarab
Hozzászólások: 17
Csatlakozott: 2012. április 16. hétfő, 6:00

Hozzászólás Szerző: Victor »

Sajnos más megoldást nem ismerek, mindenhol ebben a formátumban írják meg a nyomógombot, még a 60 napost tanfolyam 9# leckéjében is :) , kérdeztem én, hogy lehet-e valahogy értéket adni a nyomógombnak, vagyis elengedett állapotban legyen 60, megnyomva pedig 0, így könnyen beilleszthető lenne a képletbe, de azt írtad, hogy ezzel csak túlbonyolítom :-)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Az adatkezelésre _sehol_ nem használhatsz belső felhúzóellenállást!

A szezon és a fazon kverésének esete forog fenn....


A nyomógombnak _nem_ adhatsz értéket.
Változónak adhatsz a gombtól függően....
Off:
Tudom, szőrszálhasogatás. De másszaki szemlélet csak így működik :).
Otthon az asszony megszólal: kisfiam, levinnéd a szemetet?
Válasz:
a, igen drágán, viszem is
b, igen. Levinném. (és ücsörgök tovább)

Kérdés:
a, melyik a műszakilag helyes válasz?
b, melyiik esetben nem kapok vacsorát?
:P
Chipkonzol
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2016. február 13. szombat, 14:00

Re:

Hozzászólás Szerző: Chipkonzol »

Robert írta:2 tipp:
- belső ébresztőt használod, ekkor a chip INT lábán van jelválozás.
- kiolvasod időnként az órát. ha a beállított időponttal egyezik, akkor be/kikacsolsz eszközöket.

E második megoldás teljesen rugalmas, hisz korlátlan ki/bekapcsolást tudsz végezni. napi, heti, havi, óránkénti beosztásban...
Segítséget szetnék érni.DS1307 RTC ből az időt másodpercenként kiííratom soros port-ra. ez oké.

Kód: Egész kijelölése

#include <TimeLib.h>
#include <Wire.h>
#include <DS1307RTC.h>  

int ledpin=13;

void setup()  {
  Serial.begin(9600);
  while (!Serial) ; 
  setSyncProvider(RTC.get);  
  if(timeStatus()!= timeSet) 
     Serial.println("Unable to sync with the RTC");
  else
     Serial.println("RTC has set the system time");      

pinMode(ledpin, OUTPUT);
}

void loop()
{
  digitalClockDisplay();
    
  delay(1000);
}

void digitalClockDisplay(){
  
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year()); 
  Serial.println(); 
}

void printDigits(int digits){
  
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}
Szeretnék egy ledet bekapcsolni 14:00:00-kor 2 mp-re
Ezt hogyan tudom megtenni?

Kód: Egész kijelölése

if (hour= 14) {
    if (minute=0) { 
       if (second=0) {
           digitalWrite(ledpin,HIGH);
           delay(2000);
           digitalWrite(ledpin, LOW);


Ez igy nem jó mert ezt a hibát kapom. mi csinálok rosszul?

Kód: Egész kijelölése

exit status 1
overloaded function with no contextual type information
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: DS1307 órachippel beállítható kapcsolóóra

Hozzászólás Szerző: Robert »

If (valami == valami2)

Javítottam....

Kód: Egész kijelölése

if (hour== 14) {
    if (minute==0) { 
       if (second==0) {
           digitalWrite(ledpin,HIGH);
           delay(2000);
           digitalWrite(ledpin, LOW);
       }
    }
}
Chipkonzol
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2016. február 13. szombat, 14:00

Re: DS1307 órachippel beállítható kapcsolóóra

Hozzászólás Szerző: Chipkonzol »

Robert írta:If (valami == valami2)

Javítottam....

Kód: Egész kijelölése

if (hour== 14) {
    if (minute==0) { 
       if (second==0) {
           digitalWrite(ledpin,HIGH);
           delay(2000);
           digitalWrite(ledpin, LOW);
       }
    }
}
Ezt a hibaüzit kapom erre a kódra

Kód: Egész kijelölése

invalid operands of types '<unresolved overloaded function type>' and 'int' to binary 'operator=='
Chipkonzol
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2016. február 13. szombat, 14:00

Re: DS1307 órachippel beállítható kapcsolóóra

Hozzászólás Szerző: Chipkonzol »

Megoldódott a probléma, köszönm Robi a segítséget.

Kód: Egész kijelölése

if (hour()== 14) {
    if (minute()==0) { 
       if (second()==0) {
           digitalWrite(ledpin,HIGH);
           delay(2000);
           digitalWrite(ledpin, LOW);
       }
    }
}
A zárójelek hiányoztak :)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: DS1307 órachippel beállítható kapcsolóóra

Hozzászólás Szerző: Robert »

Korektebb:
1, elmúlt-e 14:00:00 és 14:02:00 előtt vagyok: be volt e már ma kapcsolva a holmi?
1a igen -> semmi dolog
1b nem -> bekapcsol, be volt kapcsolva=igaz időzítő indít (timer - 2 perc;Interrupt)

ha 14:02 elmúlt:
napi bekapcsolás = hamis (már nem is érdekes)


INTerrupt: Timer 2perc lejár
Kikapcsol.
Chipkonzol
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2016. február 13. szombat, 14:00

Re: DS1307 órachippel beállítható kapcsolóóra

Hozzászólás Szerző: Chipkonzol »

:wink: igen ez igy barátibb
Chipkonzol
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2016. február 13. szombat, 14:00

Re: DS1307 órachippel beállítható kapcsolóóra

Hozzászólás Szerző: Chipkonzol »

Robert írta:Korektebb:
1, elmúlt-e 14:00:00 és 14:02:00 előtt vagyok: be volt e már ma kapcsolva a holmi?
Ebben kérhetek egy kis segítséget?
A jelzőbiteket hogyan tudom használni?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: DS1307 órachippel beállítható kapcsolóóra

Hozzászólás Szerző: Robert »

Kód: Egész kijelölése

if idő >= 14:00 és ma_mar_volt_locsolas = 0
szelep bekapcsol;
ma_mar_volt_locsolas = 1

if ido==masnap es ido<14:00
 ma_mar_volt_locsolas =0
Chipkonzol
DrótVégénSzéndarab
Hozzászólások: 33
Csatlakozott: 2016. február 13. szombat, 14:00

Re: DS1307 órachippel beállítható kapcsolóóra

Hozzászólás Szerző: Chipkonzol »

Köszönöm, értem.
Válasz küldése