J’aimerai s’il vous plait un peu d’aide pour finaliser un programme.
Le projet est de faire un suiveur avec un seul axe et deux photorésistances, pour un séchoir solaire (projet globalement peu complexe).
Le tout est monté sur un plateau à bille et entraîné par un petit moteur DC avec un réducteur.
Pour être très honnête, zéro connaissance en programmation et globalement en électronique.
J’ai pas mal cherché sur le sujet et trouvé des programmes que j’ai essayé d’adapter au mien, mais après compilation, j’ai quelques erreurs et je sèche par méconnaissance…..
D’avance merci
Emmanuel
les messages d'erreurs:
Arduino : 1.8.9 (Windows 7), Carte : "Arduino/Genuino Uno"
F:\Document\Solaire\prog\arduino_seichoir_final\arduino_seichoir_final.ino: In function 'void loop()':
arduino_seichoir_final:79:16: error: 'testeSecurite' was not declared in this scope
testeSecurite ();
^
arduino_seichoir_final:137:14: error: 'arretmoteur' was not declared in this scope
arretmoteur ();
^
arduino_seichoir_final:145:9: error: 'EstAz' was not declared in this scope
{EstAz ();}
^
arduino_seichoir_final:148:11: error: 'OuestAz' was not declared in this scope
{OuestAz ();}
^
arduino_seichoir_final:151:11: error: 'OuestAz' was not declared in this scope
{OuestAz ();}
^
arduino_seichoir_final:154:9: error: 'EstAz' was not declared in this scope
{EstAz ();}
^
arduino_seichoir_final:169:16: error: 'testeSecurite' was not declared in this scope
testeSecurite ();
^
arduino_seichoir_final:181:1: error: a function-definition is not allowed here before '{' token
{
^
arduino_seichoir_final:194:1: error: a function-definition is not allowed here before '{' token
{
^
exit status 1
'testeSecurite' was not declared in this scope
Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.
et le programme:
// attribution de la broche pour sens Azimute
int sensAz = 12;
// attribution des broches vitesse du moteur Azimute
int vitesseAz = 3; // broche PWM
// attribution des broches aux capteurs de lumière
int capteurEst = A0 ;
int capteurOuest = A1 ;
// declaration des variables sens de rotation
int Droite = 1;
int Gauche = 0;
// déclaration des variables de valeur des capteurs et controle
int valeurCapteurEst = 0;
int valeurCapteurOuest = 0;
// declaration des variables de controle pour le pleine lumiere
volatile float controleAz = 0 ;
int ecartAz =0;
// variables pour la fonction arret moteur
int arret1 = 0;
int led = A6; // declaration de la broche 4 pour allumer une led de controle arret moteur (digital PWM)
// déclaration de la variable lumière pour le teste de lumière mini utile au programme
int lumiere = 0 ;// variable pour lumiere mini
int Var = 0;
//.............................................................
//.............................................................
void setup() {
// put your setup code here, to run once:
// declaration des broches en sortie (PWM)
pinMode (sensAz,OUTPUT);
pinMode (vitesseAz,OUTPUT);
pinMode (led,OUTPUT);
// declaration des broches en entrée
pinMode (capteurEst,INPUT);
pinMode (capteurOuest,INPUT);
// instruction de communication avec le PC
Serial.begin (9600);
}
void loop() {
// put your main code here, to run repeatedly:
{
//prend la valeur des capteurs lumière
Serial.println ("ok ok ok debut de boucle ");
valeurCapteurEst = analogRead (capteurEst);
valeurCapteurOuest = analogRead (capteurOuest);
valeurCapteurEst = valeurCapteurEst + ecartAz;
// ajouter la constante 'ecart' si nécessaire après test
//donne à la variable lumière une moyenne à partir des capteurs Est et Ouest pour aprécier s'il y a assez de lumière avec une valeur donnée dans la boucle while
lumiere = ((valeurCapteurEst+valeurCapteurOuest)/2);
Serial.println ("Si la lumiere est inferieur a 200 le suiveur attend.");
Serial.print ( "La lumiere est egale a : " );
Serial.println ( lumiere );
//....................................test de securite.......................
testeSecurite ();
//.....................................................................................
Serial.println ("tourne en boucle tant que 'lumière' est < que 200 : valeur à ajuster " );
while (lumiere < 200) return;
// affiche les valeurs des capteurs de lumière
Serial.println ("La lumiere est suffisante pour chercher le soleil");
Serial.println ("Valeurs des capteurs de lumiere");
Serial.print ("Est- ");Serial.println(valeurCapteurEst);
Serial.print ("Ouest- ");Serial.println(valeurCapteurOuest);
//.............................................................................
// prend le valeur de l'ecart des deux cellule est/ouest
//.............................................................................
controleAz = (valeurCapteurEst - valeurCapteurOuest);
//.............................................................
// rend positif l'écart trouvé
//.............................................................
if (controleAz < 0)
controleAz = controleAz * -1;
}
{
//.............................................................
//verifie si les nombres sont positif sur pc
//.............................................................
Serial.println (" controle Azimute");
Serial.println (controleAz);
//..............................................................
// réinitialise les variables à 0 pour le controle pleine lumiere
//..............................................................
arret1 = 0;
Serial.println ("arret1");
Serial.println (arret1);
//.......................................................................................
//test la position du suiveur pour le plein soleil
//......................................................................................
if ( controleAz < 6 )
arret1 = 1;
Serial.println ("arret1");
Serial.println (arret1);
// moteur azimute à l' arret
}
{
//.................................................................
// si les cellules sont en pleine lumiere: arret par un delai modifiable ( 5 minutes ) led clignote
//..................................................................
if (arret1 == 3 )
arretmoteur ();
}
{
//................................................................................
// les lignes suivantes permettent de definir quel moteur doit tourner pour être en pleine lumière et dans quel sens
//................................................................................
if ((arret1 == 0) && ( valeurCapteurEst > valeurCapteurOuest ))
{EstAz ();}
if ((arret1 == 0) && ( valeurCapteurOuest > valeurCapteurEst ))
{OuestAz ();}
if ((arret1 == 2 )&& (valeurCapteurOuest > valeurCapteurEst ))
{OuestAz ();}
if ((arret1 == 2 )&& ( valeurCapteurEst > valeurCapteurOuest ))
{EstAz ();}
//....................................................................................
}
{
// ajuouter la valeur 'ecart' si nécessaire après test
// affichage pour controle de coherance permet de suivre l'evolution des valeurs des capteurs..............
valeurCapteurEst = analogRead (capteurEst);
valeurCapteurOuest = analogRead (capteurOuest);
Serial.print ("Est- ");Serial.println(valeurCapteurEst);
Serial.print ("Ouest- ");Serial.println(valeurCapteurOuest);
testeSecurite ();
Serial.println ("Je suis en pleine lumiere");
digitalWrite (led,HIGH);
delay (1000);
digitalWrite (led, LOW );
delay (1000);
Var ++ ;
}
void EstAz ()
{
// determination sens et vitesse moteur
testeSecurite ();
digitalWrite (sensAz,Gauche);
// ces deux variable détermine un sens dans le pont en H
analogWrite (vitesseAz,100);
// mise en route du moteur Azimute
Serial.println (" Le moteur 'Azimute' tourne vers l'Est");
delay ( 1000 ); // ajustable impaire
// arret moteur
analogWrite (vitesseAz, 0);
}
void OuestAz ()
{
// determination sens et vitesse moteur
testeSecurite ();
digitalWrite (sensAz,Droite);
// ces deux variable détermine un sens dans le pont en H
analogWrite (vitesseAz, 100);
// mise en route du moteur Azimute
Serial.println (" Le moteur 'Azimute' tourne vers l'Ouest");
delay (2000 );
// ajustable paire
// arret moteur
analogWrite (vitesseAz, 0);
}
}