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.