AcquaPortal Forum Acquario Dolce e Acquario Marino

AcquaPortal Forum Acquario Dolce e Acquario Marino (http://www.acquariofilia.biz/forum.php)
-   Fai da te marino (http://www.acquariofilia.biz/forumdisplay.php?f=60)
-   -   Aquarduino: libreria "base" gestione plafoniera AGGIORNATA al 19/07/2013 (http://www.acquariofilia.biz/showthread.php?t=418418)

-GUIDO- 08-08-2013 22:27

ciao a tutti
dopo varie tribulazioni sono riuscito a far funzionare il display in SPI, ho preso un altro modulo ma nemmeno quello ne voleva sapere, fortunatamente avevo anche lapossibilità SPI
miracolo!
Ora posso studiare il codice e vedere se un giorno riuscirò anche a mettere in pratica
questo prezioso post!

-GUIDO- 09-08-2013 08:42

...dimenticavo
prima di iniziare a fondere meningi per nulla... è compatibile con ide 1.0.5 ed windows xp?
grazie

Barclay 06-02-2014 19:10

Quote:

Originariamente inviata da billykid591 (Messaggio 1062084043)
Quote:

Originariamente inviata da -GUIDO- (Messaggio 1062084031)
Quote:

Originariamente inviata da lionfish (Messaggio 1062083949)
Prova così..

plafo.perform(hour(), minute(), second());

mi da il medesimo errore

Così non potrà mai funzionare....devi prima dichiarare le variabili hour, minute e second e dargli un valore agganciandole ai relativi valori ritornati dal real time clock (il DS1307) e poi passarle a plafo.perform...ovviamente oltre all'RTC devi usare anche la libreria apposita (DS1307rc)

Ciao, ci ho provato anch'io, con lo stesso esito.
Ti spiegheresti meglio su questo argomento?

Niko79 07-02-2014 14:13

Quote:

Originariamente inviata da Barclay (Messaggio 1062311453)
Quote:

Originariamente inviata da billykid591 (Messaggio 1062084043)
Quote:

Originariamente inviata da -GUIDO- (Messaggio 1062084031)
Quote:

Originariamente inviata da lionfish (Messaggio 1062083949)
Prova così..

plafo.perform(hour(), minute(), second());

mi da il medesimo errore

Così non potrà mai funzionare....devi prima dichiarare le variabili hour, minute e second e dargli un valore agganciandole ai relativi valori ritornati dal real time clock (il DS1307) e poi passarle a plafo.perform...ovviamente oltre all'RTC devi usare anche la libreria apposita (DS1307rc)

Ciao, ci ho provato anch'io, con lo stesso esito.
Ti spiegheresti meglio su questo argomento?


Utilizzi un RTC ?
Posta lo spezzone di codice con cui visualizzi l'ora sul display o sulla seriale.
Aiuterà a capire ciò che, nel tuo codice, bisogna passare al metodo perform.

billykid591 07-02-2014 18:57

Quote:

Originariamente inviata da Niko79 (Messaggio 1062312392)
Quote:

Originariamente inviata da Barclay (Messaggio 1062311453)
Quote:

Originariamente inviata da billykid591 (Messaggio 1062084043)
Quote:

Originariamente inviata da -GUIDO- (Messaggio 1062084031)
Quote:

Originariamente inviata da lionfish (Messaggio 1062083949)
Prova così..

plafo.perform(hour(), minute(), second());

mi da il medesimo errore

Così non potrà mai funzionare....devi prima dichiarare le variabili hour, minute e second e dargli un valore agganciandole ai relativi valori ritornati dal real time clock (il DS1307) e poi passarle a plafo.perform...ovviamente oltre all'RTC devi usare anche la libreria apposita (DS1307rc)

Ciao, ci ho provato anch'io, con lo stesso esito.
Ti spiegheresti meglio su questo argomento?


Utilizzi un RTC ?
Posta lo spezzone di codice con cui visualizzi l'ora sul display o sulla seriale.
Aiuterà a capire ciò che, nel tuo codice, bisogna passare al metodo perform.

Bisogna tenere conto che la classe plafo creata da niko79 funziona solo con gli IDE Arduino dalla 1 in poi con gli IDE 22, 23 non funziona perchè non supportano le classi...NDR

Barclay 08-02-2014 01:35

Eccolo:

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

void setup () {
Serial.begin(57600);
Wire.begin();
RTC.begin();

if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}

}

void loop () {
DateTime 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.println();

Serial.print(" since 1970 = ");
Serial.print(now.unixtime());
Serial.print("s = ");
Serial.print(now.unixtime() / 86400L);
Serial.println("d");

// calculate a date which is 7 days and 30 seconds into the future
DateTime future (now.unixtime() + 7 * 86400L + 30);

Serial.print(" now + 7d + 30s: ");
Serial.print(future.year(), DEC);
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();

Serial.println();
delay(1000);
}

Niko79 08-02-2014 13:41

Perfetto, dopo che hai creato le due schede inserendo rispettivamente l'interfaccia e l'implementazione della classe, importa la classe e crea l'oggetto plafo sul codice principale ad esempio cosi:

codice:

#include <Wire.h>
#include "RTClib.h"
#include "Plafo.h"

RTC_DS1307 RTC;
Plafo plafo;//Plafoniera

Sul metodo setup configura i canali ad esempio cosi:
codice:

void setup () {
//Configurazione plafoniera
//Channel,startHour,startMinute,endHour,endMinute,fadeLen,maxPWM,pin
  plafo.setChannel(blue,18,0,4,0,30,180,7);//Dalle 18.00 alle 4.00, alba/tramonto 30 minuti, pwm massimo 180, pin 7 
  plafo.setChannel(white,18,15,3,45,75,180,5);//Dalle 18.15 alle 3.45, alba/tramonto 75 minuti
  plafo.setChannel(uv,19,30,2,30,0,HIGH,22);//Dalle 19.30 alle 2.30, accensione immediata, pin 22 (digitale)
  plafo.setChannel(moon,4,10,7,0,0,HIGH,23);//Dalle 4.10 alle 7.00

Serial.begin(57600);
Wire.begin();
RTC.begin();
....

sul ciclo loop esegui quindi il metodo perform dell'oggetto plafo passando l'ora ottenuta con l'RTC:
codice:

void loop () {
DateTime now = RTC.now();

plafo.perform(now.hour(), now.minute(), now.second());
...

#28#28

Barclay 08-02-2014 17:35

Ho fatto così:
codice:

#include "Plafo.h"
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

Plafo plafo;

void setup(void) {
 
  Serial.begin(57600);
  Wire.begin();
  RTC.begin();
 
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
 
 
  //Channel,startHour,startMinute,endHour,endMinute,fadeLen,maxPWM,pin
  plafo.setChannel(blue,18,0,4,0,30,180,7);//Dalle 18.00 alle 4.00, alba/tramonto 30 minuti, pwm massimo 180, pin 7 
  plafo.setChannel(white,18,15,3,45,75,180,5);//Dalle 18.15 alle 3.45, alba/tramonto 75 minuti
  plafo.setChannel(uv,19,30,2,30,0,HIGH,22);//Dalle 19.30 alle 2.30, accensione immediata, pin 22 (digitale)
  plafo.setChannel(moon,4,10,7,0,0,HIGH,23);//Dalle 4.10 alle 7.00
}

void loop(void) {
 
  DateTime 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.println();
 
    Serial.print(" since 1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");
 
    // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now.unixtime() + 7 * 86400L + 30);
 
    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
 
    Serial.println();
    delay(1000);

 
 
  //Sostituire "hour","minute", "second" con le variabili dichiarate sul vostro progetto, che contengono rispettivamente l'ora, i minuti e i secondi correnti.
  plafo.perform(8,0,0);

}

ma mi da una sfilza di errori...
il formato orario che inserisco a fine codice è corretto?
Scusa, ma come puoi immaginare sono proprio ai primordi.
------------------------------------------------------------------------
Ecco gli errori

codice:

Plafo\plafo.cpp.o: In function `Plafo::elapsedTimeToSecond(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)':
C:\Programmi\Arduino\libraries\Plafo/plafo.cpp:91: multiple definition of `Plafo::elapsedTimeToSecond(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)'
plafo.cpp.o:C:\DOCUME~1\Piero\IMPOST~1\Temp\build8057541304359831578.tmp/plafo.cpp:91: first defined here
c:/programmi/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: Disabling relaxation: it will not work with multiple definitions
Plafo\plafo.cpp.o: In function `Plafo::performChannel(void*, unsigned char, unsigned char, unsigned char)':
C:\Programmi\Arduino\libraries\Plafo/plafo.cpp:49: multiple definition of `Plafo::performChannel(void*, unsigned char, unsigned char, unsigned char)'
plafo.cpp.o:C:\DOCUME~1\Piero\IMPOST~1\Temp\build8057541304359831578.tmp/plafo.cpp:49: first defined here
Plafo\plafo.cpp.o: In function `Plafo::perform(unsigned char, unsigned char, unsigned char)':
C:\Programmi\Arduino\libraries\Plafo/plafo.cpp:37: multiple definition of `Plafo::perform(unsigned char, unsigned char, unsigned char)'
plafo.cpp.o:C:\DOCUME~1\Piero\IMPOST~1\Temp\build8057541304359831578.tmp/plafo.cpp:37: first defined here
Plafo\plafo.cpp.o: In function `Plafo::elapsedTimeToSecond(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)':
C:\Programmi\Arduino\libraries\Plafo/plafo.cpp:91: multiple definition of `lastSecond'
plafo.cpp.o:C:\DOCUME~1\Piero\IMPOST~1\Temp\build8057541304359831578.tmp/plafo.cpp:91: first defined here
Plafo\plafo.cpp.o: In function `Plafo::elapsedTimeToSecond(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)':
C:\Programmi\Arduino\libraries\Plafo/plafo.cpp:91: multiple definition of `channels'
plafo.cpp.o:C:\DOCUME~1\Piero\IMPOST~1\Temp\build8057541304359831578.tmp/plafo.cpp:91: first defined here
Plafo\plafo.cpp.o: In function `Plafo::setChannel(int, unsigned char, unsigned char, unsigned char, unsigned char, unsigned int, unsigned char, unsigned char)':
C:\Programmi\Arduino\libraries\Plafo/plafo.cpp:24: multiple definition of `Plafo::setChannel(int, unsigned char, unsigned char, unsigned char, unsigned char, unsigned int, unsigned char, unsigned char)'
plafo.cpp.o:C:\DOCUME~1\Piero\IMPOST~1\Temp\build8057541304359831578.tmp/plafo.cpp:24: first defined here
Plafo\plafo.cpp.o: In function `Plafo':
C:\Programmi\Arduino\libraries\Plafo/plafo.cpp:14: multiple definition of `Plafo::Plafo()'
plafo.cpp.o:C:\DOCUME~1\Piero\IMPOST~1\Temp\build8057541304359831578.tmp/plafo.cpp:14: first defined here
Plafo\plafo.cpp.o: In function `Plafo':
C:\Programmi\Arduino\libraries\Plafo/plafo.cpp:14: multiple definition of `Plafo::Plafo()'
plafo.cpp.o:C:\DOCUME~1\Piero\IMPOST~1\Temp\build8057541304359831578.tmp/plafo.cpp:14: first defined here

#06

Niko79 08-02-2014 17:46

Perche hai modificato il metodo perform cosi:
plafo.perform(8,0,0);
Devi lasciare come ti ho suggerito, inviando l'orario sempre aggiornato del RTC.
Hai inserito le due schede con l'interfaccia e l'implementazione della classe plafo ?
Dal messaggio di errore sembrerebbe che hai creato la classe da qualche altra parte.

Barclay 08-02-2014 23:35

allora non ho capito, credevo di dover impostare un orario e sostituire hour, minute, second.

Lasciando come dici mi da questo:


http://s3.postimg.cc/71l4jpntr/prova_plafo.jpg

Barclay 09-02-2014 00:06

Anche con le due schede:


http://s18.postimg.cc/y9so8qrxh/prova_plafo.jpg

billykid591 09-02-2014 01:24

Quote:

Originariamente inviata da Barclay (Messaggio 1062314386)

E' ovvio che ti da errore se non hai definito prima le variabili hour minute e second.....sostituiscile direttamente con i dati dell' rtc come ti ha detto niko cioe' now.hour(), now.minute() e now.second))....e dovrebbe funzionare

Barclay 09-02-2014 13:40

http://s3.postimg.cc/9yqxyrwrj/Provaplafo.jpg


Dici così?

Niko79 09-02-2014 14:43

Si cosi è corretto.
Il progetto è sotto la cartella libraries di Arduino ?
Se è cosi sposta il progetto al di fuori di libraries.

Barclay 09-02-2014 16:20

Fantastico!

cesarino.cv77 10-02-2014 15:57

Ciao e complimenti per il lavoro!
Una domanda"",ammetto che parlo nella totale ignoranza sull'argomento"",un mio carissimo amico mi sta progettando,o meglio sta creando(prima ne ha fatto uno per lui) un controller per la mia plafoniera basato su Arduino,
Praticamente il modello utilizzato e il Leonardo,fin qui tutto bene,per quello che deve fare va benissimo,resta il fatto che il suo controller nasce senza sonda per la temperatura per raffreddare la plafo,ma fa andare in corrispettiva le ventole con l'accensione e lo spegnimento di una linea di led predefinita,per me va benissimo,lunica cosa che le ventole(collegate ad un piedino PWM) non si spengono mai,ovvero a plafo spenta continuano a girare ai minimi regimi,come è possibile?
Lui mi dice che è normale,ma io credo che dipenda piu' che altro dal modello della ventola,
E' possibile?
Ho ha sbagliato lui qualcosa nella programmazione?

-GUIDO- 10-02-2014 16:43

bisogna capire cosa dice il codice e come ha collegato l'hardware.
Arduino esegue cio che noi vogliamo. Io la ventola l'ho attaccata direttamente senza passare da arduino...quindi sempre accesa, in attesa smonti per ammodernamenti lei è li che va...
il codice in questo caso nulla puo fare.

cesarino.cv77 10-02-2014 20:00

No no e collegata all'Arduino!


Tutti gli orari sono GMT +2. Attualmente sono le 21:09.

Powered by vBulletin versione 3.8.9
Copyright ©: 2000 - 2025, Jelsoft Enterprises Ltd.
Traduzione italiana Team: AcquaPortal
User Alert System provided by Advanced User Tagging v3.2.5 Patch Level 2 (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Copyright Zero Pixel Srl

Page generated in 0,19991 seconds with 13 queries