motorizziamo!

Non Gastronomia
Rispondi
Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

motorizziamo!

Messaggio da ale » 13 gen 2013, 18:04

ho fatto il primo piccolo passo per il controllo di un motore da parte del raspberry!!

http://www.youtube.com/watch?v=EBrrVf_Zjtk

adesso vediamo come si utilizza il driver :)
E pluribus unum

Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Re: motorizziamo!

Messaggio da ale » 15 gen 2013, 21:16

questo è il codice attuale.
l'idea è di usare la successione di bit su 4 pin del GPIO per far ruotare il motore.
la velocità viene decisa dal delay.
il pin PHASE1 e 2 del L6219 che cosa fanno? se servono anche loro per invertire il senso di marcia come credo devo portarli fuori, settarli all'inizio o su qualche evento hardware o software.
basteranno 4 pin per far ruotare il motore? leggendo il datasheet mi pare di capire che questo controller supporta lo step, l'half step e il micro step e si passa da una modalità all'altra usando 8 pin per ognuna della 4 fasi del motore.
11-00-00-00
00-11-00-00
ecc..

01-00-00-00
00-01-00-00
ecc...

e così via.
ma magari interpreto male.
devo studiare. questo controller è mega potente! devo trovare una fonte di alimentazione! :)

Codice: Seleziona tutto

#include <stdio.h>
#include <bcm2835.h>

int main(int argc, char **argv)
{
int i, parziale, num_giri, fine, ritardo;
	if(argc!=3){
		printf("sintassi errata!\ntelescopio numero_cicli lunghezza_ciclo\nnumero_cicli: numero di cicli dei 4 bit\nlunghezza_ciclo: ritardo in millisecondi tra un ciclo e l'altro\n");
		return 1;
		}
		
	fine=atoi(argv[1])*4;
	ritardo=atoi(argv[2]);
	
    if (!bcm2835_init()){
    	printf("Errore inizializzazione bcm2835\n");
    	return 1;
    	}
    	
    bcm2835_gpio_fsel(RPI_GPIO_P1_15, BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_fsel(RPI_GPIO_P1_19, BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_fsel(RPI_GPIO_P1_21, BCM2835_GPIO_FSEL_OUTP);
    bcm2835_gpio_fsel(RPI_GPIO_P1_23, BCM2835_GPIO_FSEL_OUTP);

    bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_21, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);

	i=0;
	parziale=0;
	num_giri=0;
 for( i = 0; i < fine; i++ )
    {
    	parziale++;
    	switch(parziale)
    	{
    		case 1:	
    		    bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
   			 	bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    			bcm2835_gpio_write(RPI_GPIO_P1_21, LOW);
    			bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    			break;
    		case 2:	
    		    bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
   			 	bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_21, LOW);
    			bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    			break;
    		case 3:	
    		    bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
   			 	bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    			bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    			break;
    		case 4:	
    		    bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
   			 	bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    			bcm2835_gpio_write(RPI_GPIO_P1_21, LOW);
    			bcm2835_gpio_write(RPI_GPIO_P1_23, HIGH);
    			
    			num_giri++;
    			printf("giri: %d\n",num_giri);
    			parziale=0;
    			break;
    	}
        delay(ritardo);
    }
    
    bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_21, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    return 0;
}
dopo di che anche gli utenti normali potranno eseguirlo senza dover sudare :)

serve questa libreria naturalmente!
bisogna compilarlo con:
gcc -o nome_eseguibile nome_sorgente.c -l bcm2835


per farlo eseguire agli utenti normali, per via di problemi di accesso da parte della libreria a /dev/mem, bisogna fare come root:

chown root:root nome_eseguibile
chmod +s nome_eseguibile
E pluribus unum

Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Re: motorizziamo!

Messaggio da ale » 21 lug 2013, 12:39

devo continuare il progetto.
questo spiega più o meno come fare il circuitino.
l'unica cosa, come mai usa 6 pin dalla parallela? :)
ero convinto che ne bastassero 4!!

http://telin.ugent.be/~ps/stepper/
E pluribus unum

Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Re: motorizziamo!

Messaggio da ale » 21 lug 2013, 12:51

qui pare che si debbano mandare 4 bit al controller:

http://www.mikroe.com/forum/viewtopic.php?f=97&t=51446
E pluribus unum

Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Re: motorizziamo!

Messaggio da ale » 05 ago 2013, 12:24

ecco la versione aggiornata del programma che dovrebbe fare gli half step:

Codice: Seleziona tutto

#include <stdio.h>
#include <ctype.h>
#include <bcm2835.h>

int main(int argc, char **argv)
{
int i, parziale, num_giri, fine, ritardo;
	if(argc!=3){
		printf("sintassi errata!\ntelescopio numero_cicli lunghezza_ciclo\nnumero_cicli: numero di cicli dei 4 bit\nlunghezza_ciclo: ritardo in millisecondi tra un ciclo e l'altro\n");
		return 1;
		}
		
	fine=atoi(argv[1])*4;
	ritardo=atoi(argv[2]);
	
    if (!bcm2835_init()){
    	printf("Errore inizializzazione bcm2835\n");
    	return 1;
    	}
    	
    bcm2835_gpio_fsel(RPI_GPIO_P1_15, BCM2835_GPIO_FSEL_OUTP); //PHASE 1
    bcm2835_gpio_fsel(RPI_GPIO_P1_19, BCM2835_GPIO_FSEL_OUTP); //PHASE 2
    bcm2835_gpio_fsel(RPI_GPIO_P1_21, BCM2835_GPIO_FSEL_OUTP); //I01
    bcm2835_gpio_fsel(RPI_GPIO_P1_23, BCM2835_GPIO_FSEL_OUTP); //I11
    bcm2835_gpio_fsel(RPI_GPIO_P1_22, BCM2835_GPIO_FSEL_OUTP); //I02
    bcm2835_gpio_fsel(RPI_GPIO_P1_24, BCM2835_GPIO_FSEL_OUTP); //I12

    bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_21, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_22, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_24, LOW);

	i=0;
	parziale=0;
	num_giri=0;
 for( i = 0; i < fine; i++ )
    {
    	parziale++;
    	switch(parziale)
    	{
    		case 1:	
    			//fasi
    		    bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    		    bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);

    			bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_23, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_22, LOW);
    			bcm2835_gpio_write(RPI_GPIO_P1_24, HIGH);
    			
    			break;
    		case 2:	
    			//fasi
    		    bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
    		    bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
    		    
    			bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    			bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_24, LOW);
    			break;
    		case 3:	
    			//fasi
    			bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
    		    bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
    		    
    			bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    			bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_24, HIGH);
    			break;
    		case 4:	
    			//fasi
    			bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
    		    bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    		    
    			bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    			bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_24, LOW);
    			break;
    		case 5:	
    			//fasi
    		    bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
    		    bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);

    			bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_23, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_24, LOW);
    			
    			break;
    		case 6:	
    			//fasi
    		    bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    		    bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    		    
    			bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    			bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_24, LOW);
    			break;
    		case 7:	
    			//fasi
    			bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    		    bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    		    
    			bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    			bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_24, HIGH);
    			break;
    		case 8:	
    			//fasi
    			bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    		    bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
    		    
    			bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    			bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    			bcm2835_gpio_write(RPI_GPIO_P1_24, LOW);
    			
    			num_giri++;
    			printf("giri: %d\n",num_giri);
    			parziale=0;
    			break;
    	}
        delay(ritardo);
    }
    
    bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_21, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_22, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_24, LOW);
    return 0;
}
appena riesco provo ad accenderlo e vedere se va :)
E pluribus unum

Avatar utente
Alì Baobab
GranGianGnomo
Messaggi: 2389
Iscritto il: 04 ott 2005, 16:41
Località: Ripalta Guerina

Re: motorizziamo!

Messaggio da Alì Baobab » 05 ago 2013, 21:10

esplode :mrgreen:

Avatar utente
gdeber
GranGianGnomo
Messaggi: 1547
Iscritto il: 13 set 2001, 10:40
Località: Rivolta d'Adda
Contatta:

Re: motorizziamo!

Messaggio da gdeber » 06 ago 2013, 08:34

oppure si incendia
***L'assembler è alla base dell'universo®***
http://www.mecheros.it

Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Re: motorizziamo!

Messaggio da ale » 06 ago 2013, 10:56

in realtà non fa niente di niente :(
lo sto alimentando a 12V, non ho trasformatori a 24V.
ho scritto a quelli della Minebea Motor, produttori del motore.
sono gentilissimi! mi hanno detto che anche a 12V dovrebbe dare qualche segno di vita, tipo tentare di girare o girare a vuoto.
devo controllare meglio il circuito!
E pluribus unum

Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Re: motorizziamo!

Messaggio da ale » 06 ago 2013, 16:38

niente.
nemmeno con alimentatore a 24V.
non da segni di vita.
qualcuno sa come potrebbe funzionare? qualcuno sa cosa devono valere i 6 input del L6219??
non ho trovato ancora un sito con scritto chiaramente cosa assegnare ad ogni input del chip.
I01, I02, I11, I12, Phase1 e Phase2!!
ma con tutte le prove che ho fatto dubito che sia quello il problema.
non tenta nemmeno di muoversi appena appena!!
E pluribus unum

Avatar utente
Alì Baobab
GranGianGnomo
Messaggi: 2389
Iscritto il: 04 ott 2005, 16:41
Località: Ripalta Guerina

Re: motorizziamo!

Messaggio da Alì Baobab » 06 ago 2013, 17:42

ALIMENTALO DIRETTAMENTE A 400V...... PER ME QUALCOSA FA..... :twisted:

Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Re: motorizziamo!

Messaggio da ale » 06 ago 2013, 18:10

questo pare avere le idee chiare:
http://ifev38g3.wordpress.com/2013/05/2 ... o-primera/

i vari I controllano la potenza, nessuna, 1/3, 2/3, massima.
le fasi ruotando determinano la rotazione del motore e il verso.
comunque non da segni di vita... devo provare un altro motore a questo punto.
oppure sarebbe utile un oscilloscopio :)
E pluribus unum

Avatar utente
ale
Mac
Messaggi: 6797
Iscritto il: 27 apr 2001, 20:31
Località: Romanengo
Contatta:

Re: motorizziamo!

Messaggio da ale » 19 nov 2016, 12:41

per completezza, i programmi funzionavano, era un problema di masse!

full step:

Codice: Seleziona tutto

#include <stdio.h>
#include <ctype.h>
#include <bcm2835.h>

int main(int argc, char **argv)
{
int i, parziale, num_giri, fine, ritardo,accel;
char verso;

	if(argc!=4){
		printf("sintassi errata!\ntelescopio numero_cicli lunghezza_ciclo\nnumero_cicli: numero di cicli dei 4 bit\nlunghezza_ciclo: ritardo in millisecondi tra un ciclo e l'altro\nverso\n");
		return 1;
		}
		
	fine=atoi(argv[1])*4;
	ritardo=atoi(argv[2]);
	verso=argv[3][0];
	
    if (!bcm2835_init()){
    	printf("Errore inizializzazione bcm2835\n");
    	return 1;
    	}
    	
    bcm2835_gpio_fsel(RPI_GPIO_P1_15, BCM2835_GPIO_FSEL_OUTP); //PHASE 1
    bcm2835_gpio_fsel(RPI_GPIO_P1_19, BCM2835_GPIO_FSEL_OUTP); //PHASE 2
    bcm2835_gpio_fsel(RPI_GPIO_P1_21, BCM2835_GPIO_FSEL_OUTP); //I01
    bcm2835_gpio_fsel(RPI_GPIO_P1_22, BCM2835_GPIO_FSEL_OUTP); //I02
    bcm2835_gpio_fsel(RPI_GPIO_P1_23, BCM2835_GPIO_FSEL_OUTP); //I11
    bcm2835_gpio_fsel(RPI_GPIO_P1_18, BCM2835_GPIO_FSEL_OUTP); //I12

    bcm2835_gpio_write(RPI_GPIO_P1_15, LOW); //PHASE 1
    bcm2835_gpio_write(RPI_GPIO_P1_19, LOW); //PHASE 2
    
    bcm2835_gpio_write(RPI_GPIO_P1_21, LOW);//I01
    bcm2835_gpio_write(RPI_GPIO_P1_22, LOW);//I02
    bcm2835_gpio_write(RPI_GPIO_P1_23, HIGH);//I11
    bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);//I12

	i=0;
	parziale=0;
	num_giri=0;
	accel=0;
 for( i = 0; i < fine; i++ )
    {
    	parziale++;
    	switch(parziale)
    	{
    		case 1:	
    			if(verso=='o'){
    				bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);//PHASE 1
    				bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);//PHASE 2
    			}
    			else
    			{
    			    bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);//PHASE 1
    				bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);//PHASE 2
    			}
    			break;
    		case 2:	
    		    if(verso=='o'){
    				bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);//PHASE 1
    				bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);//PHASE 2
    			}
    			else
    			{
    			    bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);//PHASE 1
    				bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);//PHASE 2
    			}
    			break;
    		case 3:	
    			if(verso=='o'){
    				bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);//PHASE 1
    				bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);//PHASE 2
    			}
    			else
    			{
    			    bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);//PHASE 1
    				bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);//PHASE 2
    			}
    			break;
    		case 4:	
    			if(verso=='o'){
    				bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);//PHASE 1
    				bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);//PHASE 2
    			}
    			else
    			{
    			    bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);//PHASE 1
    				bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);//PHASE 2
    			}
    			num_giri++;
    			printf("giri: %d, ritardo: %d usec.\n",num_giri,ritardo);
    			parziale=0;
    			break;
    	}
    	//accel++;
    	//if (accel==5){
    	//	accel=0;
    	//	if (ritardo>800){
    	//		ritardo--;
    	//	}	
    	//}
    	usleep(ritardo);
    }
    
    bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    bcm2835_gpio_write(RPI_GPIO_P1_23, HIGH);
    bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);
    
    return 0;
}
half step:

Codice: Seleziona tutto

#include <stdio.h>
#include <ctype.h>
#include <bcm2835.h>

int main(int argc, char **argv)
{
int i, parziale, num_giri, fine, ritardo;
char verso;
	if(argc!=4){
		printf("sintassi errata!\ntelescopio numero_cicli lunghezza_ciclo\nnumero_cicli: numero di cicli dei 4 bit\nlunghezza_ciclo: ritardo in microsecondi tra un ciclo e l'altro\nverso di rotazione (a-antiorario, o-orario)\n");
		return 1;
		}
		
	fine=atoi(argv[1])*8;
	ritardo=atoi(argv[2]);
	verso=argv[3][0];
	
    if (!bcm2835_init()){
    	printf("Errore inizializzazione bcm2835\n");
    	return 1;
    	}
    	
    bcm2835_gpio_fsel(RPI_GPIO_P1_15, BCM2835_GPIO_FSEL_OUTP); //PHASE 1
    bcm2835_gpio_fsel(RPI_GPIO_P1_19, BCM2835_GPIO_FSEL_OUTP); //PHASE 2
    bcm2835_gpio_fsel(RPI_GPIO_P1_21, BCM2835_GPIO_FSEL_OUTP); //I01
    bcm2835_gpio_fsel(RPI_GPIO_P1_23, BCM2835_GPIO_FSEL_OUTP); //I11
    bcm2835_gpio_fsel(RPI_GPIO_P1_22, BCM2835_GPIO_FSEL_OUTP); //I02
    bcm2835_gpio_fsel(RPI_GPIO_P1_18, BCM2835_GPIO_FSEL_OUTP); //I12
    
    //bcm2835_gpio_fsel(RPI_GPIO_P1_11, BCM2835_GPIO_FSEL_INPT); //Encoder

    bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_21, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_22, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);

	i=0;
	parziale=0;
	num_giri=0;
 for( i = 0; i < fine; i++ )
    {
    	parziale++;
    	switch(parziale)
    	{
    		case 1:	
    			//fasi
    			if (verso=='a'){
    		    	bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, LOW);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);
				}
				else
				{
    				bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
				}
    			
    			break;
    		case 2:	
    			//fasi
    			if (verso=='a'){
    		    	bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
    		    }
    		    else
				{
    				bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);
				}

    			break;
    		case 3:	
    			//fasi
    			if (verso=='a'){
    				bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);
    		    }
    		    else
				{
    		    	bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
				}
				

    			break;
    		case 4:	
    			//fasi
    			if (verso=='a'){
    				bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
    		    }
    		    else
				{
    		    	bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
				}
				

    			break;
    		case 5:	
    			//fasi
    			if (verso=='a'){
    		    	bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
    		    }
				else
				{
    				bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
				}
				

    			
    			break;
    		case 6:	
    			//fasi
    			if (verso=='a'){
    		    	bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
    		    }
    		    else
				{
    				bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);
				}
				

    			break;
    		case 7:	
    			//fasi
    			if (verso=='a'){
    				bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);
    		    }
    		    else
				{
    		    	bcm2835_gpio_write(RPI_GPIO_P1_15, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
				}
				

    			break;
    		case 8:	
    			//fasi
    			if (verso=='a'){
    				bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, LOW);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, LOW);
    		    }
    		    else
				{
    		    	bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
    		    	bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_23, HIGH);
    				bcm2835_gpio_write(RPI_GPIO_P1_22, LOW);
    				bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);
				}
				

    			
    			num_giri++;
    			printf("giri: %d\n",num_giri);
    			parziale=0;
    			break;
    	}
        usleep(ritardo);
    }
    
    bcm2835_gpio_write(RPI_GPIO_P1_15, LOW);
    bcm2835_gpio_write(RPI_GPIO_P1_19, HIGH);
    bcm2835_gpio_write(RPI_GPIO_P1_21, HIGH);
    bcm2835_gpio_write(RPI_GPIO_P1_23, HIGH);
    bcm2835_gpio_write(RPI_GPIO_P1_22, HIGH);
    bcm2835_gpio_write(RPI_GPIO_P1_18, HIGH);
    
    /*
    while(1)
    {
        if(bcm2835_gpio_lev(RPI_GPIO_P1_11))
        {
            printf("The button has been pressed\n");
        }

       while(bcm2835_gpio_lev(RPI_GPIO_P1_11)){}
    }
    */
    return 0;
}
giusto per gli archivi :)
E pluribus unum

Rispondi