lunedì 4 agosto 2014

Switch Case


 # define Sensore A0
   
   int ValoreSensore = 0;
   
   void setup() 
       { pinMode (Sensore,INPUT);
         Serial.begin(9600);}

   void loop(){
       
       ValoreSensore = analogRead(Sensore);
       
       ValoreSensore = map(ValoreSensore, 0, 1023, 0, 3);
       Serial.print("Lettura:   ");
       Serial.println(ValoreSensore);
      
       switch (ValoreSensore)
              { case 0:    
                Serial.println("Genova");
                break;
                case 1:   
                Serial.println("Palermo");
                break;
                case 2:    
                Serial.println("Venezia");
                break;
                case 3:    
                Serial.println("Napoli");
                break;                       } 

       delay(1000);
        }



Serial Read

/* 
Serial.flush();  svuota il buffer di ricezione seriale
Serial.available() >0) // buffer di ricezione > 0

*/
    #define LED 6  
   
    byte rx = 0;    
     
    void setup()
    	 { pinMode(LED, OUTPUT); 
           Serial.begin(9600);     	  
    	   Serial.flush(); }
     
    void loop() {
 
      if (Serial.available() >0) 
    	 { rx = Serial.read(); 
    	   Serial.flush(); 
           switch (rx) 
                {case 'a':    
                 digitalWrite(LED, HIGH);
                 break;
                 
                 case 'b':    
                 digitalWrite(LED, LOW);
                 break; }}
    	}

domenica 3 agosto 2014

Sensore analogico

Collegare un potenziometro da 47K fra +Vcc e GND.Il perno centrale su A0. Esso simulerà un qualunque sensore analogico.

 # define Sensore A0
   
   int ValoreSensore = 0;
   
   void setup() 
       { pinMode (Sensore,INPUT);
         Serial.begin(9600);}

   void loop(){
       
       ValoreSensore = analogRead(Sensore);
  
       Serial.print("Lettura:   ");
       Serial.println(ValoreSensore);
       
       delay(1000);
        }


map()
Il valore in ingresso varia da 0 a +5Vcc. Arduino lo elabora come un valore 0 -1023.
Con l'istruzione map questo valore viene rimappato avendo come limiti 20 e 200 (o altri valori. Quando la tensione in ingresso è zero la lettura sarà 20,quando è invece +5V sarà 200.

 # define Sensore A0
   
   int ValoreSensore = 0;
   
   void setup() 
       { pinMode (Sensore,INPUT);
         Serial.begin(9600);}

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


Candeliere votivo.

Annotazioni: vedi lo sketch Pausa.
Senza le variabili acceso1...acceso6 il LOOp so blocca dopo un certo numero di cicli.
NinoAL
       
 
 
 
 /* Candeliere votivo.
          Alla pressione del pulsante la
          relativa candela rimane accesa
          per n. minuti */
       # define CONTA          2
       # define LED1           8
       # define LED2           9
       # define LED3          10
       # define LED4          11     
       # define LED5          12
       # define LED6          13
     
       int ValueConta        = 0;
       int lastValueConta    = 0;
       int contaImpulsi      = 0;
       int ValueUno          = 1;
       int ValueDue          = 2;
       int ValueTre          = 3;
       int ValueQuattro      = 4;
       int ValueCinque       = 5;
       int ValueSei          = 6;
       
       byte acceso1 = LOW;
       byte acceso2 = LOW;
       byte acceso3 = LOW;
       byte acceso4 = LOW;
       byte acceso5 = LOW;
       byte acceso6 = LOW;
       
       unsigned long iMillis1 = 0;
       unsigned long iMillis2 = 0;
       unsigned long iMillis3 = 0;
       unsigned long iMillis4 = 0;
       unsigned long iMillis5 = 0;
       unsigned long iMillis6 = 0;
      
       int TempoON           =  3000;
       
       void setup() 
           { pinMode(CONTA,     INPUT );
             pinMode (LED1,     OUTPUT);
             pinMode (LED2,     OUTPUT);   
             pinMode (LED3,     OUTPUT);
             pinMode (LED4,     OUTPUT);             
             pinMode (LED5,     OUTPUT);
             pinMode (LED6,     OUTPUT); }
      
       void loop() {
      
      //---------- Leggi pezzi su Pin2 -------------------     
            ValueConta  = digitalRead(CONTA); 
            if ( ValueConta != lastValueConta) 
               { if ( ValueConta == HIGH)
                    { contaImpulsi++;
                    delay(20);    }}// DebounceTime
            lastValueConta = ValueConta;

           if ( ValueConta == HIGH && acceso1 == LOW && contaImpulsi==ValueUno) 
              { digitalWrite(LED1, HIGH);
                acceso1 = HIGH;
                iMillis1 = millis(); }
           if ( acceso1 == HIGH && (millis()-iMillis1) > TempoON)
              { digitalWrite(LED1, LOW);
                acceso1 = LOW; }
            
           if ( ValueConta == HIGH && acceso2 == LOW && contaImpulsi==ValueDue) 
              { digitalWrite(LED2, HIGH);
                acceso2 = HIGH;
                iMillis2 = millis(); }
           if ( acceso2 == HIGH && (millis()-iMillis2) > TempoON)
              { digitalWrite(LED2, LOW);
                acceso2 = LOW; }           
          
           if ( ValueConta == HIGH && acceso3 == LOW && contaImpulsi==ValueTre) 
              { digitalWrite(LED3, HIGH);
                acceso3 = HIGH;
                iMillis3 = millis(); }
           if ( acceso3 == HIGH && (millis()-iMillis3) > TempoON)
              { digitalWrite(LED3, LOW);
                acceso3 = LOW; }
            
           if ( ValueConta == HIGH && acceso4 == LOW && contaImpulsi==ValueQuattro) 
              { digitalWrite(LED4, HIGH);
                acceso4 = HIGH;
                iMillis4 = millis(); }
           if ( acceso4 == HIGH && (millis()-iMillis4) > TempoON)
              { digitalWrite(LED4, LOW);
                acceso4 = LOW; }             
         
           if ( ValueConta == HIGH && acceso5 == LOW && contaImpulsi==ValueCinque) 
              { digitalWrite(LED5, HIGH);
                acceso5 = HIGH;
                iMillis5 = millis(); }
           if ( acceso5 == HIGH && (millis()-iMillis5) > TempoON)
              { digitalWrite(LED5, LOW);
                acceso5 = LOW; }
            
           if ( ValueConta == HIGH && acceso6 == LOW && contaImpulsi==ValueSei) 
              { digitalWrite(LED6, HIGH);
                acceso6 = HIGH;
                iMillis6 = millis(); }
           if ( acceso6 == HIGH && (millis()-iMillis6) > TempoON)
              { digitalWrite(LED6, LOW);
                acceso6 = LOW; }   
      
          if ( contaImpulsi > 5)
             { contaImpulsi= 0; }     
       }

Protocollo I2C


   /* Il Sesnore BMP085 utilizza il protocollo
      di trasmissione I2C.Per questo tipo di
      trasmissione occorre un pin di Serial Clock Line
      ed un pin di Serial Data Line. Su Arduino UNO
      tale funzione è svolta dal pin A4=SDA e dal pin
      A5=SCL */
      
      #include <Wire.h>
      #include <Adafruit_Sensor.h>
      #include <Adafruit_BMP085_U.h>
       
      Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
       
      void setup()
             { /* pin A4 SDA
                  pin A5 SCL*/
               Serial.begin(9600);
               bmp.begin();   }
    
      void loop(){
  
               float celsiusBMP085;
               bmp.getTemperature(&celsiusBMP085);
               Serial.print("BMP085 Celsius:  ");
               Serial.print(celsiusBMP085);
               Serial.println("");
               
               delay(1000);        }