Le forum a migré vers l'adresse suivante:

Forum

Masquer ce message

Simple-Duino Index du Forum



Débutant sur Arduino


 
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Questions
Sujet précédent :: Sujet suivant  
Auteur Message
Philippe
Débutant

Hors ligne

Inscrit le: 11 Fév 2014
Messages: 7
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Mer 12 Fév - 11:47 (2014)    Sujet du message: Débutant sur Arduino Répondre en citant

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
Revenir en haut
CD74HC74
Débutant

Hors ligne

Inscrit le: 03 Jan 2014
Messages: 23
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Mer 12 Fév - 23:55 (2014)    Sujet du message: Débutant sur Arduino Répondre en citant

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
Revenir en haut
Philippe
Débutant

Hors ligne

Inscrit le: 11 Fév 2014
Messages: 7
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Jeu 13 Fév - 08:53 (2014)    Sujet du message: Débutant sur Arduino Répondre en citant

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.

Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Jeu 13 Fév - 18:29 (2014)    Sujet du message: Débutant sur Arduino Répondre en citant

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
Revenir en haut
Philippe
Débutant

Hors ligne

Inscrit le: 11 Fév 2014
Messages: 7
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Jeu 13 Fév - 18:47 (2014)    Sujet du message: Débutant sur Arduino Répondre en citant

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
Revenir en haut
CD74HC74
Débutant

Hors ligne

Inscrit le: 03 Jan 2014
Messages: 23
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Jeu 13 Fév - 19:22 (2014)    Sujet du message: Débutant sur Arduino Répondre en citant

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
Revenir en haut
Philippe
Débutant

Hors ligne

Inscrit le: 11 Fév 2014
Messages: 7
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Jeu 13 Fév - 20:25 (2014)    Sujet du message: Débutant sur Arduino Répondre en citant

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
Revenir en haut
CD74HC74
Débutant

Hors ligne

Inscrit le: 03 Jan 2014
Messages: 23
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Jeu 13 Fév - 21:27 (2014)    Sujet du message: Débutant sur Arduino Répondre en citant

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
Revenir en haut
Philippe
Débutant

Hors ligne

Inscrit le: 11 Fév 2014
Messages: 7
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Jeu 13 Fév - 21:35 (2014)    Sujet du message: Débutant sur Arduino Répondre en citant

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
Revenir en haut
CD74HC74
Débutant

Hors ligne

Inscrit le: 03 Jan 2014
Messages: 23
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Ven 14 Fév - 19:23 (2014)    Sujet du message: Débutant sur Arduino Répondre en citant

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
Revenir en haut
Philippe
Débutant

Hors ligne

Inscrit le: 11 Fév 2014
Messages: 7
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Sam 15 Fév - 09:24 (2014)    Sujet du message: Débutant sur Arduino Répondre en citant

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
Revenir en haut
Philippe
Débutant

Hors ligne

Inscrit le: 11 Fév 2014
Messages: 7
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Sam 15 Fév - 17:39 (2014)    Sujet du message: Débutant sur Arduino Répondre en citant

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
Revenir en haut
CD74HC74
Débutant

Hors ligne

Inscrit le: 03 Jan 2014
Messages: 23
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Ven 21 Fév - 19:26 (2014)    Sujet du message: Débutant sur Arduino Répondre en citant

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
Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 19:36 (2017)    Sujet du message: Débutant sur Arduino

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Questions Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB
Propulsé par Simple-Duino