Bonjour Artouste,
ci-dessous une ébauche de prog mais je n'arrive pas à faire valider la position capteur pour faire stopper le moteur.
j'ai déja fais plusieurs test et rien pourtant quand le N°voie correspond à la valeur du tableau rien!!!
/*
* Controle du moteur de la plaque tournante
*
* En utilisant une sortie PWM pour le moteur sur la broche 9
* En utilisant une sortie pour basculer le relais pour l'inversion de sens du moteur sur la broche 13
*
* En utilisant une entrée analogique pour le capteur de position sur la broche (A0)
*
* En utilisant un clavier numérique matriciel XY 3x4
* Connecter sur la broche 3 la colonne 3 du clavier
* Connecter sur la broche 4 la colonne 2 du clavier
* Connecter sur la broche 5 la colonne 1 du clavier
*
* Connecter sur la broche 16 (A2) la ligne 4 du clavier
* Connecter sur la broche 17 (A3) la ligne 3 du clavier
* Connecter sur la broche 18 (A4) la ligne 2 du clavier
* Connecter sur la broche 19 (A5) la ligne 1 du clavier
*/
//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...
// --- Inclusion des librairies utilisées ---
#include <Keypad.h> // inclusion de la librairie pour clavier matriciel
//--- Constantes utilisées avec le clavier 3x4
const byte LIGNES = 4; // 4 lignes
const byte COLONNES = 3; //3 colonnes
// --- constantes des broches ---
const int C3=3; //declaration constante de broche
const int C2=4; //declaration constante de broche
const int C1=5; //declaration constante de broche
const int L4=16; //declaration constante de broche
const int L3=17; //declaration constante de broche
const int L2=18; //declaration constante de broche
const int L1=19; //declaration constante de broche
int pwm = 9; // pin controlant le moteur (PWM pin)
int ledPin = 13; // pin inversion de sens du moteur
int sensorPin = A0; // pin acquisition capteur de position
// --- Déclaration des variables globales ---
word sensorValue = 0; // variable du capteur de position
byte nv=18; //nombre de voies/2
byte act=0; //position actuelle
byte fut=0; //position future
int dif=0; //ecart entre position fut et act
byte PasP=0;
byte PasN=0;
boolean sens;
int P=0;
int TPV = 50; //variable tres petite vitesse PWM
int PV = 100; //variable petite vitesse PWM
int V = 150; //variable vitesse PWM
word sensor[ 36 ] = {0,28,56,84,112,140,168,196,224,256,280,308,336,364,392,420,448,476,512,540,568,596,624,652,680,706,734,768,796,824,852,880,908,936,964,992};
//--- Définition des touches
char touches[LIGNES][COLONNES] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
// tableaux de lignes et colonnes
byte BrochesLignes[LIGNES] = {
L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
byte BrochesColonnes[COLONNES] = {
C1, C2, C3}; //connexions utilisées pour les broches de colonnes du clavier
char touche; // variable de stockage valeur touche appuyée
unsigned int valeur; // variable pour valeur saisie
// création d'un objet keypad = initialisation clavier
Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
// les broches de lignes sont automatiquement configurées en ENTREE avec pullup interne activé
// les broches de colonnes sont automatiquement configurées en SORTIE
//**************** 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()
pinMode(pwm, OUTPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
} // 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()
valeur=SAISIE_uINT(); // appel de la fonction pour saisie valeur - # stoppe saisie
fut=valeur;
dif=fut-act;
sens=true; // sens par défaut pour les conditions qui ne répondent pas aux IF
if (dif > nv)
{
sens=false;
}
if (dif > -nv && dif < 0)
{
sens=false;
}
digitalWrite(ledPin, sens);
P = fut - 1;
//*******************************************************************
//************************** sens positif ***************************
//*******************************************************************
if (sens == true)
{
PasP = abs(fut - act);
//************************** PasP <= 4 ***************************
if (PasP <= 4)
{
do
{
sensorValue = analogRead(sensorPin);
analogWrite( pwm, TPV);
Serial.println(sensorValue);
Serial.println(sensor[P]);
if (sensorValue == sensor[P])
{
analogWrite( pwm, 0);
}
}while( pwm != 0);
}
//*******************************************************************
//************************** sens négatif ***************************
//*******************************************************************
if (sens == false)
{
PasN = abs(act - fut);
//************************** PasP <= 4 ***************************
if (PasN <= 4)
{
do
{
sensorValue = analogRead(sensorPin);
analogWrite( pwm, TPV);
Serial.println(sensorValue);
Serial.println(sensor[P]);
if (sensorValue == sensor[P])
{
analogWrite( pwm, 0);
}
}while( pwm != 0);
}
}
}
//************************** bientot fin****************************
act=valeur;
}
// fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************
// ////////////////////////// FONCTIONS DE GESTION DES INTERRUPTIONS ////////////////////
// ////////////////////////// AUTRES FONCTIONS DU PROGRAMME ////////////////////
unsigned int SAISIE_uINT (){ // fonction qui renvoie une valeur unsignedint
//---- variables locales utilisées dans la fonction
unsigned char saisie_int[8]={
0,0,0,0,0,0,0,0 }; // crée un tableau de variables char pour saisir valeur
unsigned char compt_touche_int; // variable de comptage du nombre de touches saisies
unsigned long nombre_saisi_int; // variable de calcul du nombre saisi
unsigned char touche_int; // variable locale pour valeur touche appuyée de 0 à 15
//---- initialisation des variables utilisées ----
compt_touche_int=0; // aucune touche saisie au démarrage
nombre_saisi_int=0; // initialise la variable
//------ gestion appui touche sur clavier
while (compt_touche_int<2) { // tant que pas appuis maxi = 2 pour int
touche_int= clavier.getKey(); // lecture de la touche appuyée
if (touche_int!= NO_KEY){ // si une touche a été frappée -- gestion de la touche appuyée
if (touche_int=='#') break; // sort du while si appui sur #
for (byte i=0;i<LIGNES;i++) {
for (byte j=0; j<COLONNES;j++){
if (touche_int==touches[i][j]) touche_int=touches[i][j]-48; // extrait valeur numérique à partir ASCII
}
}
saisie_int[compt_touche_int]=touche_int; //enregistre le caractère dans tableau code_saisi
compt_touche_int=compt_touche_int+1; // on incrémente la variable compt qui mémorise le nombre de caractères saisis
//delay ()
touche_int=255; // remet à 255 la variable touche... pour éviter prise en compte même appui à plusieurs reprises
} //---- fin gestion appui clavier
}// fin du While = fin de la lecture du clavier
//--------- calcul valeur saisie en fonction du nombre de chiffres saisis ---------
if (compt_touche_int==0)nombre_saisi_int=0; // si aucun chiffre saisi
if (compt_touche_int==1)nombre_saisi_int=saisie_int[0]; // si 1 seul chiffre saisi
if (compt_touche_int==2)nombre_saisi_int=(saisie_int[0]*10)+(saisie_int[1]*1); // si 2 chiffres saisi
//------ à réaliser en sortie de lecture du clavier ----
compt_touche_int=0; // réinitialise le nombre de touche saisies
//----- renvoi de la valeur saisie ----
return (nombre_saisi_int); // renvoie la valeur - sortie de la fonction
}
// ////////////////////////// Fin du programme ////////////////////
j'ai mis tout le prog
merci de tes lumières je pense qu'il doit y avoir un détail de syntaxe ou autre qui m'échappe
bonne soirée
J-L