Débutant fabrication stroboscope

Bonjour à tous, et une bonne année 2015.

Mon frère ma demander si je pouvait lui construire un petit stroboscope, se que j'ai donc commencer a réaliser, mais les temps que j'ai placer dans le programme ne sont pas respecter, celui ci clignote de manière plus ou moins aléatoire. Je vous ai fait quelques photos du montage, mais le problème ne semble pas venir de la, puisque la carte seul (pin 13) clignote elle aussi aléatoirement. J'ai pris en vidéo pour que vous puissiez comprendre un peut mieux. Donc problème de carte ou erreur de programme ?

Merci à vous pour le temps que vous consacrez à mon problème.

Photo :

Vidéo :

https://www.youtube.com/watch?v=St79mLfBARk&list=UUvWY0YYwb0bAuZxZMQvYOCg

Programme :

https://www.dropbox.com/s/tl1sx2jnabz8u68/stroboscope.ino?dl=0

Bonjour,

Voici votre programme légèrement modifié. Ici je teste les ports digitaux avant de prendre une décision, ce qui me semble mieux fonctionner. Prevenez moi en cas de nouveau problème, car chez moi tout fonctionne a merveille.

stroboscope.ino (1.36 KB)

voila je viens d'essayer votre programme, pas de changement. la pin 13 se met a clignoter de manière un peut aléatoire. Même si je ne branche pas mon commutateur (rien n'est brancher sur la carte).

Petite vidéo pour illustrer :

http://youtu.be/0qht85Ea1ZA

PS : Je précise quand le programme de base Blink fonctionne parfaitement.

ton soucis provient très certainement du fait que tu n'as pas installé de résistance de tirage...

le problème traditionnel avec les micro-controleurs est que lorsqu'une entrée est en l'air (reliée à rien), le moindre "parasite" fait qu'elle peut aléatoirement voir un niveau 1 ou un niveau 0 ! :(

j'essaierai bien une des deux solutions suivantes :

  • si tu as quelques résistances de 10k, (voir 20k ou 33k...), connecte une résistance par entrée avec une extrémité sur l'entrée et l'autre au 0v. Ainsi l'entrée sera "tirée" au 0v au repos (niveau0) et au +5v lorsque sélectionnée par ton commut.

  • l'autre solution consiste a utiliser les résistances de pull-up (tirage au +5) intégrées au contrôleur en utilisant dans le setup ces lignes de code pour chacune des entrées

pinMode(pin, INPUT); // set pin to input digitalWrite(pin, HIGH); // turn on pullup resistors

l'état repos de tes entrées sera alors 1 (tirage au +5v par les résistances de pullup), ton commutateur devra donc cette fois avoir son point commun relié au 0v.

Billyboys: les temps que j'ai placer dans le programme ne sont pas respecter, celui ci clignote de manière plus ou moins aléatoire. Je vous ai fait quelques photos du montage, mais le problème ne semble pas venir de la, puisque la carte seul (pin 13) clignote elle aussi aléatoirement.

Si j’ai bien compris tu as relié le commun de ton commutateur au + et tu as configuré tes entrées en mode flotante: «pinMode ([n], INPUT);», donc le résultat est aléatoire. :/

Il faut relier le commun a la masse. Ensuite tu active la résistance de pull up pour maintenir les entrées au niveau haut: «pinMode ([n], INPUT_PULLUP);» Puis tu testes l’entrée qui est au niveau bas: if(digitalRead(SPEED[n]) == LOW)

Et normalement ça marche. ;)

Edit: @ Legone

Je crois qu’on s’est croisé, tu as tout dit. :)

Voila, je viens de connecter le commun de mon commutateur au GND, cela ressemble déjà beaucoup plus a quelque chose, mais il clignote toujours un peut bizarrement, je vous laisse constater de vous même sur cette nouvelle vidéo.

Vidéo :

http://youtu.be/hi3iNocG-ss

Programme (pour contrôler si pas j'ai pas fait n'inp ^^) :

https://www.dropbox.com/s/tl1sx2jnabz8u68/stroboscope.ino?dl=0

deux petites remarques :

j'aurais plutôt écrit ton setup comme ça

void setup() 
{
  pinMode(2, INPUT);
  digitalWrite(2, HIGH);
  pinMode(3, INPUT);
  digitalWrite(3, HIGH);
  pinMode(4, INPUT);
  digitalWrite(4, HIGH);
  pinMode(5, INPUT);
  digitalWrite(5, HIGH);
  pinMode(6, INPUT);
  digitalWrite(6, HIGH);    
  pinMode (13, OUTPUT);

}

et surtout à quoi sert ton else tel que tu l'as écrit ?? si tu veut en placer un, la syntaxe est plutôt :

if (test==ok)
{
  code1
}

else

{
  code2
}

petit complément pour le setup, viens de découvrir à l'occase de cet échange le mode «pinMode ([n], INPUT_PULLUP);» merci à vous ! ;)

Billyboys: Programme (pour contrôler si pas j'ai pas fait n'inp ^^) :

Tu remplaces:

int SPEED1 = 3; int SPEED2 = 4; int SPEED3 = 5; int SPEED4 = 6; int SPEED5 = 7; int SPEED6 = 8;

par: int SPEED1 = 2; int SPEED2 = 3; int SPEED3 = 4; int SPEED4 = 5; int SPEED5 = 6; int SPEED6 = 7;

et c'est parfait. :)

Note: c'est plus pratique si tu colle ton prog ici entre les balises "``

Bonjour.

Sinon, il faudrai utiliser un potentiomètre. On teste la valeur, on la map pour obtenir les valeurs souhaitée, on stocke le tout dans une variable et on l’utilise pour le délai.
Voici mon programme tel que je lutiliserai :

Et voici un lien vers une vidéo faite à la va-vite : Stroboscope avec Arduino - YouTube

stroboscope_version_DivertyArduino.ino (1003 Bytes)

legone: et surtout à quoi sert ton else tel que tu l'as écrit ??

Ici il ne sert à rien, il est là juste pour debuger le programme au cas ou la carte détecte une signal parasite.