byte Fase1 = 5; byte Fase2 = 6; byte Fase3 = 7; byte Fase4 = 8; int Ritardo = 15 ; puntatore! // sono equivalenti le sintassi:

Documenti analoghi
CORSO ARDUINO. Corso ASEV Giulio Fieramosca Stefano Panichi. Stefano Panichi e Giulio Fieramosca

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii

Tipologie dei dati nell SDK di Arduino come in un vero LP ad alto livello :

Corso di programmazione Arduino DI MALVEZZI DAVIDE

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Progetto Arduino BART. Corso di Sistemi RT Prof. Davide Brugali Università degli Studi di Bergamo

Macchina con Arduino Uno comandata tramite dispositivo Android e sensore ultrasuoni per fermarsi istantaneamente di fronte ad un ostacolo

La Keyes 4 relay non è proprio una shield nel senso classico definito nel mondo arduino in quanto una shield dovrebbe essere concepita per essere

Facciamo lampeggiare un led

14^ parte : Sensore a ultrasuoni HC SR04 e Arduino. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

FONDAMENTI DI ARDUINO

Automobile Bluetooth

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii

8^ parte : Pilotare Motori passo-passo bipolari usando l integrato L298N. Author: Ing. Sebastiano Giannitto (ITIS M.

SENSORI OTTICI - FOTORESISTENZE

Fondamenti di Informatica 1 Ing.Gestionale (A.A ) - docente Sandro Moriggi RECUPERO. cognome nome

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Programmazione di Base Variabili Array Funzioni Strutture di controllo. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

CONTASECONDI CON DISPLAY A 7 SEGMENTI ARDUINO LIKE

9^ parte : Come pilotare motori dc utilizzando il motor shield. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

QUADRO DI CONTROLLO AMBIENTALE

Per vedere tutti i tutorial:

My First Robot. My First Robot. I m Learning Robotics. 1 Scarica l ultima versione della Arduino IDE (

Fisica, tecnologia, scienze applicate: ulab2, un laboratorio portatile basato su arduino e due piccoli robot, LEMU e MOMOLAB, vanno a scuola

Le strutture di controllo in C++

Gestione di files Motivazioni

Introduzione a Arduino

Per controllare un motore DC (funzionante in corrente continua) con Arduino, devi utilizzare il circuito integrato Ponte H (nel mio caso un L293NE

Telecontrollo escavatore LEGO con board Arduino

C: panoramica. Violetta Lonati

imparare & approfondiredi MASSIMILIANO MIOCCHI

I SENSORI DI PROSSIMITA

ARDUINO COLOR SENSOR TCS230 / TCS3200

Arduino. Led, pulsanti, PWM, tastierino, display sette segmenti, display LCD

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

E labirinto cronaca di un fallimento

Progetti reali con ARDUINO

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Display numerico con i LED

Arduino: manuale di programmazione wiring

CONOSCERE L HW. I / O digitale. Ingressi (INPUT) digitali: Pulsante (Push Button) Interruttore (Switch SPST) 03/05/2012. Struttura dei Programmi

Esercizio 1: funzione con valore di ritorno di tipo puntatore

La piattaforma hardware e software Arduino Corso completo di autoapprendimento Aggiornato a Arduino Yun

Stringhe Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

CORSO ARDUINO. Corso ASEV Giulio Fieramosca Stefano Panichi. Stefano Panichi e Giulio Fieramosca

6^ parte : Acquisizione della temperatura con LM35. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

Laboratorio di Informatica

STRUTTURE DI CONTROLLO DEL C++

Elementi di C++ di base

Relazione attività di laboratorio - Arduino

8^ parte : Come pilotare i motori passo-passo unipolari. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

In questo tutorial decodificheremo i segnali provenienti da un telecomando qualsiasi e utilizzeremo gli stessi segnali per comandare Arduino a

Pr1: determinare il maggiore di n numeri interi n. Fondamenti di Informatica Prof. Vittoria de Nitto Personè

STUDIO PER UN SIMULATORE DI CONTROLLORE PER MOTORI

Controllare un nastro trasportatore fischertechnik con Arduino

Il Theremin con il microcontrollore

Progetti reali con ARDUINO

Corso Base Arduino ed Elettronica

Università di Roma Tor Vergata L6-1. iterazione: struttura di controllo per ripetere più volte uno stesso comando

Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' a p e \0

ARDUINO. Misurare e controllare. Riccardo Barberi. Dip. di Fisica Univ. Della Calabria Rende (CS), Italy

Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C

IZ1MHN e IW1ALX. Prima di iniziare. Domande sulla lezione scorsa? Come è andato il compito a casa?

Esercizi di programmazione in linguaggio C English Dictionary

// Controllo remoto 05/05/2012 // poichè sono ancora ai primi passi ho usato // a larghe mani idee e listati di altri. Ringrazio tutti loro.

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

ARDUINO. Colleghiamolo al PC/MAC - FUNZIONA?

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

1) definizione di una rappresentazione 2) specificazione di un algoritmo (dipendente dalla rappresentazione) 3) traduzione in un linguaggio

Gestione dei compiti

scelta tra azioni alternative

STRINGHE: ARRAY DI CARATTERI! a p e \0

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Descrizione dell'obiettivo dello sketch per Arduino ed eventualmente differenze rispetto ai precedenti.

8^ parte : Pilotare Motori passo-passo bipolari usando l integrato L298N. Author: Ing. Sebastiano Giannitto (ITIS M.

Programmazione in Java (I modulo)

La sintassi del C APPENDICE H

Classe 5I2 AS. 2013/14 Niccolò Bulla Giorgia Novelli

ELECTRONICS LAB [WITH ARDUINO]

8^ parte : Motor shield FE e motore passo-passo bipolare. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

RELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA

MANUALE OPERATIVO PROTOCOLLO DI COMUNICAZIONE TERMOMETRI SITEL CONTROL SERIE A BASSA TEMPERATURA

Algoritmo di ordinamento per scambio (a bolle o bubble sort)

Introduzione al C. Unità 8 Stringhe

Università degli studi di Roma LA SAPIENZA

Directory. Le directory unix sono file.

Elementi base. del linguaggio di programmazione. di Arduino

N.B: Clicca qui per scaricare il file.zip con tutti gli sketch utilizzati per realizzare la faccia robotica.

Parametri by reference. Funzioni. Passaggio dei parametri. Parametri by reference. Soluzione. Problemi

ELECTRONICS LAB [WITH ARDUINO]

Radar con Arduino. da Emanuele Lovera - Blogger

Laboratorio di Informatica

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Ricerca binaria (o dicotomica) di un elemento in un vettore

I files in C. A cura del prof. Ghezzi

Esercitazione Monitoraggio temperatura via WEB mediante Arduino YUN

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

Esercizi di preparazione Prima Parte

Transcript:

/* * Prova per la verifica del funzionamento di un motore passo-passo con modulo L298N * Motorino in prova di tipo unipolare oppure bipolare passo-passo. * L'elemento comune (in genere il file rosso) dei motore unipolari viene tralasciato * ed il motorino viene inteso come motorino bipolare * Ottobre 2016 * Autore Prof. A. Celentano */ const int Unipolare = 1 ; const int Bipolare = 2 ; byte Fase1 = 5; byte Fase2 = 6; byte Fase3 = 7; byte Fase4 = 8; int Ritardo = 15 ; char Comando[] = "Buffer per ricevere comando puntatore! *(Comando+i) ed Comando[i] char OldComando[] = "Buffer per ricevere old comando" ; int LenComando = 0 ; int TipoMoto = 0 ; int TipoMotore = Unipolare ; bool A,B,C,D ; int i; " ; // definisce un'area di memoria ed un // sono equivalenti le sintassi: void setup() Serial.begin(9600); while(!serial) Serial.println("---COMANDI---") ; Serial.println("unipolare : imposta il tipo di motore Unipolare") ; Serial.println("bipolare : imposta il tipo di motore Bipolare") ; Serial.println("avanti : attiva moto in senso orario") ; Serial.println("indietro : attiva moto in senso anti-orario") ; Serial.println("stop : arresta il moto") ; Serial.println("p+ : esegue un passo in senso orario") ; Serial.println("p- : esegue un passo in senso anti-orario") ; Serial.println("* : Azzera il buffer dei comandi") ; Serial.println("r : Ripete l'ultimo comando eseguito") ; Serial.println("d+ : aumenta di 1 m-sec. il delay tra le fasi") ; Serial.println("d- : diminuisce di 1 m-sec. il delay tra le fasi") ; Serial.println("d=n : imposta il delay tra le fasi ad n-millisec.") ; Serial.println("s= : imposta la sequenza delle fasi, esempio s=+0100 oppure s=-1000") ; Serial.println("1/4+ : esegue un 1/4 di passo in senso orario (solo unipolare)") ; Serial.println("1/4- : esegue un 1/4 di passo in senso anti-orario (solo unipolare)") ; Serial.println("1/2+ : esegue un 1/2 di passo in senso orario (solo bipolare)") ; Serial.println("1/2- : esegue un 1/2 di passo in senso anti-orario (solo bipolare)") ; Serial.print("Tipo di motore impostato: ") ; if( TipoMotore == Unipolare ) Serial.println("Unipolare"); Serial.println("Bipolare"); pinmode( Fase1, OUTPUT ) ; pinmode( Fase2, OUTPUT ) ; pinmode( Fase3, OUTPUT ) ; pinmode( Fase4, OUTPUT ) ; Sequenza( "+", LOW, LOW, LOW, LOW ) ; void loop() LeggiComando() ; DecodificaComando() ; EseguiComando() ;

/* +---------------------------------------------------+ Legge il comando inviato tramite seriale La funzione controlla la presenza di byte nel buffer seriale e, se ci sono, li accoda nel buffer 'Comando'. La funzione intercetta il comando * che permette di azzerare il buffer 'Comando' ed il comando r che permette di ripetere l'invio dell'ultimo comando eseguito. I comandi devono terminare con il terminatore NL (NewLine) che ha codice 10 Dimensionamento esterno char *Comando = "digitare trenta caratteri!" ; int LenComando = 0 ; Autore Prof. Aniello Celentano Data Ottobre 2016 +---------------------------------------------------+ */ void LeggiComando() byte k=0 ; if( Serial.available() > 0 ) while( true ) if( Serial.available() > 0 ) LenComando++ ; Comando[LenComando-1] = Serial.read() ; if( Comando[LenComando-1] == 10 ) break ; Comando[LenComando-1]='\0' ; if( Comando[0] == '*' ) Serial.println("***Buffer azzerato***"); if( Comando[0] == 'r' ) strcpy( Comando, OldComando ); LenComando=1; Serial.println("***Ripetizione comando***"); Serial.print("Comando ricevuto: ["); Serial.print( Comando ); Serial.print("] lung. = "); Serial.println( strlen(comando) ); void DecodificaComando() if(lencomando>0) for(i=0;i<9;i++) if( Comando[i]!= *( ("unipolare")+i ) ) break; if(i==9) TipoMotore=Unipolare; LenComando=0; SalvaComando() ; Serial.print("Tipo di motore impostato: Unipolare") ; return; for(i=0;i<8;i++) if( Comando[i]!= *( ("bipolare")+i ) ) break; if(i==8) TipoMotore=Bipolare; LenComando=0; SalvaComando() ; Serial.print("Tipo di motore impostato: Bipolare") ; return; for(i=0;i<6;i++) if( Comando[i]!= *( ("avanti")+i ) ) break; if(i==6) TipoMoto=1; LenComando=0; SalvaComando() ; return; for(i=0;i<8;i++) if( Comando[i]!= *( ("indietro")+i ) ) break; if(i==8) TipoMoto=2; LenComando=0; SalvaComando() ; return;

if( Comando[i]!= *( ("stop")+i ) ) break; if(i==4) TipoMoto=3; LenComando=0; SalvaComando() ; return; if( Comando[i]!= *( ("p+")+i ) ) break; TipoMoto=4; LenComando=0; SalvaComando() ; return; if( Comando[i]!= *( ("p-")+i ) ) break; TipoMoto=5; LenComando=0; SalvaComando() ; return; if( Comando[i]!= *( ("1/4+")+i ) ) break; if(i==4) TipoMoto=6; LenComando=0; SalvaComando() ; return; if( Comando[i]!= *( ("1/4-")+i ) ) break; if(i==4) TipoMoto=7; LenComando=0; SalvaComando() ; return; if( Comando[i]!= *( ("1/2+")+i ) ) break; if(i==4) TipoMoto=8; LenComando=0; SalvaComando() ; return; if( Comando[i]!= *( ("1/2-")+i ) ) break; if(i==4) TipoMoto=9; LenComando=0; SalvaComando() ; return; if( Comando[i]!= *( ("d+")+i ) ) break; SalvaComando() ; Ritardo++ ; return; if( Comando[i]!= *( ("d-")+i ) ) break; SalvaComando() ; Ritardo-- ; if(ritardo<1) Ritardo=1; return; if( Comando[i]!= *( ("d=")+i ) ) break; SalvaComando() ; sscanf( Comando+2, "%i", &i ); if(i<1) i=1; Serial.print("delay tra le fasi "); Serial.print(i); Serial.println(" m-sec." ); Ritardo = i; return; if( Comando[i]!= *( ("s=")+i ) ) break; SalvaComando() ; if( Comando[2]=='0' ) A=LOW; A=HIGH; if( Comando[3]=='0' ) B=LOW; B=HIGH; if( Comando[4]=='0' ) C=LOW; C=HIGH; if( Comando[5]=='0' ) D=LOW; D=HIGH; Sequenza("+",A,B,C,D) ; return; /* Segmento software di prova i=trovacarattere('='); if(i>0) Serial.print("uguale in "); Serial.println( i );

Comando[i]=0; // spezza la stringa Comando in due parti! Serial.print("parte nome var. "); Serial.println( Comando ); Serial.print("parte numerica "); Serial.println( Comando+i+1 ); sscanf( Comando+i+1, "%i", &i ); // sintassi sscanf: <buffer di lettura>, <formato>, <puntatore var.> Serial.print("i = (ricavato) "); Serial.println( i ); */ LenComando=0; return; void EseguiComando() // Avanti if( TipoMoto==1 ) if( TipoMotore == Unipolare ) Sequenza( "+", HIGH, LOW, LOW, LOW ) ; Sequenza( "+", LOW, HIGH, LOW, LOW ) ; Sequenza( "+", LOW, LOW, HIGH, LOW ) ; Sequenza( "+", LOW, LOW, LOW, HIGH ) ; Sequenza( "+", HIGH, LOW, HIGH, LOW ) ; Sequenza( "+", LOW, HIGH, LOW, HIGH ) ; return ; // Indietro if( TipoMoto==2 ) if( TipoMotore == Unipolare ) Sequenza( "-", HIGH, LOW, LOW, LOW ) ; Sequenza( "-", LOW, HIGH, LOW, LOW ) ; Sequenza( "-", LOW, LOW, HIGH, LOW ) ; Sequenza( "-", LOW, LOW, LOW, HIGH ) ; Sequenza( "-", HIGH, LOW, HIGH, LOW ) ; Sequenza( "-", LOW, HIGH, LOW, HIGH ) ; return ; // Stop if( TipoMoto==3 ) Sequenza( "+", LOW, LOW, LOW, LOW ) ; return ; // Un passo completo in avanti if( TipoMoto==4 ) if( TipoMotore == Unipolare ) Sequenza( "+", HIGH, LOW, LOW, LOW ) ; Sequenza( "+", LOW, HIGH, LOW, LOW ) ; Sequenza( "+", LOW, LOW, HIGH, LOW ) ; Sequenza( "+", LOW, LOW, LOW, HIGH ) ; Sequenza( "+", HIGH, LOW, HIGH, LOW ) ; Sequenza( "+", LOW, HIGH, LOW, HIGH ) ; return ; // Un passo completo indietro if( TipoMoto==5 ) if( TipoMotore == Unipolare ) Sequenza( "-", HIGH, LOW, LOW, LOW ) ; Sequenza( "-", LOW, HIGH, LOW, LOW ) ; Sequenza( "-", LOW, LOW, HIGH, LOW ) ; Sequenza( "-", LOW, LOW, LOW, HIGH ) ; Sequenza( "-", HIGH, LOW, HIGH, LOW ) ; Sequenza( "-", LOW, HIGH, LOW, HIGH ) ; return ;

// Esegue 1/4 di passo in avanti if( TipoMoto==6 && TipoMotore == Unipolare) A=digitalRead(Fase1); B=digitalRead(Fase2); C=digitalRead(Fase3); D=digitalRead(Fase4); if( (A B C D) == false ) Sequenza( "+", HIGH, LOW, LOW, LOW ) ; Sequenza( "+", D, A, B, C ) ; return ; // Esegue 1/4 di passo indietro if( TipoMoto==7 && TipoMotore == Unipolare) A=digitalRead(Fase4); B=digitalRead(Fase3); C=digitalRead(Fase2); D=digitalRead(Fase1); if( (A B C D) == false ) Sequenza( "-", LOW, LOW, LOW, HIGH ) ; Sequenza( "-", D, A, B, C ) ; return ; // Esegue 1/2 di passo avanti if( TipoMoto==8 && TipoMotore == Bipolare) A=digitalRead(Fase1); if( A == LOW ) Sequenza( "+", HIGH, LOW, HIGH, LOW ) ; Sequenza( "+", LOW, HIGH, LOW, HIGH ) ; return ; // Esegue 1/2 di passo indietro if( TipoMoto==9 && TipoMotore == Bipolare) D=digitalRead(Fase4); if( D == LOW ) Sequenza( "-", HIGH, LOW, HIGH, LOW ) ; Sequenza( "-", LOW, HIGH, LOW, HIGH ) ; return ; void Sequenza( char *Rotazione, bool X1, bool X2, bool X3, bool X4 ) if( *Rotazione == '+' ) digitalwrite( Fase1, X1 ) ; delay( Ritardo ) ; digitalwrite( Fase2, X2 ) ; delay( Ritardo ) ; digitalwrite( Fase3, X3 ) ; delay( Ritardo ) ; digitalwrite( Fase4, X4 ) ; delay( Ritardo ) ; return ; if( *Rotazione == '-' ) digitalwrite( Fase4, X1 ) ; delay( Ritardo ) ; digitalwrite( Fase3, X2 ) ; delay( Ritardo ) ; digitalwrite( Fase2, X3 ) ; delay( Ritardo ) ; digitalwrite( Fase1, X4 ) ; delay( Ritardo ) ; return ; void SalvaComando() strcpy( OldComando, Comando ); int TrovaCarattere( byte CodiceAscii )

for( int j=0 ; j<strlen( Comando ) ; j++) if( Comando[j] == CodiceAscii ) return j; return -1;