Le forum a migré vers l'adresse suivante:

Forum

Masquer ce message

Simple-Duino Forum Index



Débutant sur Arduino


 
Post new topic   Reply to topic    Simple-Duino Forum Index -> Arduino & Électronique -> Questions
Previous topic :: Next topic  
Author Message
Philippe
Débutant

Offline

Joined: 11 Feb 2014
Posts: 7
Masculin
Niveau d'éléctronique: Intermédiaire

PostPosted: Wed 12 Feb - 11:47 (2014)    Post subject: Débutant sur Arduino Reply with quote

PublicitéSupprimer les publicités ?
Bonjour
je découvre Arduino et suit stupéfait de ses possibilités.
je souhaite pour mon premier montage faire défiler l'alumage et extinction de 9 leds les unes à la suite des autres (comme un chenillard) mais l'avancement se fait uniquement par l'action sur UN BOUTON POUSSOIR unique (qui remplacerait le signal d'horloge sur un montage traditionnel)
Voici le debut de mon programme (pour seulement deux leds) mais ce la ne fonctionne pas.

const int APPUI=0;
const int BP=2;
const int LED1=4;
const int LED2=5;
int ETAT_BP=0;
void setup() {
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(BP, INPUT);
 
  digitalWrite(BP, HIGH) ;
}
void loop(){
  ETAT_BP=digitalRead(BP);
  if (ETAT_BP==APPUI){
    digitalWrite (LED1,1);
    if (ETAT_BP==APPUI&&LED1,1);
 digitalWrite (LED2,1);
digitalWrite (LED1,0);}
 
}

Quelqu'un peut-il m'aider svp ? Merci
Back to top
CD74HC74
Débutant

Offline

Joined: 03 Jan 2014
Posts: 23
Masculin
Niveau d'éléctronique: Pro

PostPosted: Wed 12 Feb - 23:55 (2014)    Post subject: Débutant sur Arduino Reply with quote

Bonsoir, et bienvenue,

Comment est monté ton bouton poussoir niveau hard?
As-tu une résistance de pull-down et un filtre anti-rebond?
(EDIT : En fait, tu as déclaré l'entrée avec un pull-up et tu déclenches par détection d'un niveau bas. Je n'avais pas vu.)

Pourrais-tu réécrire ta fonction loop, il y a des if dans des if. Je ne comprends pas quelles instructions chacun des ifs contient. Pense à indenter et n'oublie pas les accolades. Cette fonction ne me semble pas claire.

Explique moi enfin ce que tu as voulu dire dans ta condition :
 
Code:



if (ETAT_BP==APPUI&&LED1,1); 




Le ",1" de la condition me choque.

Bonne nuit.
____________________________
Le fleuron de l'électronique : La Bascule D Flip-Flop Edge-Triggered
Back to top
Philippe
Débutant

Offline

Joined: 11 Feb 2014
Posts: 7
Masculin
Niveau d'éléctronique: Intermédiaire

PostPosted: Thu 13 Feb - 08:53 (2014)    Post subject: Débutant sur Arduino Reply with quote

Bonjour et merci pour cette réponse rapide.
En fait, ce montage me servira a indiquer par des leds l'avancement d'un convoi ferroviairev( modelisme) sous une montagne.
Le bouton poussoir est en fait un ensemble de contacts ILS fixes sur les voies et tous montes en parallele afin de n'utiliser qu 'une seule entree de l'arduino. Pour les antirebonds, j'uilise le systeme embarque de l'arduino.quand on appuie sur bo (ou plutot quand l'ILS se ferme, ) c'est une mise a 0. Pour lanti rebond, je pensais mettre un delay comme j'ai pu le voir ds d'autres montages. J' avoue que jevsuis encore un peu perdu dans cette approche de l'electro, je suis plutot a la base un vieux des CI logiques classiques et mes connaissances ds la programmation sont encore bien petites .


Au final, à chaque déclenchement d'ILS (mise à o) les leds avancent jusqu'à la derniere comme un chenillard
Pour moi, 1er déclenchement, led 1 s'allume .... le train avance, deuxième déclenchement, ILS2 passe à 0 et fait allumer led 2 et éteindre led 1, et ainsi de suite tout en sachant que tous les ILS (ou boutons poussoirs) sont en parallèle
Je ne sais pas si je suis assez explicite dans ces explications ?
Merci d'avance car cela fait maintenant un paquet d'heure que je m'arrache les cheveux avec ça.

Back to top
Admin
Fondateur

Offline

Joined: 12 Apr 2012
Posts: 860
Masculin
Niveau d'éléctronique: Pro

PostPosted: Thu 13 Feb - 18:29 (2014)    Post subject: Débutant sur Arduino Reply with quote

Ok, en fait, à chaque fois qu'un ILS de plus est enclenché, tu allumes une led de plus et au dernier ILS, tu éteint toutes les leds c'est ça ?
____________________________
http://simple-duino.com
Back to top
Philippe
Débutant

Offline

Joined: 11 Feb 2014
Posts: 7
Masculin
Niveau d'éléctronique: Intermédiaire

PostPosted: Thu 13 Feb - 18:47 (2014)    Post subject: Débutant sur Arduino Reply with quote

Bonsoir en fait c'est exactement cela hormis le fait que à la fin du dernier allumage , le "convoi ferroviaire devant revenir en arrière" doit redeclencher l'allumage des leds ds le sens inverse, puis lorsque la dernière led (autrement dit la led 1") s'allumera, celle ci devra s'éteindre au bout de quelques secondes. Et là, effectivement, la boucle sera complete.


j'espère être assez clair ds mes explications.


Cordialement


Philippe
Back to top
CD74HC74
Débutant

Offline

Joined: 03 Jan 2014
Posts: 23
Masculin
Niveau d'éléctronique: Pro

PostPosted: Thu 13 Feb - 19:22 (2014)    Post subject: Débutant sur Arduino Reply with quote

Bonsoir,

Toujours dans la série des questions qui commencent par "Comment" :
Il y aura des ILS à intervalles réguliers sur la voie située sous la montagne, c'est entendu.
Comment les ILS sont commutés? Est-ce le passage des roues du convoi sur l'ILS? Une excroissance sous la locomotive qui activerait l'ILS?

J'aimerais avoir des explications supplémentaires car je vois poindre un souci, étant donné la manière dont j'imagine les choses.

Bonne soirée.
____________________________
Le fleuron de l'électronique : La Bascule D Flip-Flop Edge-Triggered
Back to top
Philippe
Débutant

Offline

Joined: 11 Feb 2014
Posts: 7
Masculin
Niveau d'éléctronique: Intermédiaire

PostPosted: Thu 13 Feb - 20:25 (2014)    Post subject: Débutant sur Arduino Reply with quote

Bonsoir,
Les ILS sont activés par le passage de la locomotive sous laquelle est présent un aimant. En fait, à chaque passage de la loco sur un ils, cela génère un front descendant en entrée d'arduino.
Cordialement
Philippe
Back to top
CD74HC74
Débutant

Offline

Joined: 03 Jan 2014
Posts: 23
Masculin
Niveau d'éléctronique: Pro

PostPosted: Thu 13 Feb - 21:27 (2014)    Post subject: Débutant sur Arduino Reply with quote

Parfait, il n'y a donc qu'un seul moyen de déclencher les interrupteurs.

Pour ton programme, je te propose quelques modifications qui te permettront de faire un chenillard en un clin d’œil:
D'abord, réserver les broches 0 à 7 aux leds, tu peux mettre tes ILS parallèles à partir de la broche 8.
Pour afficher 8 leds en une instruction, il existe un mot clé : PORTD.
Par exemple :

 
Code:

PORTD = 9; 


Va afficher la led aux broches 0 et 3. En fait PORTD fait référence aux broches 0 à 7.
Ensuite, il y a l'instruction << qui décale les bits.

Essaie ce script et analyse le, c'est un chenillard ce qu'il y a de plus basique :

 
Code:

void setup()
{
  int i;
  for(i = 0; i<8; i++)
  {
    pinMode(i, OUTPUT);
  }
  PORTD=1;
}

void loop()
{
  PORTD=PORTD<<1;
  if ( PORTD==128)
  {
    delay(100);
    PORTD=1;
  }
  delay(100);




Ensuite, tu n'auras plus besoin des delay(), il suffira de faire une fonction affichage qui sera appelée à chaque détection d'ILS.

Je n'hésiterai pas à répondre à tes questions.

Bonne soirée.
____________________________
Le fleuron de l'électronique : La Bascule D Flip-Flop Edge-Triggered
Back to top
Philippe
Débutant

Offline

Joined: 11 Feb 2014
Posts: 7
Masculin
Niveau d'éléctronique: Intermédiaire

PostPosted: Thu 13 Feb - 21:35 (2014)    Post subject: Débutant sur Arduino Reply with quote

je te remercie pour ces réponses rapides donc, au fur et a mesure que les ILS seront activés, l'avancement des leds se fera. Je t'avouerais que le script que tu m'as envoyé me laisse quelque peu perplexe, je suis loin de connaitre tous ces termes de programmation. Je dois quand même déclarer les constantes au départ ? et qu'entends-tu par "fonction d'affichage" a la fin ? Désolé pour toutes ces questions mais c'est pas évident. Surtout que j'ai réalisé avec des ports logiques (4017, JK, et autres ce montage qui fonctionne mais qui nécessite beaucoup de composants).
Cordialement
Back to top
CD74HC74
Débutant

Offline

Joined: 03 Jan 2014
Posts: 23
Masculin
Niveau d'éléctronique: Pro

PostPosted: Fri 14 Feb - 19:23 (2014)    Post subject: Débutant sur Arduino Reply with quote

Bonsoir,

Je conçois que ces notations soient obscures, je ne sais pas quelles sont tes connaissances concernant les micro-contrôleurs, les opération et la logique booléenne.

D'une manière générale, chaque micro-contrôleur à des ports d'entrées/sorties (je ne vais pas entrer dans les détails, il y a des ports d'adresse, de données, de contrôle, parfois ils sont multifonctions, parfois non).
En ce qui concerne le micro-contrôleur de l'Arduino Uno, l'ATMEGA328 a 3 ports d'entrées/sorties:
Le port B de 8 bits (donc 8 broches) correspondant aux broches 8 à 13 de notre Arduino et 2 autres inaccessibles parce que le quartz est câblé.
Le port C de 7 bits (7 broches), correspondant aux entrées analogiques A0 à A5 et le Reset.
Enfin le port D de 8 bits (8 broches), correspondant aux broches 0 à 7.

Dans mon programme, le fait d'écrire:

 
Code:

PORTD = 1; 


est un raccourci qui signifie:

 
Code:

digitalWrite (0, HIGH);
digitalWrite (1, LOW);
...
digitalWrite (7, LOW); 



Cela évite d'écrire 8 lignes de codes.


Au sujet de l'opérateur '<<':
Sur mon bus de données après l'instruction PORTD=1 , j'ai donc (bit de poids fort du port D ou la broche 7 à gauche):
0 0 0 0 0 0 0 1

Si je fait une instruction PORTD = PORTD <<2;
Signifie que je vais décaler vers la gauche (vers le bit de poids fort ou la broche 7) d'autant de fois le nombre indiqué, ici 2 fois, ce qui va donner sur mon bus du port D :
0 0 0 0 0 1 0 0

L'instruction inverse est le décalage à droite : '>>'
PORTD = PORTD >>1 va décaler les bits vers le bit de poids faible (la broche 0) et donc transformer le :
0 0 0 0 0 1 0 0
en :
0 0 0 0 0 0 1 0

Pour savoir quelles broches sont à 1 et quelles broches sont à 0 quand tu utilises PORTD, il faut savoir compter en binaire. Si besoin, j'écrirai un tuto (encore faut-il que j'en ai le temps).

Je conçois que tout cela soit obscure, mais quand on sait comment ces merveilles fonctionnent, cela devient d'une simplicité pour coder.

Bonne soirée.
____________________________
Le fleuron de l'électronique : La Bascule D Flip-Flop Edge-Triggered
Back to top
Philippe
Débutant

Offline

Joined: 11 Feb 2014
Posts: 7
Masculin
Niveau d'éléctronique: Intermédiaire

PostPosted: Sat 15 Feb - 09:24 (2014)    Post subject: Débutant sur Arduino Reply with quote

merci pour ces nvlles explications,  Bravo je vais essayer ces codes ce week-end mais je dois avouer que le comptage binaire me fait revenir 30 ans en arrière lors de mes études en electro et là, c'est moins rigolo.... Very Happy
Back to top
Philippe
Débutant

Offline

Joined: 11 Feb 2014
Posts: 7
Masculin
Niveau d'éléctronique: Intermédiaire

PostPosted: Sat 15 Feb - 17:39 (2014)    Post subject: Débutant sur Arduino Reply with quote

Bonjour
suite aux conseils avisés de CD74HC74, j'ai composé le programme suivant (toujours pour mon projet leds)

const int APPUI=0;
const int BP=2;
int ETAT_BP=0;

void setup() {
  int i;
  for(i=0; i<8; i++)
  {
    pinMode(i, OUTPUT);
  }
 
  void loop()
  {
 
    PORTD=PORTD<<1;
  if ( PORTD==128)
  {
    delay(100);
    PORTD=1.
  }delay(100);
  }


et évidemment ça ne marcha pas, le test échoue. Evil or Very Mad
Je dois dire que ma patience commence a s'effilocher.
Au secours Sad Sad
Ce ne doit quand même pas etre compliqué de faire fonctionner l'arduino comme un simple compteur 4017
Back to top
CD74HC74
Débutant

Offline

Joined: 03 Jan 2014
Posts: 23
Masculin
Niveau d'éléctronique: Pro

PostPosted: Fri 21 Feb - 19:26 (2014)    Post subject: Débutant sur Arduino Reply with quote

Ton projet me passionne, mais je ne me contente seulement de voir passer les trains lorsque j'ai la chance de me trouver à proximité de l'un d'eux quand je suis en voiture.

Quelques petites erreurs d'inattention dans ton code :
  1. Tu en ouvre une accolade après le void setup, mais il manque celle qui clos la fonction setup.
  2. Ensuite, PORTD=1. générera une erreur, parce qu'on attend un ';' à la fin de l'instruction, et non un '.' .
  3. Même si cela ne génère pas d'erreur à la compilation, je te conseille très fortement de donner un état initial à PORTD : initialiser PORTD à 1 après les instructions pinMode.
La raison en est que nous ne savons jamais à quels états se trouvent les broches.
Si toutes les broches sont à 0, jamais rien ne changera (décaler des 0 donne des 0), ce qui est mon cas au moment où je teste.

En corrigeant, cela donne :
Code:

const int APPUI=0;
const int BP=2;
int ETAT_BP=0;

void setup() {
  int i;
  for(i=0; i<8; i++)
  {
    pinMode(i, OUTPUT);
  }
  PORTD=1; //Ne génère pas d'erreur mais fortement conseillé pour éviter des comportements non désirés.
 } //Accolade fermante ajoutée
 
void loop()
  {
 
    PORTD=PORTD<<1;
  if ( PORTD==128)
  {
    delay(100);
    PORTD=1; //Point-virgule à la place du point

  }delay(100);
  } 
Le tout testé par mes soins et garanti fonctionnel.
Bonne soirée.
____________________________
Le fleuron de l'électronique : La Bascule D Flip-Flop Edge-Triggered
Back to top
Display posts from previous:   
Post new topic   Reply to topic    Simple-Duino Forum Index -> Arduino & Électronique -> Questions All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  

Index | Xooit.com free forum | Free support forum | Free forums directory | Report a violation | Cookies | Charte | Conditions générales d'utilisation
Powered by phpBB
Propulsé par Simple-Duino