Show Posts
Pages: [1]
1  International / Software / Re: Effetto alba e tramonto on: October 05, 2012, 09:07:23 am
Ciao sono Matteo sono nuovo nel forum

sono giorni che mi leggo i vari problemi nel realizzare un effetto alba tramonto. Io ho provato diversi modi ma non riesco a capire quale funzione sia più adatta al mio progetto. Sono un elettrotecnico e programmatore di plc ma arduino è molto diverso.

Ho realizzato un effetto alba tramonto pilotando dei mosfet IRF 540n con le uscite PW 3,5,6 una per ogni serie di led bianco, blu e rosso.
Per pilotare il tutto ho in ingresso un timer digitale esterno con contatto a deviatore, lo uso per inizio alba e inizio tramonto,
conatto chiuso inizio alba e contatto aperto inizio tramonto, mi funziona tutto ma di continuo, se il contatto e chiuso mi ripete sempre l'alba e se è chiuso di continuo il tramonto. Ho anche messo dei led per indicare qundo inizia e finisce una funzione. Il progetto è in loop ho provato a metterlo anche in setup ma poi per farlo ripartire devo resettarlo perche altrimenti lo legge una volta sola. Vi allego il codice, se qualcuno può darmi un consiglio. smiley-confuse
Ho provato ad usare anche il controllo switch, while, do... al posto di if e else.


Code:
int ledBianco =3;    // Dichiara il PIN led BIANCO di arduino incaricato di gestire il fading
int ledBlu =5;  // Dichiara il PIN led BLU di arduino incaricato di gestire il fading
int ledRosso =6;   // Dichiara il PIN led ROSSO di arduino incaricato di gestire il fading
int InizioAlba =7; // spia inizio alba
int FineAlba =8;   // spia fine alba
int InizioTramonto =12; // spia inizio tramonto
int FineTramonto =13;   // spia fine tramonto

const int Switch =1;
int StatoSwitch =0;


void setup()  {
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
 pinMode(Switch, INPUT); // ingresso timer esterno per inizio ciclo alba contatto chiuso tramonto contatto aperto

}

void loop(){

StatoSwitch= digitalRead(Switch);

if(StatoSwitch==0){
  
  digitalWrite(7, HIGH); // SPIA INIZIO ALBA
  digitalWrite(13, LOW); // SPENGO SPIA FINE TRAMONTO PER INIZIO CICLO
  // inizio alba con bianco lento seguito dal blu
  // Esegue un aumento progressivo della luminosità  da 0 a 255 (massimo) con step di 1 punti
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) {
    // Invia il valore al mosfet (0-255):
    analogWrite(ledBianco, fadeValue);        
    // tempo in millisecondi per poter visualizzare l'effetto di dimmeraggio
    delay(4500); // 300 millisecondi corrispondono a 1 minito circa con incremento 1                          
  }
  
  // Esegue un aumento progressivo della luminosità  da 0 a 255 (massimo) con step di 1 punti
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) {
    // Invia il valore al mosfet (0-255):
    analogWrite(ledBlu, fadeValue);        
    // tempo in millisecondi per poter visualizzare l'effetto di dimmeraggio
    delay(3000);
  }
   digitalWrite(8, HIGH); // SPIA FINE ALBA
 }  


else {

  digitalWrite(12, HIGH); // SPIA INIZIO TRAMONTO
  
 // inizio tramonto led BIANCO scende lento inizio salita led ROSSO lento fino al massimo poi inizio discesa led BLU e ROSSO(più veloce del BLU) per arrivare alla luce lunare.
  // Esegue una diminuzione progressiva della luminosità  da 255 a 20 con step di -1 punti
  for(int fadeValue = 255 ; fadeValue >= 20; fadeValue -=1) {
    // Invia il valore al mosfet (0-255):
    analogWrite(ledBianco, fadeValue);        
    // tempo in millisecondi per poter visualizzare l'effetto di dimmeraggio
    delay(3000);                          
  }
  // Esegue un aumento progressivo della luminosità  da 0 a 255 (massimo) con step di 1 punti
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) {
    // Invia il valore al mosfet (0-255):
    analogWrite(ledRosso, fadeValue);        
    // tempo in millisecondi per poter visualizzare l'effetto di dimmeraggio
    delay(1500);
  }
     // Esegue una diminuzione progressiva della luminosità  da 255 a 40 (intensità  50) con step di -1 punti
  for(int fadeValue = 255 ; fadeValue >= 40; fadeValue -=1) {
    // Invia il valore al mosfet (0-255):
    analogWrite(ledBlu, fadeValue);        
    // Attende 30 millisecondi prima in modo da poter visualizzare l'effetto di dimmeraggio
    delay(3000);  
}
  // Esegue una diminuzione progressiva della luminosità  da 255 a 0 (INTENSITA 20) con step di -1 punti
  for(int fadeValue = 255 ; fadeValue >= 20; fadeValue -=1) {
    // Invia il valore al mosfet (0-255):
    analogWrite(ledRosso, fadeValue);        
    // Attende 30 millisecondi prima in modo da poter visualizzare l'effetto di dimmeraggio
    delay(1500);
  
}

// Esegue una diminuzione progressiva della luminosità  da 20 a 0 (SPENTO) con step di -1 punti
  for(int fadeValue = 20 ; fadeValue >= 0; fadeValue -=1) {
    // Invia il valore al mosfet (0-255):
    analogWrite(ledBianco, fadeValue);
    analogWrite(ledRosso, fadeValue);    
    // Attende 30 millisecondi prima in modo da poter visualizzare l'effetto di dimmeraggio
    delay(900);
  
}

// Esegue una diminuzione progressiva della luminosità  da 50 a 1 (luce lunare 1) con step di -1 punti
  for(int fadeValue = 50 ; fadeValue >= 1; fadeValue -=1) {
    // Invia il valore al mosfet (0-255):
    analogWrite(ledBlu, fadeValue);        
    // Attende 30 millisecondi prima in modo da poter visualizzare l'effetto di dimmeraggio
    delay(3000);
  
}
digitalWrite(13, HIGH); // SPIA FINE TRAMONTO
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(12, LOW);
2  International / Generale / Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! on: October 05, 2012, 08:37:44 am
Ciao a tutti sono Matteo
sono un elettrotecnico, programmatore di plc, da poco sono entrato nel mondo di arduino stò imparando come funziona è un pò diverso da un normale plc ma molto più economico e pieno di funzioni.  smiley mi piace.
Pages: [1]