Go Down

Topic: Ciclo Alba-Tramonto con led RGB (Read 7685 times) previous topic - next topic

turipassaro

Ciao a tutti!
Come da titolo vorrei realizzare un ciclo di colori (alba-tramonto) per il mio acquario...
Avavo pensato di usare un RTC e per ogni fascia oraria aumentare o diminuire l'ammontamento dei vari colori (rosso,verde e blu).
Ma come fare?!
Sono riuscito a capire qualcosa dall'esempio dell'ide (Fading) ma come posso integrare il RTC?
Grazie in anticipo! :) :)

uwefed

Fai partire il fading a una certa ora.
Ciao Uwe

turipassaro

Potresti farmi un esempio non sono molto pratico (ho comprato il rtc ieri!!)
Grazie :) :) :P

turipassaro


leo72

La prima risorsa è Google.

Prendi il nome del tuo RTC, ci aggiungi la voce Arduino e fai una ricerca. Esempio, se hai comprato un DS1307, cerca "DS1307 Arduino". Una volta trovato gli esempi di codice ed i collegamenti, replichi tutto.

Poi aggiungi il cambio di luminosità del led in base all'ora, che leggi dall'RTC.

uwefed

Usa una libreria per quel RTC. Non so consigliarti nessuna perché non hai scritto quale RTC hai preso.

Converti i secondi, minuti e ore in secondi e poi confronti i secondi passati nel giorno se sono maggiore del numero di secondi per far partire il fade. Se son maggiori fai partire il fade e setti una variabile di stato per far partire solo una volta il fade. La stessa cosa la fai per lo spegnimento.

Ciao Uwe


PaoloP

Guarda anche il progetto di riciweb: Ardu Aquarium Controller --> http://arduino.cc/forum/index.php/topic,141419.0.html

turipassaro

Grazie a tutti!!! :D :D
Domani proverò ...

turipassaro

Allora, sono riuscito (in parte) a fare quello che volevo:
Code: [Select]
//includo la libreria per la
//comunicazione su bus I2C
#include <Wire.h>
void setup()
{
 pinMode(9, OUTPUT);
 //inizializzo la seriale
 Serial.begin(9600);
 //inizializzo la libreria
 Wire.begin();
 Wire.beginTransmission(0x68);
 //il primo byte stabilisce il registro
 //iniziale da scivere
 Wire.write((byte)0x00);
 //specifico il tempo e la data
 Wire.write((byte)0x30); //1° byte SECONDI da 0x00 a 0x59
 Wire.write((byte)0x59); //2° byte MINUTI da 0x00 a 0x59
 Wire.write((byte)0x80 | 0x18); //3° byte ORE da 0x00 a 0x24
 Wire.write((byte)0x01); //4° byte GIORNO della settimana da 0x01 a 0x07
 Wire.write((byte)0x21); //5° byte GIORNO del mese da 0x00 a 0x31
 Wire.write((byte)0x03); //6° byte MESE da 0x00 a 0x12
 Wire.write((byte)0x12); //7° byte ANNO 0x00 a 0x99
 Wire.endTransmission();
}




void loop()
{
 //inizzializza la trasmissione partendo
 //dall'indirizzo 0x00
 Wire.beginTransmission(0x68);
 Wire.write((byte)0x00);
 Wire.endTransmission();

 //richiedo 7 byte dal dispositivo con
 //indirizzo 0x68
 Wire.requestFrom(0x68, 7);
 //regupero i 7 byte relativi ai
 //corrispondenti registri
 byte secondi = Wire.read();
 byte minuti = Wire.read();
 byte ora = Wire.read();
 byte giorno_sett = Wire.read();
 byte giorno_mese = Wire.read();
 byte mese = Wire.read();
 byte anno = Wire.read();

 if (ora == 0x19) {

   for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
     // sets the value (range from 0 to 255):
     analogWrite(9, fadeValue);        
     // wait for 30 milliseconds to see the dimming effect    
     delay(3000);                            
   }
 }

}


Il problema è che questo codice riesce a gestire un solo pin...
Come posso fare per gestirne 3? :smiley-roll:

nid69ita

In che senso? Basta triplicare le righe relative al pin.

nella setup:
Code: [Select]

pinMode(9, OUTPUT);     //1°pin
pinMode(10, OUTPUT);   //2°pin
pinMode(11, OUTPUT);   //3°pin


e poi nel ciclo for:
Code: [Select]

  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5)
  { // sets the value (range from 0 to 255):
    analogWrite(9, fadeValue);    // 1° pin
    analogWrite(10, fadeValue);  // 2° pin
    analogWrite(11, fadeValue);  // 3° pin
    // wait for 30 milliseconds to see the dimming effect   
    delay(3000);                           
  }


Naturalmente usi il pin 9 e io suggerisco il 10 e 11, ma scegli altri 2 pin che siano liberi (10 e 11 oppure dipende da te)
my name is IGOR, not AIGOR

turipassaro

Si ma io vorrei dargli valori diversi...
Es il 9 ammonta di 5 alla volta il 10 di 7 e l'11 di 10

nid69ita

Code: [Select]

  fade2=0;
  fade3=0;
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5)
  { // sets the value (range from 0 to 255):
    analogWrite(9, fadeValue);    // 1° pin
    analogWrite(10, fade2);  // 2° pin
    analogWrite(11, fade3);  // 3° pin
    // wait for 30 milliseconds to see the dimming effect   
    delay(3000);                           
    fade2=fade2+7;
    if(fade2>255) fade2=255;
    fade3=fade3+10;
    if(fade3>255) fade3=255;
  }


dovrai dichiarare in cima al programma anche le 2 variabili fade2 e fade3
my name is IGOR, not AIGOR

Lele88ita

http://arduino.cc/forum/index.php/topic,156215.0.html
prova a guardare qui se la funzione map può esserti d'aiuto.

turipassaro

Scusate ho dato un'occhiata ma non ho capito molto.. :smiley-red:
Potreste spiegarmi questa funzione map?
Grazie ;)

Lele88ita

Guarda dentro qui. cerca la funzione map poi confrontala con gli ultimi sketch del link che ti ho dato prima.
prova a vedere se può esserti utile..

Go Up