lunedì 26 gennaio 2015

GSM Shield parte 1a.



ATTENZIONE: La Shield accetta, sul proprio spinotto, un'alimentazione esterna di 5V e non di 12V.Collegato con la 12V si è bruciato il condensatore di ingresso ma alimentadola
da Arduino (spostare il selettore) funziona.

Ricordarsi di modificare (eventualmente) i pin di Tx ed Rx all'interno del file GSM.cpp

domenica 25 gennaio 2015

GSM Shield .Test

Dopo aver inserito la shield premere il pulsante Power Key.
Oltre al led pover si accende il led rosso Status led ed il led verde Net light.
Il led Net Ligh lampeggia a frequenza elevata quando ricerca la rete a frequenza bassa (un lampeggìo ogni 3 sec.) quando è agganciato alla rete.

Nel file GSM.cpp assicurarsi che :
#define _GSM_TXPIN_ 7
#define _GSM_RXPIN_ 8



      /* -----------------------------------------------------------------------------------
      Libreria--> GSMSHIELD---> GSM.CPP assicurarsi che i pin
      di trasmissione siano:
      #define _GSM_TXPIN_ 7
      #define _GSM_RXPIN_ 8
      
       Accende e spegne un LED a secondo dell'SMS inviato:
       ON  => Accende il LED
       OFF => Spegne il LED
       Altro => Messaggio di errore sul Serial Monitor
       ---------------------------------------------------------------------------------- */
      #include "SIM900.h"
      #include <SoftwareSerial.h> 
      #include "sms.h"            
      
      SMSGSM sms;
     
      int led = 13; // Il Pin 13 è quello connesso al LED
      int numdata;
      boolean started=false;
      char smsbuffer[160];
      char Mittente[20];
      
      void setup() 
           { Serial.begin(9600);
             Serial.println("ESEMPIO INVIO/RICEZIONE SMS");
             pinMode(led, OUTPUT);    
             digitalWrite(led, LOW);  
             if ( gsm.begin(2400) )
                { Serial.println("STATUS Modulo GSM = PRONTO");
                   started=true;   }
            else 
               Serial.println("STATUS Modulo GSM = INATTIVO"); }
  
           boolean SerialRead(char s[])
                   { int i=0;
                     if ( Serial.available() > 0)
                        { while ( Serial.available() > 0) 
                                { s[i]=Serial.read();
                                  delay(10);
                                  i++; } }
                                  
                     s[i]='\0';  
                     return (i!=0);}
     
      
      void loop()  {
        
        char inSerial[50];
        char position;
        if ( started)
           { position = sms.IsSMSPresent(SMS_ALL); 
          if ( position) 
             { sms.GetSMS(position, Mittente, smsbuffer, 160);
               Serial.print("Comando Ricevuto [tel. "+String(Mittente)+String("]: ") + String(smsbuffer));
               if (strcmp(smsbuffer,"ON")==0)
                  { digitalWrite(led, HIGH); 
                    Serial.println(" => Accendo il LED"); }
              
               else if (strcmp(smsbuffer,"OFF")==0)
                  { digitalWrite(led, LOW); 
                    Serial.println(" => Spengo il LED"); }
            
               else if (strcmp(smsbuffer,"STATUS")==0)
                   { if ( digitalRead(led)==HIGH)
                       { sms.SendSMS(Mittente, "STATUS: LED Acceso"); 
                         Serial.println(" => il LED e' Acceso");  }
                    else
                       { sms.SendSMS(Mittente, "STATUS: LED Spento"); 
                         Serial.println(" => il LED e' Spento"); }}
               else
                  Serial.println(" => non riconosciuto!");
                 sms.DeleteSMS(position);  }
           
        delay(1000); }
      }


NOTA: Ok, funziona.

domenica 18 gennaio 2015

Linea dati.



Un appartamento. Un fotodiodo ricevente IR ed un telecomando in ciascuna stanza, gli Attiny posizionati presso i dispositivi elettrici da pilotare. Da ciascuna stanza il fotodiodo rileverebbe il treno di impulsi proveniente dal telecomando, identico in ogni stanza, inviandolo sulla linea dati. Ciascun ATTTINY è programmato per accettare un solo treno di impulsi ed attivare un relè. Esempio: da qualunque stanza premendo il tasto 4 si può abbassare la tapparella della cucina.
Potrebbe funzionare.
  /* Si sottopone a condizione if la lettura
       esadecimale dei tasti anteponendo al valore
       HEX il valore 0x. Nello sketch:
       Relè = OFF
       Tasto 1 premuto FF30CF = Relè ON
       Tasto 2 premuto FF18E7= Relè OFF      */
     
       #include <IRremote.h> 
       
       # define RELE 6
       
       int receiver = 7; 
      
       IRrecv irrecv(receiver); 
      
      decode_results results;
    
      void setup()
          { Serial.begin(9600); 
            irrecv.enableIRIn(); 
            pinMode(RELE, OUTPUT);
            digitalWrite(RELE,LOW); }
          
          
      void loop(){
      
         if ( irrecv.decode(&results)) 
            { Serial.println(results.value, HEX); 
              irrecv.resume();                  } 
         
         if ( results.value == 0xFF30CF)
            { digitalWrite(RELE, HIGH);    } 
            
         if ( results.value == 0xFF18E7)
            { digitalWrite(RELE, LOW);    } 
               
    }

martedì 13 gennaio 2015

Password inserita da Keypad.


La libreria Password permette di inserire una password da keypad.

      
      
      #include <Password.h> //http://www.arduino.cc/playground/uploads/Code/Password.zip
      #include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip
      #include <LiquidCrystal.h>
    
      Password password = Password( "1234" );
    
      LiquidCrystal lcd(8, 9, 10, 11, 12, 13);//pin ARDUINO MEGA 2560
    
      const byte RIGHE = 4; 
      const byte COLONNE = 4; 
      
      char keys[RIGHE][COLONNE] = {{'1','2','3','A'},
                                   {'4','5','6','B'},
                                   {'7','8','9','C'},
                                   {'F','0','E','D'}};
      
      byte rowPins[RIGHE]   = {14, 15, 16, 17}; //pin ARDUINO MEGA 2560
      byte colPins[COLONNE] = {18, 19, 20, 21};;//pin ARDUINO MEGA 2560

      Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, RIGHE, COLONNE );
      
      void setup()
           { lcd.begin(20, 4); 
             keypad.addEventListener(keypadEvent); }
      
     
      void loop(){
     
        keypad.getKey();
        lcd.setCursor(0, 0);
        lcd.print("Ins.Codice e press F");
   
      }//-------------Fine LOOP------------------------------
      
      void keypadEvent(KeypadEvent eKey){
           switch ( keypad.getState())
                  { case PRESSED:
                    switch ( eKey )
                           { case 'F': checkPassword(); 
                             break;
                            case 'E': password.reset();
                             break;
                            default: password.append(eKey);}}
      }//------------ FINE Void -------------------------------
      
      void checkPassword() {
           if ( password.evaluate())
              { lcd.setCursor(0, 1);
                lcd.print("Impianto Inserito   "); }
          else
              { lcd.setCursor(0, 1);
                lcd.print("Codice Errato        ");   }
     
      }//------------ FINE Void -------------------------------

sabato 10 gennaio 2015

Senso di rotazione.



     /* Due fotointerruttori a forcella affiancati.
        Il fascio di luce viene interrotto da un disco rotante.
        Il senso di rotazione viene stabilito in
        funzione di quale fotodiodo viene illuminato
        per primo.
     */     
      int canaleA=6;
      int canaleB=9;
      int contatore=0;
      boolean avanti;
      boolean indietro;
      boolean memoriaA;
      boolean memoriaB;
      boolean direzione;
       
      void setup()
          { Serial.begin(9600);
            pinMode(6,INPUT);
            pinMode(9,INPUT); }
      
      void loop() {
      
      canaleA=digitalRead(6);
      canaleB=digitalRead(9);
      Serial.print(contatore);
      Serial.print("  Avanti ");
      Serial.print(avanti);
      Serial.print("  indietro ");
      Serial.println(indietro);
                
      if ( canaleB==1 && canaleA==1)
         { direzione=1;
           memoriaA=0;
           memoriaB=0;             }
  
      if ( canaleA==0 && direzione==1)
         { indietro=1;
           avanti=0;
           direzione=0;              }
    
      if ( canaleB==0 && direzione==1)
         { avanti=1;
           indietro=0;
           direzione=0;              }
              
     if ( canaleB==0 && avanti==1 && memoriaA==0)
        { contatore=contatore+1;
          memoriaA=1;                           }
   
     if ( canaleA==0 && indietro==1 && memoriaB==0)
        { contatore=contatore-1;
          memoriaB=1;                             }
       
     
    }//---------FINE LOOP--------------
       

sabato 3 gennaio 2015

Motori passo passo (stepper ) 4a parte.


Un motore passo passo ruota in senso orario per per 1000 passi alla velocità di 60 rpm ed in senso antiorario di 250 passi alla velocità di 10 rpm.

      #include <Stepper.h>
      
      #define STEPSmotore1 300   

      Stepper stepper1(STEPSmotore1, 8, 10, 9, 11);

      int  StepsOrario1        = 1000;
      int  StepsAntiOrario1    = -250;
      int  VelocitaOrario1     = 60;
      int  VelocitaAntiOrario1 = 10;      
     
      void setup()   
          {  }
      
      void loop()   {

        stepper1.setSpeed(VelocitaOrario1);
        stepper1.step(StepsOrario1);
        delay(1000);
        
        stepper1.setSpeed(VelocitaAntiOrario1);  
        stepper1.step(StepsAntiOrario1);
        delay(2000);
      
      }