Bonjours,
1er post pour moi. :
Débutant en programmation, j'apprends . j'ai potassé des pages de code et des livres depuis deux mois environ mais là, mes neurones commencent à souffrir et a mon grand désespoir, j'ai sérieusement besoin d'aide.
Mon projet: avec des imprimantes de récupération, je voudrais faire un jeu pour mon fils.
J'essaie (en vain pour le moment) de faire fonctionner deux moteur CC 5 volt en fonctionnement aléatoire.
1 moteur pour l'axe X:
temps de fonctionnement aléatoire, vitesse aléatoire, sens aléatoire.
1 moteur pour l'axe Y:
temps de fonctionnement aléatoire, vitesse aléatoire, sens aléatoire.
Pour chaque axe, il y aura un détecteur optique de fin de course qui inversera le sens de rotation du moteur.
Chaque fonction du sketch si dessous fonctionne indépendamment, mais le tout réunis, les moteur sont comme fou et je m'en arrache le peu de cheveux qu'il me reste...
Tout fonctionne bien jusque la première inversion de sens et puis ensuite ça dérape et au bout de quelques minutes, les moteurs ne tournent plus ou presque plus du tout. j'ai même un allumage des diodes de contrôle sans aucune rotation.
Je suis pas un as, mais j'ai l'impression que: soit j'ai un conflit avec les différents random que j'utilise, soit mes fonction ou commandes ne sont pas au bon endroit.
Merci de vos conseils
Thierry
/*
* Programme pour le fonctionnement aléatoires de deux moteurs CC.
*
* Les vitesses, les directions et les temps de fonctionnement de chaque moteurs
* est contrôlé par des fonctions indépendantes et aléatoires.
* Des fins de course optique inversent le sens de rotation pour chaque moteur.
*
* Matériels :
* 1 carte ARDUINO UNO
* 1 Shield MotorShield Deek-Robot
* 2 Moteurs CC 5v
*/
// --- Déclaration des constantes
const int MotorH = 3; // Déclaration de la broche PWM Moteur H
const int DirH = 12; // Déclaration de la broche de direction moteur H
const int MotorV = 11; // Déclaration de la broche PWM Moteur V
const int DirV = 13; // Déclaration de la broche de direction moteur V
// --- Déclaration des variables
boolean SensH;
boolean SensV;
unsigned long SpeedH;
unsigned long SpeedV;
unsigned long TempsH;
unsigned long TempsV;
unsigned long RandomHT;
unsigned long RandomHV;
unsigned long RandomVT;
unsigned long RandomVV;
// --- Fin de déclarations
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void setup() {
// --- Déclaration des E/S:
pinMode(MotorH, OUTPUT);// pin Moteur H en sortie
pinMode(DirH, OUTPUT);// pin direction Moteur H en sorti
pinMode(MotorV, OUTPUT);// pin Moteur H en sortie
pinMode(DirV, OUTPUT);// pin direction Moteur H en sorti
// --- Déclaration random des vitesses H & V
randomSeed (digitalRead (0)),
RandomHV = random(50, 255); // --- (H)
randomSeed (digitalRead (1)),
RandomVV = random(50, 255); // --- (V)
// --- Déclaration random des sens des moteur H & V
randomSeed (digitalRead (0)),
RandomHT = random(1000, 3000); // --- (H)
randomSeed (digitalRead (1)),
RandomVT = random(1000, 3000); // --- (V)
// --- Déclaration de vitesse de Liaison série pour affichage sur console
Serial.begin(9600); //
}
// --- Fin de Void Setup
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void loop() {
// --- Appel des fonctions de vitesse des moteurs (SPEEDH) H et (SPEEDV) V
SPEEDH ();
analogWrite (MotorH, RandomHV);
SPEEDV ();
analogWrite (MotorV, RandomVV);
// --- Appel des fonctions de temps des moteurs (TEMPSH) H et (TEMPSV) V
TEMPSH ();
TEMPSV ();
// --- Appel des fonctions de sens des moteurs (SENSH) H et (SENSV) V
SENSH ();
digitalWrite (DirH, SensH);
SENSV ();
digitalWrite (DirV, SensV);
// --- Impression sur moniteur série pour contrôle
Serial.print ("Vitesse H : ");
Serial.println (RandomHV);
Serial.print ("Vitesse V : ");
Serial.println (RandomVV);
Serial.print ("Temps H : ");
Serial.println (RandomHT);
Serial.print ("Temps V : ");
Serial.println (RandomVT);
Serial.print ("Sens H : ");
Serial.println (SensH);
Serial.print ("Sens V : ");
Serial.println (SensV);
}
// --- Fin de Void Loop
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// --- Début des fonctions
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int SPEEDH () // --- FONCTION SPEEDH --- Commande de la vitesse du moteur H par nombre aléatoire
{
unsigned long RandNumberHV = millis ();
unsigned long LastRandNumberHV;
RandomHV = random(0, 255);
if (RandNumberHV - LastRandNumberHV > RandomHV) {
LastRandNumberHV = RandNumberHV;
digitalWrite(RandomHV, ! digitalRead(RandomHV));
// --- Retour de la variable pour la vitesse du moteur H
return (RandomHV);
}
}
// --- Fin de la fonction SPEEDH
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int SPEEDV () // --- FONCTION SPEEDV --- Commande de la vitesse du moteur V par nombre aléatoire
{
unsigned long RandNumberVV = millis ();
unsigned long LastRandNumberVV;
RandomVV = random(0, 255);
if (RandNumberVV - LastRandNumberVV > RandomVV) {
LastRandNumberVV = RandNumberVV;
digitalWrite(RandomVV, ! digitalRead(RandomVV));
// --- Retour de la variable pour la vitesse du moteur V
return (RandomVV);
}
}
// --- Fin de la fonction SPEEDV
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int TEMPSH ()
{
unsigned long RandNumberHT = millis ();
unsigned long LastRandNumberHT;
RandomHT = random(0, 3000);
if (RandNumberHT - LastRandNumberHT > 1000) {
LastRandNumberHT = RandNumberHT;
digitalWrite(RandomHT, ! digitalRead(RandomHT));
// --- Retour de la variable pour le temps de fonctionnement du moteur H
return (RandomHT);
}
}
// --- Fin de la fonction TEMPSH
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int TEMPSV ()
{
unsigned long RandNumberVT = millis ();
unsigned long LastRandNumberVT;
RandomVT = random(0, 3000);
if (RandNumberVT - LastRandNumberVT > 1000) {
LastRandNumberVT = RandNumberVT;
digitalWrite(RandomVT, ! digitalRead(RandomVT));
// --- Retour de la variable pour le temps de fonctionnement du moteur V
return (RandomVT);
}
}
// --- Fin de la fonction TEMPSV
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int SENSH () {
unsigned long MillisH = millis();
unsigned long PreviousMillisH;
if (MillisH - PreviousMillisH > RandomHT) {
PreviousMillisH = MillisH;
if (SensH == LOW) {
SensH = HIGH;
} else {
SensH = LOW;
}
digitalWrite(SensH, ! digitalRead(SensH));
}
// --- Retour de la variable pour le sens de fonctionnement du moteur H
return (SensH);
}
// --- Fin de la fonction SENSH
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int SENSV () {
unsigned long MillisV = millis();
unsigned long PreviousMillisV;
if (MillisV - PreviousMillisV > RandomVT) {
PreviousMillisV = MillisV;
if (SensV == LOW) {
SensV = HIGH;
} else {
SensV = LOW;
}
digitalWrite(SensV, ! digitalRead(SensV));
}
// --- Retour de la variable pour le sens de fonctionnement du moteur V
return (SensV);
}
// --- Fin de la fonction SENSV
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// --- Fin des fonctions