Bus 4 fils pour alimenter un groupe de LED Facade de Man

Modérateur : Anim'Elec

Répondre
kol28
Coursier local
Coursier local
Messages : 14
Enregistré le : 02 mai 2015, 07:29
Numéro de département : 28
Pays : F
A remercié : 3 fois
A été remercié : 1 fois

Re: Bus 4 fils pour alimenter un groupe de LED Facade de Man

Message par kol28 »

Salut,
Le sketch pour l'acquisition des valeur est celui de JP Barres du Forum, il utilise " #include <EEPROM.h>", on enregistre des valeurs après une série de manipulations de levier et de BP ..... cela fonctionne super bien ... le seul truc est que la position enregistrée n'est pas modifiable ..... si on se trompe, il faut recommencer .... c'est pour cela que je voudrais exploiter les valeur "numérique" des leviers.
Mon cahier des charges et simple, c'est celui de JP Barres :
Stop allumés manche droit au neutre, éteint dès que l'on avance.
Marche Ar "ON" dès que l'on passe une position de référence vers AR
Cligno D "ON" dès que l'on donne une impulsion courte à droite et "Off" avec la même action
Cligno G "ON" dès que l'on donne une impulsion courte à gauche et "Off" avec la même action
Warning "ON" après une impulsion "longue" à D ou G
Allumage veilleuse puis codes puis phares avec action répétée du manche gauche vers le haut ......extinction vers le bas .....

A suivre une partie du sketch .......................



#include <EEPROM.h>

#define phares 2
#define anti 3
#define toit 4
#define voie1 5
#define voie2 6
#define voie3 7
#define voie4 8
#define feustop 9
#define feurecul 10
#define bpinit A5
#define clid 11
#define clig 12
#define ledtest 13
#define arret 18
#define klaxon 1
#define cligno 0
byte nl;
byte nh;
long avantv;
long arrierev;
long manche1h;
long manche1b;
long manche2g;
long manche2d;
long manche3h;
long manche3b;
long manche4g;
long manche4d;
long dvoie1;
long dvoie2;
long dvoie3;
long dvoie4;
long mdvoie1;
int val;



void setup() {

pinMode(arret,OUTPUT);
digitalWrite(arret,LOW);
pinMode(klaxon,OUTPUT);
digitalWrite(klaxon,LOW);
pinMode(cligno,OUTPUT);
digitalWrite(cligno,LOW);
pinMode(phares,OUTPUT);
pinMode(anti,OUTPUT);
pinMode(toit,OUTPUT);
pinMode(voie1,INPUT);
pinMode(voie2,INPUT);
pinMode(voie3,INPUT);
pinMode(voie4,INPUT);
pinMode(feustop,OUTPUT);
pinMode(feurecul,OUTPUT);
pinMode(clid,OUTPUT);
pinMode(clig,OUTPUT);
digitalWrite(phares,LOW);
digitalWrite(anti,LOW);
digitalWrite(toit,LOW);
digitalWrite(clid,LOW);
digitalWrite(clig,LOW);
digitalWrite(feustop,HIGH);
digitalWrite(feurecul,LOW);
pinMode(ledtest,OUTPUT);
digitalWrite(ledtest,LOW);
pinMode(bpinit,INPUT);
digitalWrite(bpinit,HIGH);
if (digitalRead(bpinit)== LOW){
manches_init();
}
recupdata();
Serial.print(manche1h);
Serial.print(" ");
Serial.print(manche1b);
Serial.print(" ");
Serial.print(manche2g);
Serial.print(" ");
Serial.print(manche2d);
Serial.print(" ");
Serial.print(manche3h);
Serial.print(" ");
Serial.print(manche3b);
Serial.print(" ");
Serial.print(manche4g);
Serial.print(" ");
Serial.print(manche4d);
Serial.print(" ");
Serial.print(avantv);
Serial.print(" ");
Serial.print(arrierev);
Serial.println(" ");
DDRC = 0xFF;
mdvoie1 = avantv;

dvoie1 = pulseIn(voie1,HIGH);
Avatar du membre
stephd
Garagiste en chef
Garagiste en chef
Messages : 5492
Enregistré le : 21 févr. 2006, 06:23
Numéro de département : 60
Pays : F
Localisation : Dans l'oise derriere mon PC
A remercié : 520 fois
A été remercié : 120 fois
Contact :

Re: Bus 4 fils pour alimenter un groupe de LED Facade de Man

Message par stephd »

Alors voila,


Ce que je comprends, dans les grandes lignes, c'est que tu récupères une voie de ton récepteur pour être lu avec un arduino.

Le principe est simple.
pour lire les informations du récepteur il faut utiliser la fonction pulseIn
pulseIn(numero de la broche,valeur)
Pour récupérer la valeur:

On déclare une variable

long MaVariable;

On attribut une pin a une variable,
là on nome la pin 7 -> broche

int broche = 7;

dans le setup:

void setup()
{
//on met la pin 7 nommé broche en entrée, on indique donc que la pin 7 sera une pin d'entrée.

pinMode(broche, INPUT); // met la broche en entrée

// la on active le mode serial afin de lire des valeurs a l’écran

Serial.begin(9600);
}

le programme loop

void loop()
{
//on stock la valeur dans la variable:

MaVariable = pulseIn(broche, HIGH);

// ce qui se passe c'est qu'on lit la valeur de la pin7 nommée broche et
// on stocke dans la variable nommé MaVariable.

admettons qu'en manipulant le manche tu es en partie basse une valeur proche de 500 en partie haute une valeur proche de 1500 et en partie neutre tu est 1000 a l'entrée de la pin7

Bien évidemment la valeur oscille elle n'est quasi jamais stable en lecture sur le serial, au neutre CA peut varier entre 995 et 1005 par exemple. et c'est vrai pour toute les positions

donc tantôt MaVariable sera a 998 puis 1002 puis 1003 ...

a partir des valeurs stockées dans Mavariable, tu peux donc faire des actions en y mettant de la logique.

premier test

//if veut dire si ----- Si MaVariable est supérieure à 1100, j’écris dans le serial "le manche est en haut"
if (MaVariable > 1100)
{
Serial.print("le manche est en haut");
Serial.println();

//donc dans cette partie tu mets tes actions
}

second test
//Si MaVariable est Inférieur à 800, j’écris dans le serial "le manche est en bas"
eleseif (MaVariable < 800)
{
Serial.print("le manche est en bas");
Serial.println();


//là aussi on peut mettre des actions
}
//Si c'est ni l'un ni l'autre alors je suis au neutre
else
{
Serial.print("Je dois être au neutre");
Serial.println();

//du coup on peut mettre d'autres actions
}

}

es ce clair pour toi ;)
A Tantôt... ;) vive le jus de fraise
kol28
Coursier local
Coursier local
Messages : 14
Enregistré le : 02 mai 2015, 07:29
Numéro de département : 28
Pays : F
A remercié : 3 fois
A été remercié : 1 fois

Re: Bus 4 fils pour alimenter un groupe de LED Facade de Man

Message par kol28 »

Salut,

)..... je vais faire des test aujourd'hui, si jamais ça coince, je te fais signe ..........
Merci pour les infos ........ :respect:

[AT]+ Kol 28
Avatar du membre
mecatron37
Conducteur d'engins spéciaux
Conducteur d'engins spéciaux
Messages : 1504
Enregistré le : 29 juil. 2007, 10:44
Numéro de département : 59
Pays : F
Localisation : Lille
A remercié : 7 fois
A été remercié : 41 fois
Contact :

Re: Bus 4 fils pour alimenter un groupe de LED Facade de Man

Message par mecatron37 »

kol28 a écrit :Salut,
Le sketch pour l'acquisition des valeur est celui de JP Barres du Forum, il utilise " #include <EEPROM.h>", on enregistre des valeurs après une série de manipulations de levier et de BP ..... cela fonctionne super bien ... le seul truc est que la position enregistrée n'est pas modifiable ..... si on se trompe, il faut recommencer .... c'est pour cela que je voudrais exploiter les valeur "numérique" des leviers.
Mon cahier des charges et simple, c'est celui de JP Barres :
Stop allumés manche droit au neutre, éteint dès que l'on avance.
Marche Ar "ON" dès que l'on passe une position de référence vers AR
Cligno D "ON" dès que l'on donne une impulsion courte à droite et "Off" avec la même action
Cligno G "ON" dès que l'on donne une impulsion courte à gauche et "Off" avec la même action
Warning "ON" après une impulsion "longue" à D ou G
Allumage veilleuse puis codes puis phares avec action répétée du manche gauche vers le haut ......extinction vers le bas .....
Oui donc en gros tu es comme mes kits feux.

Dans ce cas et comme te dis Steph, tu dois enregistrer la valeur du neutre de ta voie

Ensuite tu défini une plage dans laquelle ta voie sera considérée au neutre.
Ex:

neutreMini= neutreEnregistre - 200 //800
neutreMaxi=neutreEnregistre + 200 //1100
if (valeurvoie>neutreMini&& valeurvoie <neutreMaxi)
{ //ton manche est au neutre}


Ensuite comme tu gères des impulsions du manche courte et longue, il faut compter combien de temps tu restes le manche en bas ou en haut.

Bon courage
Cliquez sur les images :
Kit Feux pour Camion
Image Image
http://www.kotronik.com
kol28
Coursier local
Coursier local
Messages : 14
Enregistré le : 02 mai 2015, 07:29
Numéro de département : 28
Pays : F
A remercié : 3 fois
A été remercié : 1 fois

Re: Bus 4 fils pour alimenter un groupe de LED Facade de Man

Message par kol28 »

Re,

C'est bon cela fonctionne .... j'ai changé les valeurs pour quelles correspondent à ma radio ..... je commence à cerner la choses ......

................................................................................

long MaVariable;
int broche = 7;
void setup()
{
//on met la pin 7 nommé broche en entrée, on indique donc que la pin 7 sera une pin d'entrée.

pinMode(broche, INPUT); // met la broche en entrée

Serial.begin(9600);
}

void loop()
{
//on stock la valeur dans la variable:

MaVariable = pulseIn(broche, HIGH);

// on stocke dans la variable nommé MaVariable.

//if veut dire si ----- Si MaVariable est supérieure à 1600, j’écris dans le serial "le manche est en haut"
if (MaVariable > 1600)
{
Serial.print("le manche est en haut");
Serial.println();
//donc dans cette partie tu mets tes actions
}

//second test
//Si MaVariable est Inférieur à 1300, j’écris dans le serial "le manche est en bas"
else if (MaVariable < 1300)
{
Serial.print("le manche est en bas");
Serial.println();

//là aussi on peut mettre des actions
}
//Si c'est ni l'un ni l'autre alors je suis au neutre
else
{
Serial.print("Je suis au neutre");
Serial.println();
}

}
...................................................................................................
kol28
Coursier local
Coursier local
Messages : 14
Enregistré le : 02 mai 2015, 07:29
Numéro de département : 28
Pays : F
A remercié : 3 fois
A été remercié : 1 fois

Re: Bus 4 fils pour alimenter un groupe de LED Facade de Man

Message par kol28 »

Salut,

Après plusieurs essais plus ou moins concluant (surtout moins) voila une première tentative ......rien de fracassant pour les pro :respect: mais je m'accroche .....
Stop allumés au neutre, extinction vers l'avant, feux de recul vers l'arriere avec extinction des stop ...... j'ai fait une tentative pour les codes et phares avec allumage par manipulation courte du levier pour allumage et extinction mais ca ne fonctionne pas .... Je veux bien un tuyaux ou deux ....même trois ;)

..................................................................
long MaVariable1; //voie1 commande (stop,marche AR)
long MaVariable2; //voie2 commande (code, phare)
int broche1 = 7; //broche entrée 1
int sortie1 = 3; // sortie 1 "STOP"
int broche2 = 6; // broche entrée 2
int sortie2 = 2; // sortie 2 "ARRIERE"
int sortie3 = 9; // sortie 3 code
int sortie4 = 10; // sortie 4 phare


void setup()
{

pinMode(broche1, INPUT); // met la broche en entrée
pinMode(sortie1, OUTPUT);
pinMode(broche2, INPUT); // met la broche en entrée
pinMode(sortie2, OUTPUT);

}

void loop()
{
// ............FONCTION "ROULAGE"...........

MaVariable1 = pulseIn(broche1, HIGH);

if (MaVariable1 > 1600 )
{
digitalWrite (sortie1, LOW);
digitalWrite (sortie2, LOW);
}
//............. "RALENTI".............
if (MaVariable1 < 1600 & (MaVariable1 > 1300))
{
digitalWrite (sortie1, HIGH);
digitalWrite (sortie2, LOW);

}
//..........MARCHE ARRIERE..............
if (MaVariable1 < 1300)
{
digitalWrite(sortie1, LOW);
digitalWrite (sortie2,HIGH);

}
Avatar du membre
mecatron37
Conducteur d'engins spéciaux
Conducteur d'engins spéciaux
Messages : 1504
Enregistré le : 29 juil. 2007, 10:44
Numéro de département : 59
Pays : F
Localisation : Lille
A remercié : 7 fois
A été remercié : 41 fois
Contact :

Re: Bus 4 fils pour alimenter un groupe de LED Facade de Man

Message par mecatron37 »

Pour savoir si tu as fait une impulsion longue ou courte il faut que tu te fasses un compteur.
Le problème avec la fonction "pulsein" c'est quelle attend l'impulsion, et pendant se temps la (a veracruz...) rien d'autre ne peut être fait.

En gros
tu lis la voie avec pulsein
MaVariable1 = pulseIn(broche1, HIGH,20000); // le 20000 c'est le timeout, évite d'attendre une impulsion qui n'arrive jamais.
MaVariable2 = pulseIn(broche2, HIGH,20000);

if mavariable2 > ValeurSeuilHaut
{
//incremente CompteurMancheHaut
}
if (SeuilNeutreBas < mavariable2 < SeuilNeutreHaut)
{
//Regarde CompteurMancheHaut
//Traite l'action si besoin en fonction de la valeur de CompteurMancheHaut
CompteurMancheHaut =0;
}

et idem pour le bas.
bon courage.
Cliquez sur les images :
Kit Feux pour Camion
Image Image
http://www.kotronik.com
Répondre

Retourner vers « le fabuleux destin de l'Arduino »