ARDUINO

 

provelab/arduino_es1/ATmega328P.pdf

http://arduino.cc/en/Main/ArduinoBoardUno

Esercizi:

1) No Debug

Nell' IDE non esiste lo strumento di debug quindi si vedrÓ nulla

void setup()
{
  int a,b,c;
  a=1; 
 
b=2;
  c=a+b;
}

void loop()
{
  //non fÓ nulla
}


2) Usare la seriale per il debugging

void setup()
{
  // inizializza la comunicazione seriale  
  // la seriale Ŕ l'unico strumento di debug
  Serial.begin(9600);
 
int a,b,c;
  a=1; 
 
Serial.print("a = ");
  Serial.println(a);
  b=2;
  Serial.print("b = ");
  Serial.println(b); 
 
c=a+b;
 
Serial.print("c = ");
  Serial.println(c); 
 
watch("c",c);   
}

void loop()
{
  //non fÓ nulla
}    
 


3) Un metodo pi¨ elegante per il debugging via seriale

#define watch(n,v) Serial.print(n); Serial.print(" = ");Serial.println(v);

void setup()
{
  // inizializza la comunicazione seriale   
  // la seriale Ŕ l'unico strumento di debug 
  Serial.begin(9600); 
  int a,b,c;
  a=1;  
  watch("a",a);
  b=2;
  watch("b",b);
  c=a+b; 
  watch("c",c);     
}

void loop() 
{
  //non fÓ nulla
}

4) Output digitale

#define watch(n,v) Serial.print(n); Serial.print(" = ");Serial.println(v);

#define LedPin 3

void setup()
{
  // inizializza la comunicazione seriale   
  // la seriale Ŕ l'unico strumento di debug 
  Serial.begin(9600); 
  pinMode(LedPin,OUTPUT);
}

void loop() 
{
  // Accende il LED
  digitalWrite(LedPin,HIGH);
  Serial.println("Led acceso");
  delay(2000);
  // Spegne il LED
  digitalWrite(LedPin,LOW);
  Serial.println("Led spento");
  delay(2000);  
}

5) Input digitale con antirimbalzo

#define watch(n,v) Serial.print(n); Serial.print(" = ");Serial.println(v);

#define LedPin 3 
#define PulPin 2

void setup()
{
  // inizializza la comunicazione seriale   
  // la seriale Ŕ l'unico strumento di debug 
  Serial.begin(9600); 
  pinMode(PulPin,INPUT_PULLUP);
  pinMode(LedPin,OUTPUT);
}

void loop() 
{
  //Polling 
  if (!digitalRead(PulPin))
  {
    Serial.println("Pulsante premuto");
    // Complemanta stato LED
    digitalWrite(LedPin,!digitalRead(LedPin));
    delay(50);
    //Attesa rilascio
    while (!digitalRead(PulPin));
    delay(50);
    Serial.println("Pulsante rilasciato");    
  }
}

6) Input analogico e output PWM

#define watch(n,v) Serial.print(n); Serial.print(" = ");Serial.println(v);

#define LedPin 3 
#define PotPin A0

int ain;

void setup()
{
  // inizializza la comunicazione seriale   
  // la seriale Ŕ l'unico strumento di debug 
  Serial.begin(9600); 
  pinMode(LedPin,OUTPUT);
}

void loop() 
{
  int v;
  v=analogRead(PotPin);
  if (ain!=v)
  {
    Serial.println(v);
    ain=v;
    v=map(v, 0, 1023, 0, 255);
    analogWrite(LedPin,v);    
  }  
}
 

7) Controllo luminositÓ PWM

 
Retroazione Riferimento Driver uscita
    

 

        
#define watch(n,v) Serial.print(n); Serial.print(" = ");Serial.println(v);
//Controllo di luminositÓ
#define IFotores      A0   // Ingresso fotoresistenza
#define IRiferimento  A1   // Ingresso tensione riferimento 
#define ULampada       3   // Uscita pilotaggio lampada
int uscita=0;             // Uscita pilotaggio lampada
int riferimento;
int retroazione;
int errore;




void setup() {
  Serial.begin(9600);   
  pinMode(ULampada, OUTPUT);      
}

void loop()
{
  riferimento=analogRead(IRiferimento);
  retroazione=analogRead(IFotores);
  errore=riferimento-retroazione;
  watch("Errore=",errore);
  uscita+=errore/2; 
  if (uscita>255)
    uscita=255;
  else
  if (uscita<0)
    uscita=0;
  analogWrite(ULampada,uscita);
  delay(100);
}