Go Down

Topic: probléme de lecture d'un pin  (Read 315 times) previous topic - next topic

Alcar

Jun 07, 2018, 03:27 pm Last Edit: Jun 07, 2018, 06:14 pm by Alcar
voila mon programme (c'est le deuxième)
quand j'allume ma carte UNO rien ne se passe, ce qui est normal, puisque le programme attend un signal dans l'entrée 10 pour démarrer.
si j'envoi un signal; le programme s'exécute correctement
la carte
puis la carte son et un moteur
puis le moteur s'arrête
la ventouse s'arrête et la porte s'ouvre.
et le programme s'arrête.
chaque élément est commandé par une carte relais: donc trois relais

mon problème est que dés que je met un fil dans la borne 10 (relié à rien du tout) le programme démarre. je pensais quand dessous de 1volt la carte considérée que l'entrée était à zéro.
le probléme vient: de la carte??
du programme
ou du montage , j'ai essayé de rajouter une résistance de 220 ohm à la sortie avant de mettre le fil, dés que j'enfonce un coté de la résistance dans la pin 10 le programme démarre, j'ai éssaye avec un entrée analogique même pb
à l'aide

Code: [Select]

int pinMoteur = 4;
int pinSon = 6;
int pinVentouse =8;
boolean ouverturePorte;
int pinAction;
int val = 0;
void setup() {
 //initialisation des ports
 pinMoteur = 4;
 pinSon = 6;
 pinVentouse = 8;
 pinAction = 10;

 // état des ports
 pinMode(pinMoteur, OUTPUT);
 pinMode(pinSon, OUTPUT);
 pinMode(pinVentouse, OUTPUT);
 pinMode(pinAction, INPUT);
 //mise à zéro
 digitalWrite(pinSon, LOW);
 digitalWrite(pinMoteur, LOW);
 digitalWrite(pinVentouse, LOW);
 digitalWrite(pinAction, LOW);
 ouverturePorte = true;
}
void loop() {
   
     val = digitalRead(pinAction);
     if (val ==1)



if (ouverturePorte)
 {
   digitalWrite(pinSon, HIGH);
   delay(3000);
   digitalWrite(pinSon, HIGH);
   digitalWrite(pinMoteur, HIGH);
   delay(4000);
   digitalWrite(pinMoteur, LOW);
   digitalWrite(pinVentouse, HIGH);
   delay(3000);
   digitalWrite(pinSon, LOW);
   digitalWrite(pinMoteur, LOW);
   digitalWrite(pinVentouse, LOW);
   {
     ouverturePorte = false;
   }

 }

}



lesept

Et comme ça ?
Code: [Select]
void loop() {
  val = digitalRead(pinAction);
  if (val == 1) {  // <-- ajout d'une accolade
    if (ouverturePorte)
    {
      digitalWrite(pinSon, HIGH);
      delay(3000);
      digitalWrite(pinSon, HIGH);
      digitalWrite(pinMoteur, HIGH);
      delay(4000);
      digitalWrite(pinMoteur, LOW);
      digitalWrite(pinVentouse, HIGH);
      delay(3000);
      digitalWrite(pinSon, LOW);
      digitalWrite(pinMoteur, LOW);
      digitalWrite(pinVentouse, LOW);
      {
        ouverturePorte = false;
      }
    }
  } // <--- fermeture
}
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

infobarquee

bonjour,

bonjour, merci, code entre balise code </>
AUCUNE AIDE PAR MP

Alcar

merci pour votre aide.

bon toujours pareil, j'ai essayé avec une autre carte et c'est pareil????


Alcar


dfgh


lesept

#7
Jun 07, 2018, 06:57 pm Last Edit: Jun 07, 2018, 07:05 pm by lesept
Est-ce que tu peux tester en utilisant une autre broche que la 10 ?

La broche 10 est reliée à la LED RX, va une résistance 10k. Peut-être est-elle plus sensible qu'une autre et que le fil que tu insères agit comme une antenne ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

dfgh

veux tu tester ce code, attention il ne fonctionnera qu'une fois

Code: [Select]
const byte pinMoteur = 4;
const byte pinSon = 6;
const byte pinVentouse = 8;
boolean ouverturePorte;
const byte pinAction = 10;
int val = 0;
void setup()
{
  // état des ports
  pinMode(pinMoteur, OUTPUT);
  pinMode(pinSon, OUTPUT);
  pinMode(pinVentouse, OUTPUT);
  pinMode(pinAction, INPUT_PULLUP);//il faudra mettre ton fil sur GND pour ouvrir
  //mise à zéro
  digitalWrite(pinSon, LOW);
  digitalWrite(pinMoteur, LOW);
  digitalWrite(pinVentouse, LOW);
  ouverturePorte = true;
}
void loop()
{
  val = digitalRead(pinAction);
  if (val == LOW)
  {
    digitalWrite(pinSon, HIGH);
    delay(3000);
    digitalWrite(pinSon, HIGH);
    digitalWrite(pinMoteur, HIGH);
    delay(4000);
    digitalWrite(pinMoteur, LOW);
    digitalWrite(pinVentouse, HIGH);
    delay(3000);
    digitalWrite(pinSon, LOW);
    digitalWrite(pinMoteur, LOW);
    digitalWrite(pinVentouse, LOW);
  }
}

lesept

veux tu tester ce code, attention il ne fonctionnera qu'une fois
Pourquoi ? Il s'autodétruit après ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Alcar

Alors,
j'ai mis les sorties sur les pins 2, 4, 6 pour être sur la première série de pins
j'ai essayé l 'entré sur le 10, 11, 13, A2, A5
ah, quand je touche les soudures des pins (au dos de la carte) le programme démarre

deuxiéme essais
les sorties en 8, 10, 12
et l'entrée en 4
idem des que je mets un fil dans le 4 le programme demarre

j'y comprend rien???

lesept

J'ai simplifié et reproduit le montage, avec juste la pin 10 et la LED du nano pour montrer que le test est vérifié. Le code :
Code: [Select]
int pinAction = 10;
int val = 0;
boolean ouverturePorte = true;

void setup() {
  //initialisation des ports
  pinMode(pinAction, INPUT);
  digitalWrite(pinAction, LOW);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
  delay (2000);
  digitalWrite(LED_BUILTIN, LOW);
}

void loop() {
  val = digitalRead(pinAction);
  if (val == 1)
  {
    if (ouverturePorte)
    {
      digitalWrite(LED_BUILTIN, HIGH);
      ouverturePorte = false;
    }
  }
}
La LED s'allume 2 secondes (c'est pour voir de quelle LED il s'agit) puis lorsque j'insère un fil métallique dans le trou de ma breadboard branché sur la broche 10, la LED s'allume.

Maintenant si je commente la ligne
Code: [Select]
  digitalWrite(pinAction, LOW);tout rentre dans l'ordre. Il ne doit pas aimer un digitalWrite sur un port déclaré en OUTPUT...

Voilà !
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

dfgh

@ le sept
je me suis mal exprimé, je parlais du prg d'origine de notre ami
il initialise un boolean à true
puis dans la boucle, si la condition est confirmée, et si le boolean est true, il exécute sa fonction d'ouverture et passe le boolean à false .
la fois suivante, le boolean est false et il ne peut plus exécuter sa fonction d'ouverture
le code d'origine en simplifié
Code: [Select]
boolean ouverturePorte = true;
setup(){}
void loop() {

  val = digitalRead(pinAction);
  if (val == 1)
    if (ouverturePorte)
    {
      digitalWrite(pinSon, HIGH);
      delay(3000);
      //etc....
      ouverturePorte = false;
    }
}

_pepe_

Bonjour

Je pense qu'il est nécessaire d'en savoir plus sur le montage. Un schéma ou une photo du circuit serait le bienvenu.

Alcar

bonjours à tous,
j'ai essayé toutes vos solutions et voila ce qui marche à la perfection, sachant que si le signal en entrée est continu (reste branché) le programme ne doit s'exécuter qu'une seule fois.
en fait c'est pour un jeux. les enfants doivent trouver 3 objets qui une fois posés sur le bon emplacement laisse passer le - (là le GND, sur mon premier essais c'était le +, mais c'est pas important) ,  pour déclencher: un son, un moteur qui fait bouger plein de petits trucs et enfin ouvre une porte. le programme ne doit pas redémarrer au début une fois exécuté, pour le remettre à zéro il faut faire un reset.
 j'ai remis, dans le code proposé par "DFGH", la fonction ouverturePorte et .... TOUT MARCHE
Maintenant il faut que je digère ce code pour comprendre....

sinon  le branchement est assez simple
3 relais alimentés par la carte, et piloté par les pins 4, 6, 8, chaque relais active une fonction.
le pin 10 est relié au GND en passant par des interrupteurs ILS qui se ferment quand on pose les objets dessus (ils sont pourvus d'un aimant),  ce qui démarre le programme.

j'espère que c'est clair????

Merci à tous,
BON, à la rentrée je m'inscris au FABLAB qui est pas loin de chez moi pour prendre des cours d'ARDINIO.

encore un grand MERCI


Code: [Select]

const byte pinMoteur = 4;
const byte pinSon = 6;
const byte pinVentouse = 8;
boolean ouverturePorte;
const byte pinAction = 10;
int val = 0;
void setup()
{
  // état des ports
  pinMode(pinMoteur, OUTPUT);
  pinMode(pinSon, OUTPUT);
  pinMode(pinVentouse, OUTPUT);
  pinMode(pinAction, INPUT_PULLUP);//il faudra mettre ton fil sur GND pour ouvrir
  //mise à zéro
  digitalWrite(pinSon, LOW);
  digitalWrite(pinMoteur, LOW);
  digitalWrite(pinVentouse, LOW);
  ouverturePorte = true;
}
void loop()
{
  val = digitalRead(pinAction);
  if (val == LOW)
  {
    if (ouverturePorte)
    {
    digitalWrite(pinSon, HIGH);
    delay(3000);
    digitalWrite(pinSon, HIGH);
    digitalWrite(pinMoteur, HIGH);
    delay(4000);
    digitalWrite(pinMoteur, LOW);
    digitalWrite(pinVentouse, HIGH);
    delay(3000);
    digitalWrite(pinSon, LOW);
    digitalWrite(pinMoteur, LOW);
    digitalWrite(pinVentouse, LOW);
    {
      ouverturePorte = false;
    }
  }
}
}

Go Up