Condition arduino

a marqué ce sujet comme résolu.

Bonjour/Bonsoir, je suis un débutant sur arduino et je souhaite écrire un code qui me permettrais d’activer une borne de mon arduino si une autre borne est activé depuis au moins 10 secondes ( soit la borne 2 ou 3 activé depuis 10 sec pour activer 10) . voilà le code que j’ai fais jusqu’à là mais qui n’a pas l’air de fonctionner :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
const int BROCHE_AOP = 2 ;           
const int BROCHE_PHOTO = 3 ;         
const int BROCHE_BASE = 10 ;        

void setup() {
pinMode(BROCHE_AOP,INPUT);       //   = ENTRE

pinMode(BROCHE_PHOTO,INPUT);     //   = ENTRE

pinMode(BROCHE_BASE,OUTPUT);     //   = SORTIE

digitalWrite(BROCHE_AOP,HIGH);   //   = Resistance interne borne 2

digitalWrite(BROCHE_PHOTO,HIGH); //   = Resistance interne borne 3
}

void loop() {

digitalRead(BROCHE_AOP);
digitalRead(BROCHE_PHOTO);

byte ETAT_AOP = digitalRead(BROCHE_AOP);     // Stocker 2 dans ETAT_AOP

byte ETAT_PHOTO = digitalRead(BROCHE_PHOTO); // Stocker 3 dans ETAT_PHOTO

if (ETAT_AOP == HIGH) {
  digitalWrite(BROCHE_BASE,HIGH);            // si 2 = HIGH alors 10 = HIGH
}

if(ETAT_PHOTO == HIGH) {
digitalWrite(BROCHE_BASE,HIGH);              // si 3 = HIGH alors 10 = HIGH
}

else {
  digitalWrite(BROCHE_BASE,LOW);             // sinon 10 = LOW 
}
}

Pour essayer la sortie 10, j’ai mis une LED entre la borne 10 et GND et elle s’allume sans aucune tension à 2 ou à 3. Lorsqu’il y a une tension à 2 ou à 3 , rien ne change.

Merci pour votre aide !

+0 -0

Pour essayer la sortie 10, j’ai mis une LED entre la borne 10 et GND et elle s’allume sans aucune tension à 2 ou à 3. Lorsqu’il y a une tension à 2 ou à 3 , rien ne change.

zak333

Si ta LED s’allume, c’est forcément qu’il y a une tension à ses bornes. Ton programme est initialisé (dans la fonction setup) avec tes sorties en état HIGH, c’est probablement pour ça que ta LED s’allume, vu la condition qu’il y a dans ta fonction loop. Tu es sûr que ton Ampli OP et ton autre composant sont bien dimensionnés pour recevoir une tension de 5 volts ?

EDIT : Pardon, j’avais rien compris. Difficile de te répondre comme ça, poste un schéma de ton montage électrique, je pourrais peut être t’aider.

+0 -0

Je n’en ai malheureusement pas. Si vous voulez on peut considéré que l’une des broches soit la 2 ou bien la 3 vu que c’est quasi la même entré( du coup je ne parlerais plus que de la broche 2). De ce fait j’aimerais avoir une correction( ou alors un nouveau programme si j’ai fais fausse route) pour avoir un code qui me permettrais d’émettre un signal à la broche 10 de l’arduino qui est configurer en tant que sortie. Ce signal serait émis si la broche 2 configurer en tant qu’entré capte une tension. Donc émettre une tension à la sortie 10 si et seulement si la broche 2 a une tension qui la traverse. Sinon lorsqu’il n’y en a aucun alors la broche 10 n’émet aucune tension. C’est un peu comme ce que ferait un relais si cela vous aide à comprendre mieux ce que je recherche. Merci pour votre aide Popiette.

Ce que tu peux déjà faire, c’est n’utiliser qu’une seule condition pour passer ta broche 10 à l’état HIGH (lignes 26 à 32). Là tu as deux if l’un à coté de l’autre, tu rentreras dans le bloc else que si la deuxième condition n’est pas vérifiée (alors que tu voudrais y rentrer aussi si la première condition n’était pas vérifiée).

Par contre, pourquoi tu utilise un digitalWrite sur tes broches d’entrées 2 et 3 ? C’est une autre manière de leur donner une résistance de pull up / pull down ? Moi j’ai plutôt tendance à les déclarer comme ça :

1
2
pinMode(BROCHE_PHOTO, INPUT_PULLUP);
//Là la broche est configurée en entrée avec une résistance de pull up.

Je pense qu’il pourrait aussi être utilise d’imposer un état de départ à ta sortie 10, dans ta fonction setup. Tu l’initialise à LOW pour être sûr de ce qu’il doit se passer au départ.

De même, la doc arduino ( cf doc ) met la valeur retournée par digitalRead dans un int. Tu devrais peut être essayer aussi, mais ça m’étonnerait que ça résolve ton problème.

+0 -0

Je viens d’essayer, ça na rien changer alors quand bien même que j’ai init la broche 10 à LOW :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
const int BROCHE_AOP = 2 ;  

const int BROCHE_BASE = 10 ;        

void setup() {

pinMode(BROCHE_AOP,INPUT);          //   = ENTRE

pinMode(BROCHE_AOP, INPUT_PULLUP);  // RESISTANCE INTERNE

pinMode(BROCHE_BASE,OUTPUT);        //   = SORTIE

digitalWrite(BROCHE_BASE,LOW);     // = INIT ETAT 0
}

void loop() {

digitalRead(BROCHE_AOP);

byte ETAT_AOP = digitalRead(BROCHE_AOP);     // Stocker 2 dans ETAT_AOP



if (ETAT_AOP == HIGH) {

  digitalWrite(BROCHE_BASE,HIGH);            // si 2 = HIGH alors 10 = HIGH
}


else {

digitalWrite(BROCHE_BASE,LOW);             // sinon 10 = LOW 
}
}

J’ai remplacé à la ligne 24 le "ETAT_AOP" par "BROCHE_AOP" et là plus de tension du tout même quand la broche 2 est en HIGH.

Je ne vois vraiment pas comment pouvoir régler ça

+0 -0

Tu peux supprimer la ligne 7, elle ne sert à rien.

Je pense que le soucis vient de ton montage électrique là. Essaie par exemple de mesurer la tension de sortie de ton AOP ou ta photorésistance, afin de vérifier qu’elles sont bien au dessus du seuil détectable par l’Arduino pour ce genres d’entrées.

Sans plus de détails, je ne peux pas t’aider.

PS : tu aurais pu écrire ta condition comme ça :

1
2
3
4
5
if(ETAT_AOP == HIGH || ETAT_PHOTO == HIGH){
digitalWrite(BROCHE_BASE, HIGH);
}else{
digitalWrite(BROCHE_BASE, LOW);
}

C’est ce que je te conseillais de faire dans mon post précédant.

+0 -0

Ben, le soucis c’est que par "normalement", il faut comprendre que tes capteurs doivent avoir une tension de sortie détectable par l’Arduino, que la tension avec laquelle tu les alimente doit être suffisante pour qu’ils fonctionnent correctement etc.

Donc je ne peux pas te dire si ça peut fonctionner ou pas.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte