Go Down

Topic: Arduino fonctionne a l'envers ?! (Read 655 times) previous topic - next topic

toytoy

Bonsoir,

Je suis débutant en arduino et je suis en grande galère. J'ai fais des essais d'un programme au voltmetre, celui ci semblais fonctionner...

Après quelques déboires avec des relais, j'ai enfin tout le matériel nécéssaire, malheureusement mon programme ne fonctionne pas comme il faut, je deviens fou.

J'en suis venu a faire un programme qui me donne l'état de mes E/S via le moniteur série.

Le but du programme, est que lorsque j'envoie 5V dans la PIN13, l'état de mes E/S s'affiche dans le moniteur série.

Voici le code :

Code: [Select]


// Affectation des variables sur les PIN
const int apiLife = 2;
const int levelUp = 3;
const int levelDown = 4;
const int reniflard = 5;
const int evPompe = 6;
const int pompe = 7;
const int cmdRemplissage = 8;
const int cmdVidange = 9;
const int sensPompe = 10;
boolean memCmdRemplissage = false;
boolean memCmdVidange = false;
int etat13 = 0;

void setup()
{
  // Configuration des entrées/sorties
  pinMode(2, OUTPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, INPUT);
  pinMode(9, INPUT);
  pinMode(10, OUTPUT);
  pinMode(13, INPUT);
  Serial.begin(9600);
}



void loop()
{
  // Mise à 1 de la sortie toujours active
  digitalWrite(apiLife, HIGH);
 
 etat13 = digitalRead(13);
 
  if (etat13 == HIGH)
  {
     Serial.println("-----");
     Serial.println(digitalRead(2));
     Serial.println(digitalRead(3));
     Serial.println(digitalRead(4));
     Serial.println(digitalRead(5));
     Serial.println(digitalRead(6));
     Serial.println(digitalRead(7));
     Serial.println(digitalRead(8));
     Serial.println(digitalRead(9));
     Serial.println(digitalRead(10));
  }
}





Il n'est pas commenté mais avec l'explication je pense que c'est facilement compréhensible.

En vient l'essai. Je branche mon arduino, charge le programme et affiche le moniteur série.
Que se passe t il ? L'état de mes E/S s'affiche a chaque cycle dans le moniteur, alors que la PIN13 n'est pas raccordée à quoi que ce soit !

Lorsque j'envoie 5V dedans, il se passe la même chose. Par contre, j'ai testé le tout pour le tout, j'ai raccordé la PIN13 à mon GND et là, miracle, l'état de mes E/S n'est plus mis a jour dans mon moniteur !


En gros, ça fonctionne à l'envers, avec le GND...

Arduino HS ?!

Merci d'avance.

B@tto

Salut,

Comportement on ne peut plus normal, ton pin est à l'état flottant (relié à rien ne veut pas dire relié au VCC ou au GND) sensible à tout ce qui est environnant.

Cherche résistance de pull down et pull up
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

icare

Bonsoir,
C'est ce que j'appelle une entrée en "ghost detector"
@+
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

toytoy

Je viens de faire l'essai en mettant des pull down logiciel par exemple digitalWrite(mon_entrée, LOW)

Malheureusement, je n'ai pas l'impression que cela ai quelconque effet.

J'ai bien peur d'avoir fait une bêtise.

Je vais refaire un programme propre, le tester, noter les résultats.
Si rien de concluant je donnerai le code ici avec les résultats attendu, je suis sur qu'une ame charitable qui a une carte vide pourra tester et comparer nos résultats.

Merci à vous en attendant.

icare

Re,
Essaye de repartir sur du simple, par exemple, le fameux "blink"
@+
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

fdufnews

#5
Nov 09, 2014, 09:19 pm Last Edit: Nov 09, 2014, 09:23 pm by fdufnews
Le but du programme, est que lorsque j'envoie 5V dans la PIN13, l'état de mes E/S s'affiche dans le moniteur série.

Code: [Select]

void loop()
{
  // Mise à 1 de la sortie toujours active
  digitalWrite(apiLife, HIGH);
 
 etat13 = digitalRead(13);
 
  if (etat13 == HIGH)
  {
     Serial.println("-----");
     Serial.println(digitalRead(2));
     Serial.println(digitalRead(3));
     Serial.println(digitalRead(4));
     Serial.println(digitalRead(5));
     Serial.println(digitalRead(6));
     Serial.println(digitalRead(7));
     Serial.println(digitalRead(8));
     Serial.println(digitalRead(9));
     Serial.println(digitalRead(10));
  }
}


Lorsque j'envoie 5V dedans, il se passe la même chose. Par contre, j'ai testé le tout pour le tout, j'ai raccordé la PIN13 à mon GND et là, miracle, l'état de mes E/S n'est plus mis a jour dans mon moniteur !


En gros, ça fonctionne à l'envers, avec le GND...
Ton programme fonctionne comme tu l'as codé.

Le if (etat13 == HIGH) demande l'exécution du code entre accolades si la broche 13 est à l'état haut (donc 5V). C'est bien le comportement que tu obtiens.
Si la broche 13 est à 5V, tu affiches l'état de tes entrées.
Sinon, tu n'affiches rien.

Go Up