Je suis un débutant de l'arduino et je voudrais vous demandez un petit code voila le principe :
Je dispose de un arduino, plusieurs puces L293D Motor et un DC Motor avec deux inter fin de courses
Ce que je voudrait faire :
Quand le moteur (en mode ouverture) fini par toucher le "Contact 1" je voudrais qu'il reparte dans l'autre sens jusqu’à toucher le 2 ieme contact et une fois la boucle terminée (Juste le faire une fois) je voudrais que le système se mette en arrêt. Et aussi un rajout de commande par bluetooth (je ferrais l'apli avec app inventor) que quand je dit par bluetooth avec mon app le message telle que "Activation" le système se déclenche a chaque fois que je envoie ce message.
Voila ou j'en suis :
const int moteur = 4;
const int bouton1 = 5;
const int bouton2 = 6;
int etatbouton1 = LOW;
int etatbouton2 = LOW;
void setup() {
pinMode (moteur, OUTPUT);
pinMode (etatbouton1, INPUT);
pinMode (etatbouton2, INPUT);
}
void loop() {
digitalWrite (moteur ,HIGH);
}
Merci beaucoup de votre aide !!
Cordialement un noob même pas câble d'inverser les polarités d'un moteur...
Je voudrais bien changer le monde mais ils ne veulent pas me donner le code source
Alors là t'es pas bien loin ! Déjà tu oublies dans ton setup de déclarer bouton1 et 2 en output ! Ensuite ton etatbouton1 et 2 sont cencés te stocker l'état de tes fins de courses, alors pour y arriver tu dois faire un : etatbouton1 = digitalRead ( bouton1);
Ensuite avec des if, tu peux utiliser l'état de ton fin de course pour créer tes actions , à savoir actionner ton moteur ( ce que tu fais dans ta loop) , sauf que ton moteur va démarrer et ne s'arrêtera jamais . Il ne faut pas non plus oublier de gérer le sens de ton moteur !
Je pense que ce que Fredericzim a voulu dire c'est que ArduiFolie utilise la variable 'etatbouton1' au lieu du numéro du bouton 'bouton1' dans le pinMode().
Ton pinmode ( etatbouton) ne sert à rien . Ensuite ton digitalRead doit se trouver dans ta loop .
Tu peux également gérer tes fins de course avec des boolean .
Tu dois également tenir compte du fait que ton moteur est en ouverture ou en fermeture ( si ouverture : état moteur =1, si fermeture état moteur = 2 , si arrêt état moteur = 0.)
Pour finir avec des conditions , tu arrivera à ce que tu veux
Il faut faire la différence entre
etat_moteur = 1
et
etat_moteur == 1
Dans le premier cas on force etat_moteur a prendre la valeur 1.
Dans le deuxieme cas on fait une comparaison : on cherche à savoir si etat_moteur possède ou non la valeur 1
Le résultat de la comparaison sera un booléen c'est à dire true ou false.
Si c'est "true" le code contenu dans le if sera éxécuté, si c'est faux il sera ignoré.
Rebonjour tout le monde apres des heures de boulot voici le code presque finish ! (;
int pinboutton = 2; // bouton 1
int pinboutton2 = 5; // bouton 2
int moteur1Pin1 = 3; // pin 2 sur L293D
int moteur1Pin2 = 4; // pin 7 sur L293D
int enablePin = 9; // pin 1 sur L293D
void setup() {
// mettre le bouton en INPUT
pinMode(pinboutton, INPUT);
pinMode(pinboutton2, INPUT);
// mettre les autres pins en OUTPUT
pinMode(moteur1Pin1, OUTPUT);
pinMode(moteur1Pin2, OUTPUT);
pinMode(enablePin, OUTPUT);
// mettre enablePin en HIGH
digitalWrite(enablePin, HIGH);
}
void loop() {
// Si le bouton1 est pressé le moteur va tourner dans un sens
if (digitalRead(pinboutton) == HIGH) {
digitalWrite(moteur1Pin1, LOW); // mettre le pin 2 en LOW
delay(2500);
digitalWrite(moteur1Pin2, HIGH); // mettre le pin 2 en HIGH
delay(2500);
}
// Si le bouton2 est presser il tourne dans l'autre sens
if (digitalRead(pinboutton2) == HIGH) {
digitalWrite(moteur1Pin1, HIGH); // mettre le pin 2 en HIGH
delay(2500);
digitalWrite(moteur1Pin2, LOW); // mettre le pin 2 en LOW
delay(2500);
}
}
Donc je voulais savoir comment faire pour que le code qui se situe dans la loop s'execute qu'une fois : que si j'envoie (par bluetooth) "Ouvrir".
Donc cela implique de integrer le bluetooth dans le code. Si vous avez des idées, des codes a me proposer n'hesiter pas !
Merci beaucoup !
int pinboutton = 2; // bouton 1
int pinboutton2 = 5; // bouton 2
int moteur1Pin1 = 3; // pin 2 sur L293D
int moteur1Pin2 = 4; // pin 7 sur L293D
int enablePin = 9; // pin 1 sur L293D
char val;
void setup() {
// mettre le bouton en INPUT
pinMode(pinboutton, INPUT);
pinMode(pinboutton2, INPUT);
// mettre les autres pins en OUTPUT
pinMode(moteur1Pin1, OUTPUT);
pinMode(moteur1Pin2, OUTPUT);
pinMode(enablePin, OUTPUT);
// mettre enablePin en HIGH
digitalWrite(enablePin, HIGH);
Serial.begin(115200); // start serial communication at 115200bps
}
void loop() {
if( Serial.available() ) // if data is available to read
{;}
val = Serial.read(); // read it and store it in 'val'
if( val == '0' )
Serial.println("En cours...");
// Si le bouton1 est pressé le moteur va tourner dans un sens
if (digitalRead(pinboutton) == HIGH) {
digitalWrite(moteur1Pin1, LOW); // mettre le pin 2 en LOW
delay(2500);
digitalWrite(moteur1Pin2, HIGH); // mettre le pin 2 en HIGH
delay(2500);
}
// Si le bouton2 est presser il tourne dans l'autre sens
if (digitalRead(pinboutton2) == HIGH) {
digitalWrite(moteur1Pin1, HIGH); // mettre le pin 2 en HIGH
delay(2500);
digitalWrite(moteur1Pin2, LOW); // mettre le pin 2 en LOW
delay(2500);
}
}
pour l'instant il n'y a pas d'erreur reste que a tester...^^
Bon cette fois si il est totalement finish le voici :
// Wifi hack Livebox V.3
// By TheValentin61
// OPEN SOURCE !
int pinboutton = 2; // bouton 1
int moteur1Pin1 = 3; // pin 2 sur L293D
int moteur1Pin2 = 4; // pin 7 sur L293D
int pinboutton2 = 5; // bouton 2
int enablePin = 9; // pin 1 sur L293D
char val;
void setup() {
// mettre le bouton en INPUT
pinMode(pinboutton, INPUT);
pinMode(pinboutton2, INPUT);
// mettre les autres pins en OUTPUT
pinMode(moteur1Pin1, OUTPUT);
pinMode(moteur1Pin2, OUTPUT);
pinMode(enablePin, OUTPUT);
// mettre enablePin en HIGH
digitalWrite(enablePin, HIGH);
// Led
pinMode(13, OUTPUT); // Led "ATTENTE"
pinMode(6, OUTPUT); // Led "FIN PROCESSUS"
pinMode(7, OUTPUT); // Led "DEBUT PROCESSUS"
pinMode(8, OUTPUT); // Led "ERREUR"
// Communication
Serial.begin(115200); // Commencer la communication a 115200 baud
}
void loop() {
// Led d'attente...
{
digitalWrite(13, HIGH);
delay(1000); // Attendre pendant une seconde
digitalWrite(13, LOW);
delay(1000); // Attendre pendant une seconde
}
if( Serial.available() ) // Si le data est sûr read
{;}
val = Serial.read(); // Lire et stocker dans 'val'
if( val == 'o' )
Serial.println("En cours..."); // Message de retour quand il recoi "ouvrir"
digitalWrite(7, HIGH); //Led commencement du processus
delay(3000); // Attendre pendant une seconde
digitalWrite(7, LOW);
delay(3000);
// Si le bouton1 est pressé le moteur va tourner dans un sens
if (digitalRead(pinboutton) == HIGH) {
digitalWrite(moteur1Pin1, LOW); // mettre le pin 2 en LOW
delay(2500);
digitalWrite(moteur1Pin2, HIGH); // mettre le pin 2 en HIGH
delay(2500);
}
// Si le bouton2 est presser il tourne dans l'autre sens
if (digitalRead(pinboutton2) == HIGH) {
digitalWrite(moteur1Pin1, HIGH); // mettre le pin 2 en HIGH
delay(2500);
digitalWrite(moteur1Pin2, LOW); // mettre le pin 2 en LOW
delay(2500);
digitalWrite(6, HIGH); //Led processus terminé "FIN"
delay(3000); // Attendre pendant une seconde
digitalWrite(6, LOW);
delay(3000);
}
{
if( Serial.available() ) // Si le data est sûr read
{;}
val = Serial.read(); // Lire et stocker dans 'val'
if( val == '0' )
Serial.println("Commande inconnue..."); // Message de retour quand il recoi "un mot autre que 1"
digitalWrite(8, HIGH);
delay(1000); // Attendre pendant une seconde
digitalWrite(8, LOW);
delay(1000); // Attendre pendant une seconde
}
}
//fin du programme
Je ne l'ai pas encore test mais si vous voyez des erreurs dite le moi !
merci !!
Je ne l'ai pas encore test mais si vous voyez des erreurs dite le moi !
merci !!
des erreurs dans quoi?
ca compile?
teste le avant de demander s'il y a des erreurs, c'est aussi comme cela que l'on apprend.
on a pas forcément le matériel sous la main pour tester, ni le temps de le faire pour toi