conflit sur sortie digitale

bonsoir

deux fonctions et une sortie

si heure creuse charge batterie pin état low
si tension batterie < seuil pin état low
conflit lorsque une ou l autre des condtions place le pin etat High
je n ai pas trouver de solution car il n existe pas de fonction logique non ou exclusif a priori

Bonsoir

je n ai pas trouver de solution car il n existe pas de fonction logique non ou exclusif a priori

Le complément de la fonction ou exclusif (parfois appelée XNOR) est la fonction identité,

Avec a et b booléens il suffit d'écrire a==b dont les résultat est vrai si a et b ont la même valeur, pas besoin d'opérateur spécifique.

pense tu que cela serait coherant ?

  if ((batcharge==true)==(cmdBat==true))
   {
   digitalWrite(BATCHARGE,LOW);
   }
    else
   {
   digitalWrite(BATCHARGE,HIGH);
   }

Bonjour,

N'y aurait-il pas tout simplement un conflit dans la définition du besoin ?

Car si je decode, j'ai l'impression que tu veux charger la batterie
1/ pendant les heures creuses.
OU (exclusif)
2/ quand la batterie est déchargée

Ce qui, selon moi, crée un conflit si tu es en heures creuses ET que la batterie est déchargée car dans ce cas, le NON OU EXCLUSIF interdit la charge, et la batterie reste déchargée.

Moi, vu de loin et avec le peu d'infos que tu donnes, cela ne me semble pas cohérent.

Peux tu détailler davantage ton cahier des charges (quand veux ou ne veut tu pas charger la batterie)?

Le code que tu propose au regard de l'info que t'indique al1fch ne me semble pas etre conforme.

Bonjour,

Je ne vois pas ce que vient faire le ou exclusif dans l'histoire

Voilà l'algorithme d'après ce que j'ai compris (mais ce n'est pas très clair)

si heure creuse charge batterie ou tension batterie < seuil
alors pin état low
sinon pin état_high

C'est un simple ou logique.

kamill:
Bonjour,

Je ne vois pas ce que vient faire le ou exclusif dans l'histoire

Voilà l'algorithme d'après ce que j'ai compris (mais ce n'est pas très clair)

si heure creuse charge batterie ou tension batterie < seuil
alors pin état low
sinon pin état_high

C'est un simple ou logique.

voila j ai trouver cela donnerais cela

 void test_bat() {
  tensBat = analogRead(analogInput);
       vout = (tensBat * 5.0) / 1024.0; // see text
        vin = vout / (R2/(R1+R2)); 
   if ((vin <= 12.0))
  {
  batcharge=true;
  }
 if (vin>14.5)
  {
 batcharge=false;
  }
   if (batcharge || cmdBat) // cmdBat correspond a true si test -> HC en bleu ,blanc, rouge, tempo 
   {
   digitalWrite(BATCHARGE,LOW);
   }
    else
   {
   digitalWrite(BATCHARGE,HIGH);
   }
  }

Et est ce que ça correspond à ce que tu veux faire?

Merci de respecter les autres membres de ce forum qui utilisent son moteur de recherche :

Modifie le titre, il n'y a aucun conflit sur une sortie digitale.

68tjs:
Merci de respecter les autres membres de ce forum qui utilisent son moteur de recherche :

Modifie le titre, il n'y a aucun conflit sur une sortie digitale.

si tu appel le fait d 'avoir deux etats low et high instable sur une sortie autrement qu un conflit ou collision dis moi comment on fait pour modifier l intituler du post.

Conflit sur une sortie signifie que "le monde extérieur" perturbe la sortie.

D'après ce que tu as expliqué ce n'est pas une action provenant de l'extérieur mais des difficultés de trouver le bon code pour commander la sortie.
C'est un problème de code donc c'est interne au micro.

Bonsoir,

Je te propose de prendre un café autour d'une feuille et d'un stylo et de décrire la table de vérité de ta fonction.

On verra ensuite quelle équation logique est la mieux appropriée.

Bonjour,

Je suis devenu méfiant vis à vis de tes definitions.

Parle sans crainte de ton conflit ou états instables sur ta sortie digitale.

L'instabilité peut résulter d'un conflit (lequel ?) tout comme elle peut n'être que la conséquence d'un bout de code qui ne fait que ce qu'on lui dit de faire vs ce que toi tu aimerais qu'il fasse et qu'il ne fait pas.

Là effectivement le café (de préférence à la bière) 1 crayon et 1 feuille de papier s'imposent ainsi que quelques instants de réflexion.

Bonsoir le probleme est resolu et cela fonctionne

la solution adopte est la suivante au lieu de forcer a l’état low ou high
une sortie en fonction des etats heure creuse et seuil batterie du style

if (hc) digitalWrite(sortie,low)
else
digitalWrite(sortie,high)

if (vbat<vseuil) digitalWrite(sortie,low)
else
digitalWrite(sortie,high)

donc on pouvais avoir high,et low en meme temps

j ai donc fait ceci

if (hc) batchage=true // assigner une variable booléenne a etat HC
else
batcharge=false

if if (vbat<vseuil) cmdbat=true // assigner une variable booléenne a état vbat<vseuil
else
cmdbat=false

puis fonction ou sur les deux variables booléennes pour changer l etat de la sortie

if (batcharge)||(cmdbat) digitalWrite(sortie,low)
else
digitalWrite(sortie,high)

et depuis je n ai plus aucun soucis

Forcément que la première solution ne marche pas, et le conflit était dans les "else".

Il aurait fallu raisonner OU et non cas par cas.

A savoir:

Si condition1 OU condition2 ALORS "action1"
SINON "action2"

Plutôt que

Si condition1 ALORS "action1"
SINON "action2"

Si condition2 ALORS "action1"
SINON "action2"

Car dans ce cas là c'est uniquement le dernier SI qui a la parole.

Ce n'est pas un conflit mais une erreur de définition...