Petit projet moteur

Bonjour à tous.
Nouveau sur le fofo, mais deja plein de questions. C'est encore bien souvent comme ça au début.
Je debute dans le monde arduino. Et forcément les premières difficultés.
Voici mon projet :
Relier 1 led et surtout un moteur à un l298 et tout commander par impulsion.
J'ai pour initier, 1 bouton poussoir.
J'aimerais qu'il donne les infos :
1 appui : allume la led et fait tourner le moteur
Nouvel appui : stoppe tout et éteint
3eme appui : allume la led et fait tourner en sens inverse
Nouvel appui : stoppe tout et éteint
Et c'est reparti dans l'autre sens
J'ai pour tout ça un arduino uno, 1 l298, 1 moteur pas à pas 4 fils et 1 led en alimentation la batterie moto.
J'ai pris des bribes de programmes pour l'idée principale :

// --- Que fait ce programme ? ---
//* Contrôle du sens de rotation d'un moteur CC à l'aide d'un bouton poussoir : 
// Un appui sur un BP inverse le sens de rotation du moteur. 
// Une led s'allume lors des rotations

// --- Circuit à réaliser ---

// Connecter  sur la broche 8 (configurée en entrée) un Bouton Poussoir connecté à la masse (0V)

// Connecter  sur la broche 2 (configurée en sortie) la broche ENA de l'interface moteur
// Connecter  sur la broche 3 (configurée en sortie) la broche IN1 de l'interface moteur
// Connecter  sur la broche 4 (configurée en sortie) la broche IN2 de l'interface moteur
// Connecter  sur la broche 5 (configurée en sortie) la broche ENB de l'interface moteur
// Connecter  sur la broche 6 (configurée en sortie) la broche IN3 de l'interface moteur
// Connecter  sur la broche 7 (configurée en sortie) la broche IN4 de l'interface moteur
// Connecter  sur la broche 9 (configurée en sortie) la LED


//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...

// --- Inclusion des librairies utilisées ---

// --- Déclaration des constantes ---
const int APPUI=0; // constante état du BP - appui sur niveau bas
const int PAS_APPUI=1; // constante état du BP - relâché sur niveau haut


// --- constantes des broches ---

const int ENA=2; //declaration constante de broche 
const int IN1=3; //declaration constante de broche 
const int IN2=4; //declaration constante de broche 
const int ENB=5; //declaration constante de broche 
const int IN3=6; //declaration constante de broche 
const int IN4=7; //declaration constante de broche 
const int BP=8; //declaration constante de broche 
const int LED=9; //declaration constante de broche 

// --- Déclaration des variables globales ---
int ETAT_BP=0; // variable témoin de l'état du BP

int compt=0; // variable pour comptage du nombre


// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---

//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage --- 


// ------- Broches en sortie -------  

pinMode(ENA, OUTPUT); //met la broche en sortie 
pinMode(ENB, OUTPUT); //met la broche en sortie 
pinMode(IN1, OUTPUT); //met la broche en sortie 
pinMode(IN2, OUTPUT); //met la broche en sortie 
pinMode(IN3, OUTPUT); //met la broche en sortie 
pinMode(IN4, OUTPUT); //met la broche en sortie 
pinMode(LED, OUTPUT); //met la broche en sortie 

// ------- Broches en entrée -------  

pinMode(BP, INPUT_PULLUP); //met la broche en entree



} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()

// --- ici instructions à exécuter par le programme principal --- 

//---- gestion des appuis sur Bouton poussoir --- 
if (digitalRead(BP)==APPUI) { // test état du BP

compt=compt+1; // incrémente la variable compt
if (compt==4) compt=0; // RAZ variable compt de 3=>0

if (compt==0){ 
 // moteur à l'arrêt 

int tps = 20;  //Délai en ms entre deux commandes de changement de pas (vitesse du moteur)
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
delay(tps);
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
delay(tps);
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
delay(tps);
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
delay(tps);  

digitalWrite(LED,LOW);
}
}

if (compt==1){ 
 // moteur en marche avant

// Un moteur Pas-à-pas se contrôle à l'aide de 4 battements
// Séquences AB   A-B   A-B-  AB-  ou séquence  AB   AB-   A-B-   A-B

int tps = 20;  //Délai en ms entre deux commandes de changement de pas (vitesse du moteur)
digitalWrite(IN1,LOW);  //0110  A-B
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
delay(tps);
digitalWrite(IN1,LOW);  //0101  A-B-
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
delay(tps);
digitalWrite(IN1,HIGH); //1001  AB-
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
delay(tps);
digitalWrite(IN1,HIGH);  //1010  AB
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
delay(tps);

digitalWrite(LED,HIGH);
}


if (compt==2){ 
 // moteur à l'arrêt 

int tps = 20;  //Délai en ms entre deux commandes de changement de pas (vitesse du moteur)
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
delay(tps);
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
delay(tps);
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
delay(tps);
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
delay(tps);  

digitalWrite(LED,LOW);
}


if (compt==3){ 
 // moteur en marche arriere

// Un moteur Pas-à-pas se contrôle à l'aide de 4 battements
// Séquences AB   A-B   A-B-  AB-  ou séquence  AB   AB-   A-B-   A-B

int tps = 20;  //Délai en ms entre deux commandes de changement de pas (vitesse du moteur)
digitalWrite(IN1,HIGH);  //1001  AB-
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
delay(tps);
digitalWrite(IN1,LOW);  //0101  A-B-
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
delay(tps);
digitalWrite(IN1,LOW); //0110  A-B
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
delay(tps);
digitalWrite(IN1,HIGH);  //1010  AB
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
delay(tps);  

digitalWrite(LED,HIGH);
}



delay(300); // pause anti-rebond entre 2 appuis

}


// fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

// --- Fin programme ---

Voici pour le software, pour le hardware j'attends un nouveau l298, le premier a eu un peu chaud
Si une bonne âme pouvait me guider ce serait génial.

aie...
stp met ton code entre balise [.code][/code.]
autrement, c'est illisible

bonjour,
et donc le problème est ? ? ?

Le problème est déjà de savoir si le programme peut donner quelque chose. si il semble viable est si il peut aboutir au résultat souhaité.

Par exemple je sais que la fonction de comptage des appuis ne semble pas juste

Après je passerai à la partie hardware quitte à faire une capture avec mon L298N flambé.

Pour avoir testé avant le drame, :-), la led s’éclaire en permanence et le moteur ne tourne pas.

et l'interrupteur semble inopérant

en gros le bide complet

Attention au L298 , c'est 2A max ! Vérifie bien si ton moteur n'est pas trop gourmand !!!

Le problème est déjà de savoir si le programme peut donner quelque chose. si il semble viable est si il peut aboutir au résultat souhaité.

il n"y a que toi pour le savoir, on ne sait pas ce que tu veux en faire.

Par exemple je sais que la fonction de comptage des appuis ne semble pas juste

CAD?

Pour avoir testé avant le drame, :-), la led s'éclaire en permanence et le moteur ne tourne pas.

quel drame?
comment est connecté ton bouton?

if (digitalRead(BP)==APPUI) { // test état du BP

se traduit par si appuie bouton = 0
ca ne serait pas HIGH ?

Fredericzim:
Attention au L298 , c'est 2A max ! Vérifie bien si ton moteur n'est pas trop gourmand !!!

Pas de soucis, c'est un mini moteur.

infobarquee:
il n"y a que toi pour le savoir, on ne sait pas ce que tu veux en faire.
CAD?

quel drame?
comment est connecté ton bouton?

if (digitalRead(BP)==APPUI) { // test état du BP

se traduit par si appuie bouton = 0
ca ne serait pas HIGH ?

Je souhaite faire tourner une poulie et savoir via la led si le moteur est en action
Mon bouton est un poussoir connecté à l'arduino sur le 8 et la terre.
Le drame : le décès par auto-combustion du 298 pour cause d'allim 12v avec le cavalier. Pas bon !
Pour le code "high " le fait d'appuyer devrait avoir tout de même une action ?

si tu faisais déjà la partie bouton seule?

const int BP=8; //declaration constante de broche 
void setup()   {
serial.begin(9600);
pinMode(BP, INPUT_PULLUP); //met la broche en entree
}
void loop(){
if (digitalRead(BP)==LOW) {
Serial.println("appuie");
}else{
Serial.println("rien");
}

infobarquee:
si tu faisais déjà la partie bouton seule?

const int BP=8; //declaration constante de broche 

void setup()  {
serial.begin(9600);
pinMode(BP, INPUT_PULLUP); //met la broche en entree
}
void loop(){
if (digitalRead(BP)==LOW) {
Serial.println("appuie");
}else{
Serial.println("rien");
}

Je vais l'intégrer merci.
Ça peut être une idée plus simple mais cela va retirer la possibilité de changer le sens ? Non?

avant de faire compliquer, il serait bien de prendre les bases et de tester module par module.
si ca fonctionne, tu rajoute la partie compteur, etc....

infobarquee:
avant de faire compliquer, il serait bien de prendre les bases et de tester module par module.
si ca fonctionne, tu rajoute la partie compteur, etc....

Oui c'est juste.
C'est ce que j'ai fait jusque là.
Je pense devoir reprendre à la base
En attendant mon l298n, je vais bricoler sur l'arduino : bouton, led...