mercoledì 5 dicembre 2012

Scrittura su LCD 16x2 comp. HD44780



Collegare il perno centrale di due potenziometri da 47K su A1 ed A2


NOTA: Occorre la cartella di libreria LiquidCrystal.


      /*
      lcd.begin( numero caratteri, numero righe)
               (16,2) 16 caratteri;2 righe.
                   
      lcd.clear(); cancella il valore. La sovr-
         apposizione di un nuovo valore
         di 3 cifre su un valore di 4 
         cifre genera errore di lettura.
         1023 (prima lettura) e 628 2a let-
         tura risulterà 6283
       
      lcdSetCursor (numero cella, numero riga)
         num. cella: 0= 1a cella; 16a= cella
         num. riga:  0=prima riga; 1=seconda riga)
         lcdSetcursor(9,1); cursore su cella 9, 2a riga
         
      lcd.print("SENSORE");
      lcd.print(value);   
          Scrive su LCD il valore dopo la scritta
          SENSORE
      */

       #include <LiquidCrystal.h>
      
      LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
      //  pin LCD       RS E  D4   D5 D6  D7
     
      void setup() 
      
          { lcd.begin(16, 2); }
      
      void loop()
     
           { lcd.setCursor(0, 0);
             lcd.print("Hello World");
             lcd.setCursor(6, 1);
             lcd.print("Ciao Mondo"); }
 
 
 
 
 
 


Scrittura su LCD 20x4 QC2004A



Basta modificare lcd.begin(16, 2) in lcd.begin (20, 4)


       #include <LiquidCrystal.h>
      
      LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
      //  pin LCD       RS E  D4   D5 D6  D7
     
      void setup() 
      
          { lcd.begin(20, 4); }
      
      void loop() {
       
             lcd.setCursor(0, 0);
             lcd.print("Prima riga");
             lcd.setCursor(0, 1);
             lcd.print("Seconda riga");
             lcd.setCursor(0, 2);
             lcd.print("Terza riga");
             lcd.setCursor(0, 3);
             lcd.print("Quarta riga ");
         }

Valore analogico su LCD


#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
const int Sensore1 = A0;  

long Val = 0;

void setup()  
{ 
   pinMode(Sensore1, INPUT);    
   lcd.begin(16, 2);
   lcd.print("VALORE .");

} 
 
void loop()
{
  Val=analogRead(Sensore1);
  lcd.setCursor(0, 1);
  lcd.print(Val);
  lcd.setCursor(0, 1);
  delay(500);
  lcd.print("        ");
delay(10);

}

martedì 4 dicembre 2012

Scrittura su barra Led






# define SENSORE A0  // Sensore analogico
# define BARGRAPH 10 // L'insieme di 10 led

// Pin di Arduino su cui sono collegati i Led
int pinOut[] ={2,3,4,5,6,7,8,9,10,11}; 
int valoreSensore = 0;// Variabile analalogica di input
int LedLevel = 0;     // Variabile analogica di out

void setup()
   {for (int Led = 0; Led < BARGRAPH;Led++)
   {pinMode(pinOut[Led], OUTPUT);}}

void loop() {

   valoreSensore = analogRead(SENSORE);
   LedLevel = map(valoreSensore, 0, 1023, 0, BARGRAPH);

  for (int Led = 0; Led < BARGRAPH; Led++)
      { if   (Led < LedLevel)
             {digitalWrite(pinOut[Led], HIGH);} 
        else {digitalWrite(pinOut[Led], LOW); }}
}

lunedì 3 dicembre 2012

Cancello Scorrevole


/* CANCELLO AUTOMATICO.
 - Pulsante APRI N.A = Premuto +5vCC
 - Fotocellula N.A = attiva +5Vcc 
 - FineCorsaApertura N.A = attivo +5Vcc
 - FineCorsaChiusura N.A = attivo +5Vcc

*/
   # define TASTOA       2 
   # define TASTOK       3  
   # define FINECC       4
   # define FINECA       5
   # define FOTOC        6 
   # define MOTOREA     11 
   # define MOTOREK     12 
    
   int valoreTastoA       = 0;
   int valoreTastoK       = 0;
   int valoreFINECC       = 0;
   int valoreFINECA       = 0; 
   int valoreFOTOC        = 0;

 void setup()  
   {pinMode(TASTOA,       INPUT); 
    pinMode(TASTOK,       INPUT);
    pinMode(FINECC,       INPUT);
    pinMode(FINECA,       INPUT);
    pinMode(FOTOC,        INPUT);
    pinMode(MOTOREA,      OUTPUT);
    pinMode(MOTOREK,      OUTPUT);} 
 
 void loop() {
//********** TASTO APRI  ****************** 
      
   valoreTastoA  = digitalRead(TASTOA);
   if (valoreTastoA == HIGH )               //-- Tasto Apri ON
      {digitalWrite(MOTOREK,  LOW);         //--- Motore Chiudi OFF
       digitalWrite(MOTOREA, HIGH);}        //--- Motore Apri ON
              
   valoreFOTOC   = digitalRead(FOTOC);
   if (valoreFOTOC == HIGH)                 //---Se Fotocellula attiva
      {{digitalWrite(MOTOREA, LOW);         //--- Motore Apri OFF
        digitalWrite(MOTOREK,LOW);          //--- Motore Chiudi OFF
        delay (3000);}                      //--- Attendi  
        valoreFOTOC   = digitalRead(FOTOC); //--- Leggi valore Fotocellula
          if (valoreFOTOC == LOW)           //--- Se Fotocellula OFF                        
             {digitalWrite(MOTOREA, HIGH);}}//--- Motore APRI ON riparte
  
   valoreFINECA  = digitalRead(FINECA); 
   if (valoreFINECA == HIGH)                //--- FineCorsa APRI ATTIVO   
       {digitalWrite(MOTOREA, LOW);         //--- Motore Apri OFF
        delay (1000);                       //--- Attesa tempo aperto
        digitalWrite(MOTOREK, HIGH);}       //--- Motore Chiudi ON
   
   valoreFINECC  = digitalRead(FINECC);     
   if (valoreFINECC == HIGH)                //--- FineCorsa CHIUSURA ATTIVO     
      {digitalWrite(MOTOREK, LOW);
       digitalWrite(MOTOREA, LOW); }        //--- Motore Chiudi OFF   
                  
   valoreTastoK  = digitalRead(TASTOK);     
   if (valoreTastoK == HIGH )               //-- Tasto Chiudi ATTIVO   
       {digitalWrite(MOTOREA, LOW);         //--- Motore Apri OFF
        digitalWrite(MOTOREK, LOW);}        //--- Motore Chiudi OFF     
        
 }

Nota:Premere e tenere premuto il pulsante APR fino ache il finecorsa di chiusura non passa da HIGH a LOW.



Serratura a codice


     /*
 Il led si accende dopo aver premuto i tasti
 5 - 7 - 3- A nella giusta sequenza
 Il tasto C resetta le variabili.

     KEYPAD R0  R1   R2   R3  C0  C1  C2  C3
     ARDUINO 8   7    6    5   12  11  10  9
     */
     #include <Keypad.h>

     # define LED1 3
      
     const byte RIGHE    = 4; 
     const byte COLONNE  = 4; 
     
     int valore1 = 0;
     int valore2 = 0;
     int valore3 = 0;
     int valoreA = 0;
     int valoreC = 0;
     int Combi1  = 5;
     int Combi2  = 7;
     int Combi3  = 3;
     int CombiA  = 1;
     int CombiC  = 1; 
     
     char Tasti[RIGHE][COLONNE] =
       {{'1','2','3','C'},
        {'4','5','6','D'},
        {'7','8','9','E'},
        {'A','0','B','F'}};
      
     byte righe[RIGHE] = {8, 7, 6, 5}; 
     byte colonne[COLONNE] = {12, 11, 10, 9}; 

     // Creazione della tastiera
     Keypad cKeypad = Keypad( makeKeymap(Tasti),
                 righe, colonne, RIGHE, COLONNE); 

     void setup() 
      { pinMode     (LED1, OUTPUT);
        Serial.begin(9600);         }
  
   void loop(){
        char Key = cKeypad.getKey();
        if (Key)
         {Serial.println(Key);}
        
         if (Key)
 // per i numeri dopo il case vedi tavola ASCII          
            {   switch (Key)
              { case 53: 
                   valore1 = (Combi1 + 1); 
                   break;
                case 55: 
                   valore2 = (Combi2 + 1); 
                   valore1 = (valore1 - 1);
                   break;
               case 51:  
                   valore3 = (Combi3+1);
                   valore2 = (valore2 - 1);
                   break;
              case 65: 
                   valoreA = CombiA;
                   valore3 =(valore3 - 1);
                   break; 
 // Se si preme il tasto C si azzera tutto.              
                case 67:
                   valoreC = CombiC;
                   break; 
 // Se si premono le altre cifre si azzera tutto.  
                case 48:
                   valoreC = CombiC;
                   break;
               case 49:
                   valoreC = CombiC;
                   break;
                  case 50:
                   valoreC = CombiC;
                   break;
               case 52:
                   valoreC = CombiC;
                   break;
                case 54:
                   valoreC = CombiC;
                   break;
                case 56:
                   valoreC = CombiC;
                   break;
               case 57:
                   valoreC = CombiC;
                   break; 
               case 66:
                   valoreC = CombiC;
                   break; 
               case 68:
                   valoreC = CombiC;
                   break;
               case 69:
                   valoreC = CombiC;
                   break;
                  case 70:
                   valoreC = CombiC;
                   break; }}
                                   
          if (valoreC == CombiC )
             { valore1 = 0;
               valore2 = 0; 
               valore3= 0;
               valoreA =0;
               valoreC= 0;
               digitalWrite(LED1,LOW);}
          
         if (valore1 == Combi1 && valore2 == Combi2 && 
              valore3 == Combi3 && valoreA == CombiA  )
          { digitalWrite(LED1,HIGH); }
          
 }




Struttura:
La pressione del tasto corretto incrementa la variabile di 1.(variabile1 = Combi1 +1 )
La corretta pressione del tasto successivo decrementa la variabile precedente.





AnalogIN AnalogOUT

   # define SENSORE  A0
   # define LED      9

   int SensorValue = 0;       
   int outputValue = 0;   

   void setup() 
       { pinMode(SENSORE, INPUT); 
         pinMode(LED, OUTPUT);
         Serial.begin(9600);}

   void loop() {
       
        SensorValue = analogRead(SENSORE);            
       outputValue = map(SensorValue, 0, 1023, 0, 255);  
       analogWrite(LED, outputValue);           
       Serial.print("sensor = " );                       
       Serial.print(SensorValue);      
       Serial.print("\t output = ");      
       Serial.println(outputValue);   
       delay(1000);                     
}

map()


Il valore di uscita variarà da 0 a 1023

   # define SENSORE A0
   
   int ValoreSensore = 0;
   
   void setup() 
       {Serial.begin(9600);}

   void loop(){
       ValoreSensore = analogRead(0);
       Serial.print("VALORE DEL SENSORE   ");
       Serial.println(ValoreSensore);
       delay(2000);
}


Sketch di confronto.
Il valore in uscita varia in un range che va da 20 a 200
   # define SENSORE A0
   
   int ValoreSensore = 0;
   
   void setup() 
       {Serial.begin(9600);}

   void loop(){
       ValoreSensore = analogRead(0);
       ValoreSensore = map(ValoreSensore, 0, 1023, 20, 200);
       analogWrite(9, ValoreSensore);
       Serial.print("VALORE DEL SENSORE   ");
       Serial.println(ValoreSensore);
       delay(2000);
}


Valore min e max impostabile da potenziometri esterni.
   # define Sensore A0
   # define PotMin A1
   # define PotMax A2
   
   int ValoreSensore = 0;
   int ValoreMin = 0;
   int ValoreMax = 00;
   
   void setup() 
       { pinMode (Sensore,INPUT);
         Serial.begin(9600);}

   void loop(){
       
       
       ValoreMin= analogRead(PotMin);
       ValoreMax= analogRead(PotMax);  
     
       ValoreSensore = analogRead(Sensore);
       
       ValoreSensore = map(ValoreSensore, 0, 1023, ValoreMin, ValoreMax);
       Serial.print("Lettura:   ");
       Serial.println(ValoreSensore);
       
       delay(1000);
        }

SwitchCase1

     
     # define SENSORE A0
    
     int       LetturaSensore =   0;
     int       Range          =   0;
     const int ValoreMinimo   =   0;      
     const int ValoreMassimo  = 600;    
        
    void setup() 
         {Serial.begin(9600);}

   void loop() {
  
       LetturaSensore = analogRead(SENSORE);
       Range = map(LetturaSensore, ValoreMinimo, ValoreMassimo, 0, 3);

      switch (Range) 
           {case 0:  
               Serial.print   ("LIVELLO BASSO     ");
               Serial.println (LetturaSensore);
               break;
            case 1:    
                Serial.print   ("LIVELLO MINIMO   ");
                Serial.println (LetturaSensore);
                break;
            case 2:    
                Serial.print   ("LIVELLO MASSIMO   ");
                Serial.println (LetturaSensore);
                break;
            case 3:    
                Serial.print   ("LIVELLO ALTO   ");
                Serial.println (LetturaSensore);
                break; } 
      delay(2000);  
}





domenica 2 dicembre 2012

Barra a diodi Led


# define SENSORE A0  // Sensore analogico
# define BARGRAPH 10 // L'insieme di 10 led

// Pin di Arduino su cui sono collegati i Led
int pinOut[] ={2,3,4,5,6,7,8,9,10,11}; 
int valoreSensore = 0;// Variabile analalogica di input
int LedLevel = 0;     // Variabile analogica di out

void setup()
   {for (int Led = 0; Led < BARGRAPH;Led++)
   {pinMode(pinOut[Led], OUTPUT);}}

void loop() {

   valoreSensore = analogRead(SENSORE);
   LedLevel = map(valoreSensore, 0, 1023, 0, BARGRAPH);

  for (int Led = 0; Led < BARGRAPH; Led++)
      { if   (Led < LedLevel)
             {digitalWrite(pinOut[Led], HIGH);} 
        else {digitalWrite(pinOut[Led], LOW); }}
}



Scrittura di un valore analogico

I due sensori possono essere simulati da due potenziometri da 22K-47K con il cursore su A1 e A2.

/*
lcd.begin( numero caratteri, numero righe)
         (16,2) 16 caratteri;2 righe.
             
lcd.clear(); cancella il valore. La sovr-
   apposizione di un nuovo valore
   di 3 cifre su un valore di 4 
   cifre genera errore di lettura.
   1023 (prima lettura) e 628 2a let-
   tura risulterà 6283
    
lcdSetCursor (numero cella, numero riga)
   num. cella: 0= 1a cella; 16a= cella
   num. riga:  0=prima riga; 1=seconda riga)
   lcdSetcursor(9,1); cursore su cella 9, 2a riga
   
lcd.print("SENSORE");
lcd.print(value);   
    Scrive su LCD il valore dopo la scritta
    SENSORE

 Serial.println("\n");
 Lascia delle righe vuote fra una lettura
 e la successiva.
*/
   
     
    #include <LiquidCrystal.h>
    
     # define Sensore1  A1  
     # define Sensore2  A2
   
    LiquidCrystal lcd(8, 9, 10, 11, 12, 13); 
      
    int  ValoreSensore1 = 0; 
    int  ValoreSensore2 = 0;
   
    void setup()
         { pinMode(Sensore1, INPUT);  
           pinMode(Sensore2, INPUT);
           lcd.begin(16, 2);            
           Serial.begin(9600); }  
     
    void loop(){
         
         Serial.println("\n");
         lcd.clear();
        
         ValoreSensore1=analogRead(Sensore1); 
         lcd.setCursor(0, 0);       
         lcd.print("Sensore1");  
         lcd.setCursor(12, 0); 
         lcd.print(ValoreSensore1); 
         Serial.print ("Sensore1 =");                
         Serial.println(ValoreSensore1);   
         
         ValoreSensore2=analogRead(Sensore2); 
         lcd.setCursor(0, 1);       
         lcd.print("Sensore2    "); 
        // lcd.setCursor(12, 0); 
         lcd.print(ValoreSensore2);
         Serial.print ("Sensore2 =");       
         Serial.println(ValoreSensore2); 
      
         delay(1500);                    
          }




La lettura avviene sulla porta seriale dell'IDE di Arduino.


Tastiera.Pilotare uno o più led.

     /*
     author Alexander Brevig

     #include <Keypad.h>

     # define LED1 3
     # define LED2 4
   
     const byte RIGHE    = 4; 
     const byte COLONNE = 4; 
   
     char Tasti[RIGHE][COLONNE] =
       {{'1','2','3','C'},
        {'4','5','6','D'},
        {'7','8','9','E'},
        {'A','0','B','F'}};
      
     byte righe[RIGHE] = {8, 7, 6, 5}; 
     byte colonne[COLONNE] = {12, 11, 10, 9}; 

     // Creazione della tastiera
     Keypad cKeypad = Keypad( makeKeymap(Tasti),
                 righe, colonne, RIGHE, COLONNE); 

     void setup() 
      {pinMode     (LED1, OUTPUT);
       pinMode     (LED2,  OUTPUT);  
       digitalWrite(LED1,   HIGH);
       digitalWrite(LED2,   HIGH);
       Serial.begin(9600);       }
  
   void loop(){
        char Key = cKeypad.getKey();
  
         if (Key)
         {switch (Key)
                  {case 49: //valore ascii del numero 1
                   digitalWrite(LED1, HIGH);
                   break;
                   case 50: //valore ascii del numero 2
                   digitalWrite(LED2, HIGH);
                   break;
                   case 52: //valore ascii del numero 4
                   digitalWrite(LED1, LOW);
                   break;
                   case 53: //valore ascii del numero 5
                   digitalWrite(LED2, LOW);
                   break;     }
          Serial.println(Key);}
 }

Tastiera.Lettura da Keypad


   /*
     KEYPAD R0  R1   R2   R3  C0  C1  C2  C3
     ARDUINO 8   7    6    5   12  11  10  9
     */
     #include <Keypad.h>

     const byte RIGHE   = 4; 
     const byte COLONNE = 4; 
   
     char Tasti[RIGHE][COLONNE] =
       {{'1','2','3','C'},
        {'4','5','6','D'},
        {'7','8','9','E'},
        {'A','0','B','F'}};
      
     byte righe[RIGHE] = {8, 7, 6, 5}; 
     byte colonne[COLONNE] = {12, 11, 10, 9}; 

     // Creazione della tastiera
     Keypad cKeypad = Keypad( makeKeymap(Tasti),
                    righe, colonne, RIGHE, COLONNE); 

     void setup() 
      {Serial.begin(9600); }
  
   void loop(){
        char Key = cKeypad.getKey();
  
         if (Key)
         {Serial.println(Key);}
 }

Se la tastiera in vostro posesso ha altre lettere o numeri diversi basta modificare lo sketch
     char Tasti[RIGHE][COLONNE] =
       {{'1','2','3','C'},
        {'4','5','6','D'},
        {'7','8','9','E'},
        {'A','0','B','F'}};

Per conoscere i pin della tastiera occorre fare riferimento al datasheet.
Solitamente,guardando la tastiera ed iniziando a sinistra: il primo pin è la Colonna0 (C0) a seguire,C2,C3,la Riga0(RO),la R1,R2 ed R3.

E' comunque, con tentativi ed andando ad esclusione scoprire la piedinatura.









sabato 1 dicembre 2012

Dissolvenza con un diodo Led

// Un led collegato al pin 9
   # define LED 9

   int Luminosita = 0;  
   int Dissolvenza = 5;  

   void setup()  
         {pinMode(LED, OUTPUT);} 

void loop()  { 
        analogWrite(LED, Luminosita);    
        Luminosita = Luminosita + Dissolvenza;
      if (Luminosita == 0 || Luminosita == 255)
         {Dissolvenza = -Dissolvenza ;}     
  
  delay(30);                            
}

Leggi variabile Luminosita.
Luminosita = Lumiosita + Dissolvenza = 5
La Luminosità del led si incrementa a step di 5.
Quando la variabile Luminosita arriva a 255 la variabile Dissolvenza diventa negativa (Dissolvenza = - Dissolvenza) e la luce decrementa. Quando la variabile Luminosita = 0 la variabile Dissolvenza(negativa) viene nuovamente negata diventando positiva ( -5= -5 --->= +5).