Visualizza un messaggio singolo
Vecchio 12-11-2011, 10:18   #5
billykid591
Discus
 
L'avatar di billykid591
 
Registrato: Aug 2007
Città: POZZUOLO DEL FRIULI
Acquariofilo: Dolce/Marino
N° Acquari: 2
Età : 64
Messaggi: 2.613
Foto: 0 Albums: 1
Post "Grazie" / "Mi Piace"
Grazie (Dati):
Grazie (Ricev.):
Mi piace (Dati):
Mi piace (Ricev.):
Mentioned: 11 Post(s)
Feedback 0/0%

Annunci Mercatino: 0
Originariamente inviata da superpozzy Visualizza il messaggio
visto che qualcuno me lo chiede in mp e se ne parla giusto qua in giro adesso, vi posto il codice alba/tramonto e display.

chiaramente:
1) dovete adattare i collegamenti al VOSTRO display, perchè non tutti funzionano allo stesso modo. questo è per schermi hitachi HD44780 e compatibili... il mio è 20x4
ho lasciato tutta la parte decrittiva per mia comodità. voi potete anche cancellarvela... ;
2) dovete avere un RTC;
3) è fatta per mia esigenza, quindi ha tre stringhe per le mie 3 tipologie di led: "progfreddo" sono i 20.000°K, "progcaldo" i 10.000°K e "progblu" i royal blu.
4) la stringa alba/tramonto ha segnato sopra l'orario che va da 00 (mezzanotte) a 23 (secondo voi?) e sotto le 3 stringhe con la PERCENTUALE di luminosità di quei led che varia in 60 minuti.
perciò se dalle 9 alle 10 la stringa dei led varia da 50 a 100, significa che in un'ora raggiunge il 100%.
se volete farlo in più tempo basta che allungate i tempi (es. ore 9 50%, ore 10 75%, ore 11 100%).

tutto quello che so l'ho scritto.
ora arrangiatevi! -28

ps: chiaramente lo sketch non visualizza HELLO WORLD come scritto....



codice:
/*
  LiquidCrystal Library - Hello World
 
 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the 
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.
 
 This sketch prints "Hello World!" to the LCD
 and shows the time.
 
  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
 
 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */

// include the library code:
#include <LiquidCrystal.h>
#include <Time.h>  
#include <Wire.h>  
#include <DS1307RTC.h>  // a basic DS1307 library that returns time as a time_t

const int Button1 = 0;     
const int Button2 = 1;  
const int LedFreddo = 9, LedCaldo = 10, LedBlu = 11;

int posx=0,posy=1;

LiquidCrystal lcd(13, 12, 5, 4, 3, 2);
String MenuArray[5][5]={{"Titolo 1"   ,"Titolo 2"   ,"Titolo 3"   ,"Titolo 4"   ,"Titolo 5"},
                        {"Submenu 1 1","Submenu 2 1","Submenu 3 1","Submenu 4 1","Submenu 5 1"},
                        {"Submenu 1 2","Submenu 2 2","Submenu 3 2","Submenu 4 2","Submenu 5 2"},
                        {"Submenu 1 3","Submenu 2 3","Submenu 3 3","Submenu 4 3","Submenu 5 3"},     
                        {"Submenu 1 4","Submenu 2 4","Submenu 3 4","Submenu 4 4","Submenu 5 4"} } ;

//                         00  01  02  03  04  05  06  07  08  09  10  11  12  13  14  15  16  17  18  19  20  21  22  23   
const int ProgFreddo[24]={  0,  0,  0,  0,  0,  1,  5, 30, 70,100,100,100,100,100,100,100,100,100, 40, 20, 10,  0,  0,  0};
const int ProgCaldo[24]= {  0,  0,  0,  0,  0,  0,  0,  3, 30, 70,100,100,100,100,100, 70,100,100,100, 70,  0,  0,  0,  0};
const int ProgBlu[24]=   {  4,  4,  4,  4,  4,  6, 15, 30, 50, 70,100,100, 80, 50, 50,100,100,100,100,100,100, 50,  4,  4};
                        
int OutFreddo, OutCaldo, OutBlu;

void setup() {
  Serial.begin(9600);
  pinMode(Button1, INPUT); 
  pinMode(Button2, INPUT);
  pinMode(LedFreddo, OUTPUT);
  pinMode(LedCaldo, OUTPUT);
  pinMode(LedBlu, OUTPUT);
  // set up the LCD's number of columns and rows: 
  lcd.begin(20, 4);
  // Print a message to the LCD.
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
}

void loop() {
  int i;
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):

  CalcolaLed();
  VisualizzaOra();
  delay(1000);
  // print the number of seconds since reset:
  lcd.clear();
}

void DisplayMenu() {

  if (!digitalRead(Button1)==HIGH) {
    posx++;
    if (posx>4) posx=0;
  }
  if (!digitalRead(Button2)==HIGH) {
    posy++;
    if (posy>4) posy=1;
  }

  lcd.setCursor(4,2) ;
  lcd.print(MenuArray[0][posx]);
  lcd.setCursor(4,3) ;
  lcd.print(MenuArray[posy][posx]);  
}

void VisualizzaOra(){
  
  lcd.setCursor(12,0);
  if (hour()<10) lcd.print("0");
  lcd.print(hour());
  lcd.print(":");
  if (minute()<10) lcd.print("0");
  lcd.print(minute());
  lcd.print(":");
  if (second()<10) lcd.print("0");
  lcd.print(second());
}

void CalcolaLed() {
  int OraAttuale, OraFutura, Minuto, Differenza;
  float Incremento, Attuale, T1;
  OraAttuale= hour()%24;
  OraFutura = (OraAttuale+1)%24;
  Minuto=minute();
//---------------------------------------------------------------------------  
  Differenza=ProgFreddo[OraFutura]-ProgFreddo[OraAttuale];
  Incremento=Differenza/60.0;
  Attuale=Incremento*Minuto+ProgFreddo[OraAttuale];
  OutFreddo= Attuale * 255 / 100 ;
  lcd.setCursor(0,0);
  lcd.print("F:");
  lcd.print((int)Attuale);
//---------------------------------------------------------------------------  
  Differenza=ProgCaldo[OraFutura]-ProgCaldo[OraAttuale];
  Incremento=Differenza/60.0;
  Attuale=Incremento*Minuto+ProgCaldo[OraAttuale];
  OutCaldo= Attuale * 255 / 100 ;
  lcd.setCursor(0,1);
  lcd.print("C:");
  lcd.print((int)Attuale);
//---------------------------------------------------------------------------  
  Differenza=ProgBlu[OraFutura]-ProgBlu[OraAttuale];
  Incremento=Differenza/60.0;
  Attuale=Incremento*Minuto+ProgBlu[OraAttuale];
  OutBlu= Attuale * 255 / 100 ;
  lcd.setCursor(0,2);
  lcd.print("B:");
  lcd.print((int)Attuale);
//---------------------------------------------------------------------------    
  analogWrite(LedFreddo, OutFreddo); 
  analogWrite(LedCaldo, OutCaldo); 
  analogWrite(LedBlu, OutBlu); 

  T1=analogRead(A0)*0.49;
  lcd.setCursor(0,3);
  lcd.print("T:");
  lcd.print((int)T1); 
}
pps: io ho usato mosfet per il pwm.

ppps: qua non me lo incolonna giusto, penso che nel programma di arduino lo faccia...

pppps: prima di dire che non funziona, controllate BENE i vostri collegamenti... -28
Un lavoro interessante e codice snello però ho due critiche (senza offesa si intende) da farti la prima riguarda l'uso del delay (di 1 secondo) nel Loop...così facendo blocchi il programma e l'uso dei tasti menu viene ritardato.......secondo non mi piace l'uso degli array predefiniti per l'alba tramonto..non puoi da menu scegliere i tempi di accensione spegnimento e..con passi predefiniti ho l'impressione che la dimmerazione venga scattosa....potevi sfruttare di più l'RTC........appena posso posterò il codice che sto usando io per la prossima plafo che sto relaizzando (anche se è per il dolce).....è preso in parte da altre realizzazioni (vedi typhoon)...e modificato....di contro rispetto al tuo è decisamente molto più lungo anche se più completo.
billykid591 non è in linea   Rispondi quotando
 
Page generated in 0,12116 seconds with 14 queries