
LEZIONE n° 7 – ROBOT
Con questa lezione cominciamo a gestire tutto il robot.
Per prima cosa dobbiamo organizzare l’hardware e seconda del tipo di robot (2 o 4 ruote) e dei sensori. Dovremo porre particolare attenzione al collegamento dei vari blocchi elettrici del robot. Dopo aver collegato in modo adeguato tutti i blocchi potremmo cominciare ad organizzare la gestione del robot.
Dovremo porre particolare attenzione alla programmazione di Arduino e quindi:
RICORDIAMO I PRINCIPI DELLA PROGRAMMAZIONE DI ARDUINO:
n Variabili:
n Tipo (intero, reale, carattere, etc.)
n Nome (caratteri alfanumerici)
n Strutture (corso avanzato)
n Principali comandi:
n Assegnazione
n Si calcola l’espressione a sinistra ed il risultato viene assegnato alla variabile a destra
n Count = count +1
n IN/OUT
n Istruzioni per immettere o prelevare dei dati
n digitalWrite(pin1,LOW)
n Test
n Viene eseguito il test (vero o falso) e secondo il valore viene eseguita l’istruzione seguente
n If (count <= soglia)
n Istruzione1
n istruzione2
n Cicli
n Vengono eseguite ripetutamente un gruppo di istruzioni
n For (x=0;x==9;x++)
n istruzione1
Per provare a fare le modifiche proposte copiare il listato (colorato in rosso) ed incollarlo in un editor di solo testo [Notepad ad esempio]
listato programma esempio numero 12: leggere gli urti del robot – CONTARE L’URTO E VERIFICARE SE IL CONTATORE E’ PARI O DISPARI
/*
gestione urti ROBOT (con conteggio e verifica)
*/
int urtoSX=2;
int urtoDX=7;
int led_urtoSX=6;
int led_urtoDX=5;
int led_urtoCX=8;
int tempo_led;
int val_urtoSX;
int val_urtoDX;
int contaurtiSX = 0;
int contaurtiDX = 0;
int contaurtiCX = 0;
void setup()
{
Serial.begin(9600);
pinMode (urtoSX,INPUT);
pinMode (urtoDX,INPUT);
pinMode (led_urtoSX,OUTPUT);
pinMode (led_urtoDX,OUTPUT);
pinMode (led_urtoCX,OUTPUT);
digitalWrite(led_urtoSX,LOW); // SPEGNI LED
digitalWrite(led_urtoDX,LOW); // SPEGNI LED
digitalWrite(led_urtoCX,LOW); // SPEGNI LED
delay(500);
}
void loop()
{
val_urtoSX=digitalRead(urtoSX);
val_urtoDX=digitalRead(urtoDX);
// val_urtoSX=HIGH; // FOR DEBUGGING
// val_urtoDX=LOW;
tempo_led=250;
if ((val_urtoSX==HIGH)&&(val_urtoDX==HIGH)) // URTO CENTRO
{
Serial.println(” “);
Serial.println(” URTO CENTRO “);
contaurtiCX++;
Serial.print(” valore contatore Urto centro = “);
Serial.print(contaurtiCX);
if(contaurtiCX==(contaurtiCX/2)*2)
Serial.print(” contatore PARI “);
else
Serial.print(” contatore DISPARI “);
digitalWrite(led_urtoCX,HIGH); // ACCENDI LED
delay(tempo_led);
digitalWrite(led_urtoCX,LOW); // SPEGNI LED
}
if ((val_urtoSX==HIGH)&&(val_urtoDX==LOW)) // URTO SINISTRO
{
Serial.println(” “);
Serial.println(” URTO SINISTRO “);
contaurtiSX++;
Serial.print(” valore contatore Urto sinistro = “);
Serial.print(contaurtiSX);
if(contaurtiDX==(contaurtiDX/2)*2)
Serial.print(” contatore PARI “);
else
Serial.print(” contatore DISPARI “);
digitalWrite(led_urtoSX,HIGH); // ACCENDI LED
delay(tempo_led);
digitalWrite(led_urtoSX,LOW); // SPEGNI LED
}
if ((val_urtoSX==LOW)&&(val_urtoDX==HIGH)) // URTO DESTRO
{
Serial.println(” “);
Serial.println(” URTO DESTRO “);
contaurtiDX++;
Serial.print(” valore contatore Urto destro = “);
Serial.print(contaurtiDX);
if(contaurtiDX==(contaurtiDX/2)*2)
Serial.print(” contatore PARI “);
else
Serial.print(” contatore DISPARI “);
digitalWrite(led_urtoDX,HIGH); // ACCENDI LED
delay(tempo_led);
digitalWrite(led_urtoDX,LOW); // SPEGNI LED
}
}
}
Modifiche proposte:
n Contare tutti gli urti insieme
n Accendere led diversi secondo il valore del contatore (PARI = VERDE, DISPARI = ROSSO)
n
di seguito le slide della lezione










(77)