Go Down

Topic: [Resolu] Problème de relais qui bloque des actions (Read 2750 times) previous topic - next topic

J-M-L

Le pendant de digitalWrite est, comme son nom l'indique, digitalRead...
qie se passerait-il si vous changiez
Code: [Select]

  if ((Reception == LOW))
{

par
Code: [Select]

if (LOW == digitalRead(Reception) {

?
GRRRR ça m'énerve :) quand je vois ce genre d'erreurs... et dire que ça part d'une bonne intention avec des noms de constantes pour les pins qui contiennent le mot pin...
Code: [Select]
const byte pinLed0 = 8; // Led Verte Test bon
const byte pinLEDB = 9; // Led Rouge Test mauvais


mais ensuite la mauvaise habitude revient
Code: [Select]
const byte Envoie = 7;
const byte Reception = 6;

et bingo ça loupe pas, on compare un N° de pin avec HIGH ou LOW.

alors que si on avait eu
Code: [Select]
const byte Numero_de_la_pin_de_Reception = 6;clairement en écrivant
Code: [Select]
if (Numero_de_la_pin_de_Reception == LOW) {...[tout de suite on voit que c'est idiot....

m'enfin...
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

dbrion06

Par les canicules, faut pas s'énerver pour si peu.... (je suis raisonnablement sûr que, par des températures normales, cette erreur aurait sauté aux yeux de Monsieur Posteur)

J-M-L

Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

dbrion06

Je sais pas décoder les smileys (je ne sais qu'un peu d'arabe, de portugais, d'espagnol, d'américain, d'allemand, de kurmanji, de merina et de kalderash, je me mettrai aux néo hiéroglyphes un jour)

Hikashiro

#124
Jun 26, 2019, 02:09 pm Last Edit: Jun 26, 2019, 02:16 pm by Hikashiro
Hum je ne comprend pas vraiment mon erreur ^^"

C'est une histoire d'écriture c'est ça ?

Voilà le code :

Code: [Select]

const byte pinLed0 = 8; // Led Verte Test PASS
const byte pinLEDB = 9; // Led Rouge Test NOK
const byte pinReception = 6;
const byte pinEnvoie = 7;

void setup()
{
  pinMode(pinLed0, OUTPUT);
  pinMode(pinLEDB, OUTPUT);

  pinMode(pinEnvoie, OUTPUT);
  pinMode(pinReception, INPUT);
}

void loop()
{
  digitalWrite(pinLed0, LOW);
  digitalWrite(pinLEDB, LOW);
  digitalWrite(pinEnvoie, HIGH);

  if (digitalRead(pinReception == HIGH))
  {
    digitalWrite(pinLed0, HIGH);
  } else {
    digitalWrite(pinLEDB, HIGH);
  }
}


ça ne fonctionne pas.. Maintenant le programme m'allume la LED verte à chaque fois malgré que je simule un fils coupé ^^"

Edit je viens de relire le poste de J-M-L, il semblerais que mon erreur sois pour HIGH et LOW ^^"

kamill

La parenthèse est mal placée
Ce n'est pas
Code: [Select]
 if (digitalRead(pinReception == HIGH))
mais
Code: [Select]
 if (digitalRead(pinReception) == HIGH)

dbrion06

si, au lieu d'écrire
Code: [Select]
if (digitalRead(pinReception == HIGH))
{

vous aviez écrit

Code: [Select]

if (HIGH == digitalRead(pinReception) {


le compilateur se serait révolté, et vous auriez tout naturellement rajouté la parenthèse manquante.

Hikashiro

Cela ne fonctionne toujours pas. Il trouve à mon entré d'arduino toujours un HIGH même si je simule un câble coupé. ^^"

kamill

Bien sur, quand le fil est copué l'entrée est en haute impédance donc le niveau est aléatoire. Il faut aussi faire le test inverse avec la sortie à LOW.

Hikashiro

Hum cela donnerais donc sous forme de code ?

Code :

Code: [Select]

const byte pinLed0 = 8; // Led Verte Test PASS
const byte pinLEDB = 9; // Led Rouge Test NOK
const byte pinReception = 6;
const byte pinEnvoie = 7;

void setup()
{
  pinMode(pinLed0, OUTPUT);
  pinMode(pinLEDB, OUTPUT);

  pinMode(pinEnvoie, OUTPUT);
  pinMode(pinReception, INPUT);
}

void loop()
{
  digitalWrite(pinLed0, LOW);
  digitalWrite(pinLEDB, LOW);
  digitalWrite(pinEnvoie, HIGH);

  if (digitalRead(pinReception == LOW))
  {
    digitalWrite(pinLed0, HIGH);
  } else {
    digitalWrite(pinLEDB, HIGH);
  }
}


Sauf que la mon problème même avec
Code: [Select]
if (digitalRead(pinReception == LOW)) il me mets ma LED verte qui signifie qu'il n'a pas de fils coupé quand cela est correct mais si je relance le test et que je simule encore un fils coupé et bien la LED verte s'allume alors que ça devrais être une LED rouge ^^"

kamill

#130
Jun 27, 2019, 10:27 am Last Edit: Jun 27, 2019, 10:28 am by kamill
Sauf que la mon problème même avec
Code: [Select]
if (digitalRead(pinReception == LOW)) il me mets ma LED verte qui signifie qu'il n'a pas de fils coupé quand cela est correct mais si je relance le test et que je simule encore un fils coupé et bien la LED verte s'allume alors que ça devrais être une LED rouge ^^"
Comme on t'a dit plus haut ce n'est pas
Code: [Select]
if (digitalRead(pinReception == LOW))
Mais
Code: [Select]
if (digitalRead(pinReception) == LOW)

Tu peux aussi utiliser INPUT_PULLUP
Code: [Select]
const byte pinLed0 = 8; // Led Verte Test PASS
const byte pinLEDB = 9; // Led Rouge Test NOK
const byte pinReception = 6;
const byte pinEnvoie = 7;

void setup()
{
  pinMode(pinLed0, OUTPUT);
  pinMode(pinLEDB, OUTPUT);

  pinMode(pinEnvoie, OUTPUT);
  pinMode(pinReception, INPUT_PULLUP);
}

void loop()
{
  digitalWrite(pinLed0, LOW);
  digitalWrite(pinLEDB, LOW);
  digitalWrite(pinEnvoie, LOW);

  if (digitalRead(pinReception) == LOW)
  {
    digitalWrite(pinLed0, HIGH);
  } else {
    digitalWrite(pinLEDB, HIGH);
  }
}

Hikashiro

Ha désolé erreur d'inattention, cela fonctionne merci :)

Go Up