un bouton , un servo, un arduino, plus de cerveau!!!

moelleux:
merci pour vos réponses , rectification , ca semble plutot bien, je modifie les valeur de timming mais ca semble etre ok avec toutefois des parasites peut on faire quelque chose pour gérer les rebonds et autres parasite??

bonjour

qu'appel tu exactement "parasite" ?
manque surement un pull down entre gnd et le contact , compte tenu de la longueur des cables en mode ouvert "ça attrape' n'importe quoi
mets une R 10K (valeur non critique) entre GND et pin 2

edit :
et la question qui aurait du etre posée depuis le debut ! :grin:
tu prend la puissance du servo directement sur le 5V de l'arduino ? 8) pas d'alim externe ? :roll_eyes:

Je pense plus qu'il s'agit d'un effet de rebond

B@tto:
Je pense plus qu'il s'agit d'un effet de rebond

bonjour B@tto
ou un tirage sur l'alim 5V de l'arduino si la puissance servo est piquée dessus (cas classique)

rebonjour
ca a l'air mieux effectivement ,(c'est ce que je faisait de mon coté pendant ta reponse, :wink: merci,

mais saurais tu comment je peux sécuriser la chose histoire de ne pas déclencher sans raisons , car même si c'est moins fréquent, ca arrive encore
oui , je suis sur le 5v de l'arduino, pas bien???

moelleux:
rebonjour
ca a l'air mieux effectivement ,(c'est ce que je faisait de mon coté pendant ta reponse, :wink: merci,

mais saurais tu comment je peux sécuriser la chose histoire de ne pas déclencher sans raisons , car même si c'est moins fréquent, ca arrive encore
oui , je suis sur le 5v de l'arduino, pas bien???

tu a mis une 10K entre GND et Pin2 ?
non "pas bien" 8) d'alimenter le servo par l'arduino
fais un test avec un 5V externe sur le rouge servo, ne pas oublier de relier les GND

meme sans le servo dans le circuit, ca"clignotte" de temps en temps

moelleux:
meme sans le servo dans le circuit, ca"clignotte" de temps en temps

alors exercice suivant :
regarde l'exemple digital---> debounce et integre le dans ton code :grin:

pour etre precis, le montage pausé sur la table, sans rien toucher , la led clignote, de temps en temps ,

moelleux:
pour etre precis, le montage pausé sur la table, sans rien toucher , la led clignote, de temps en temps ,

avec l'integration du debounce , comme exposé au dessus ? :grin:

tu m'en dirais un peut plus??? c'est quoi le debouncing , (en gros je vois , mais techniquement ? du code a rajouter?) merci

Dans la plupart du temps rien à par du code :slight_smile:

En fait quand tu appuis sur un bouton, c'est jamais parfait, si tu avais un oscillo du verrais que pendant quelques millisecondes le signal oscille. Donc une technique simple consiste à mettre un temps d'attente après l'appuie, puis de contrôler que le bouton est bien à l'état attendu. Pour éviter les interférences, c'est quand même mieux de mettre l'entrée à l'état haut, ce qui peut se faire en interne via la commande pinMode(NuméroDuPin, INPUT_PULLUP); qui va activer une résistance en interne de pullup et mettre par consequent ton pin à 5V. Ensuite il suffit de raccorder au bouton, relié lui même à l'autre bout au GND, ainsi à l'appui la tension passe à zero et pas besoin d'autre composants et généralement c'est plus stable.

ok mais je ne crois pas que le probleme vienne de la , si je met un bout de patte de resistance ou un fil dans le pin 2, ca fait du yoyo , la led clignote et le servo piétine en position haute (sans rien brancher au bout) ca le fait aussi avec un autre arduino, donc c'est pas un probleme de board...j'ai aussi changer l'interupteur, mêmes symptomes;

une bonne nuit de sommeil, et sans rien changer tout est rentré dans l'ordre.... mon rationalisme en prend un coup, j'aimerais bien parvenir a recréer le truc pour comprendre, en tout cas merci a vous, maintenant je voudrais rajouter rajouter un "chenillard" sur le système,

par exemple des lampes (un peut comme un vieux flipper ou un manege par exemple je possède 8 lampes un peu retro que je voudrais voir d'allumer une après l'autre sur une séquence reguliere (ou même fantaisiste), mais qui s'allumeraient toutes ensemble en cas de contact sur mon bouton genre flash 3x
avec des transistores (j'ai plein de pict31c)

les exemples ne manquent pas sur le net pour coder ca mais ce qui m’embête c'est qu'il me semble que je vais perdre le coté instantané non? comment melanger le code d'un chenillard je ne comprend pas bien les histoires d'unteruption,

Il faut se servir des interruptions temporelles, il y a des libs pour simplifier le code mais c'est vraiment pas dur à comprendre donc jte conseille de t'y pencher 10 min ça te sera très utile :wink:

http://playground.arduino.cc//Main/MsTimer2
http://playground.arduino.cc//Code/Metro

En gros il s'agit simplement de stocker la valeur millis() qui te donne le temps écoulé depuis le lancement du programme et d'y ajouter ton intervalle. Ensuite dans ta boucle tu compares cette valeur à millis(). Dès que millis() est supérieur à ta valeur, c'est que ton temps s'est écoulé et tu lances ta routines (éteindre ou allumer la LED par exemple). Ainsi du te passe des delay() et pendant ce temps tu peux faire autre chose.

C'est d'ailleurs ce qui se cache derriere les delay() : un compteur se remet à zero quand tu appelles la fonction, et quand il atteint le bon compte le code se poursuit. sauf que pendant qu'il compte tu ne fais rien ...

une bonne nuit de sommeil, et sans rien changer tout est rentré dans l'ordre.... mon rationalisme en prend un coup, j'aimerais bien parvenir a recréer le truc pour comprendre

Tu travailles sur une plaque d'essai ou sur un circuit soudé?
Par ce que sur les plaques d'essai, il y a assez souvent des mauvais contacts et on peut chercher longtemps la source d'un problème de ce genre qui disparait/réapparait miraculeusement lorsque l'on bouge un fil ou déplace la plaque d'essai.

breadboard, je pense que c'a venais de la ,
-> ok B@tto je vais faire un tour sur les liens , merci,

bonjour , nouveau blocage!
j' ai intégré une deco lumineuse, qui fonctionne , pour l'instant la fonction est simple, mais par contre la lecture de mon bouton se fait en fin de boucle lumineuse, je voudrais donc attacher une fonction interupt, mais je crois savoir qu'on ne peut pas utiliser delay avec,
voici le code

#include <Servo.h> 

Servo myservo;  

const int buttonPin = 2;     // bouton sur pin 2
const int relayreed =  12; // led 12 sortie pour reed appareil photo

int buttonState = 0;

int ledPins[] = {14,15,16,17,18,19,8,10,11,}; 

void setup()
{
  
 for(int i = 0; i < 9; i++){        
      pinMode(ledPins[i],OUTPUT); 
 
  pinMode(relayreed, OUTPUT);
  pinMode(buttonPin, INPUT);
  myservo.attach(9);  // servo sur pin 9
  myservo.write(45); //initialise le servo en position repos zero
  delay(20); // pour stabilisation
  }                                   
 
}
 

void loop()                     
{
  oneAfterAnotherLoop();   
 

buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {  // bouton etat haut detecté  
    digitalWrite(relayreed, HIGH);  // led ON
    myservo.write(178);       // va en butée inverse     
    delay(250);  // stabilisation 250 ms
    digitalWrite(relayreed, LOW);  // led OFF
    myservo.write(40); // retour en zero
    delay(20); // pour stabilisation 
    {digitalWrite(ledPins[0,1,2,3,4,5,6,7,8,9], HIGH);  //allume tout 
    delay(100); } 
    {digitalWrite(ledPins[0,1,2,3,4,5,6,7,8,9], LOW);  //etteind tout
    delay(100); }
    {digitalWrite(ledPins[0,1,2,3,4,5,6,7,8,9], HIGH);  //allume tout 
    delay(100); } 
    {digitalWrite(ledPins[0,1,2,3,4,5,6,7,8,9], LOW);  //etteind tout
    delay(100); }
    {digitalWrite(ledPins[0,1,2,3,4,5,6,7,8,9], HIGH);  //allume tout 
    delay(100); }  
    {digitalWrite(ledPins[0,1,2,3,4,5,6,7,8,9], LOW);  //etteind tout
    delay(100); }
  
}}
 
void oneAfterAnotherLoop(){
  int delayTime = 300; 
  for(int i = 0; i <= 8; i++){
    digitalWrite(ledPins[i], HIGH);  
  delay(delayTime);              }                                  

  for(int i = 8; i >= 0; i--){  
    digitalWrite(ledPins[i], LOW);  
    delay(delayTime);
  }                                         
                                     
}

en plus je ne parvient pas a faire un effet flash (tout les led allumée /eteintes 3x,

bref je coince et si une bonne ame qui passe par là peut"corriger ma copie" ca m'aiderais grandement
Merci

bonjour, bein je continue...maintenant que j'ai intégré une interruption, j'ai bien réussi a récupérer mon impulsion mais je n'arrive pas a mes fin concernant le servo,

//leds ok relais ok mais pas servo
#include <Servo.h> 
Servo myservo;  
const int relayreed =  12; // pin 12 sortie pour reed appareil photo;
int impact = 0;
int ledPins[] = {14,15,16,17,18,19,8,10,11,}; 

void setup()
{
  attachInterrupt( 0, mouche, RISING );
  
 for(int i = 0; i < 9; i++){        
      pinMode(ledPins[i],OUTPUT); 
 
  pinMode(relayreed, OUTPUT);
  
  
  myservo.attach(9);  // servo sur pin 9
  myservo.write(45); //initialise le servo en position repos zero
  }                                   
 
}
 

void loop()                     
 {
 if (impact == 1) { // si un choc a été détecté
 photo();
 }
{
  oneAfterAnotherLoop();   
}}

void photo(){
  digitalWrite(relayreed, HIGH);  
    myservo.write(178);       // va en butée inverse 
    
  delay(20); // pour stabilisation
   myservo.write(45);       // retour 
   
  digitalWrite(relayreed, LOW);  // led OFF
  delay(20); // pour stabilisation 
impact = 0;  
}
   
void mouche(){
  impact = 1;
}
  
  
void oneAfterAnotherLoop(){
  int delayTime = 100; //the time (in milliseconds) to pause between LEDs
                       //make smaller for quicker switching and larger for slower
 
//Turn Each LED on one after another
  for(int i = 0; i <= 8; i++){
    digitalWrite(ledPins[i], HIGH);  //Turns on LED #i each time this runs i
    delay(delayTime);                //gets one added to it so this will repeat 
  }                                  //8 times the first time i will = 0 the final
                                     //time i will equal 7;
 
//Turn Each LED off one after another
  for(int i = 8; i >= 0; i--){  //same as above but rather than starting at 0 and counting up
                                //we start at seven and count down
    digitalWrite(ledPins[i], LOW);  //Turns off LED #i each time this runs i
    delay(delayTime);                //gets one subtracted from it so this will repeat 
  }                                  //8 times the first time i will = 7 the final
                                     //time it will equal 0
                                     
                                     
}

donc j'ai mes p'tites lumières, ma photo mais pas de relevage,

ha non en fait la photo ne se fait qu'a la fin de la pattern lumineuse, pas d’interruption =( =( =(
comprend pô!!!!!