Go Down

Topic: conflit sur sortie digitale (Read 778 times) previous topic - next topic

Pascal17740

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


al1fch

#1
Oct 09, 2017, 10:17 pm Last Edit: Oct 09, 2017, 10:20 pm by al1fch
Bonsoir
Quote
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.

Pascal17740

pense tu que cela serait coherant ?

Code: [Select]
  if ((batcharge==true)==(cmdBat==true))
   {
   digitalWrite(BATCHARGE,LOW);
   }
    else
   {
   digitalWrite(BATCHARGE,HIGH);
   }

ZigZag

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.

kamill

#4
Oct 10, 2017, 08:22 am Last Edit: Oct 10, 2017, 09:27 am by 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.

_pepe_

#5
Oct 10, 2017, 09:12 am Last Edit: Aug 19, 2018, 04:45 am by _pepe_
Supprimé

Pascal17740

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
Code: [Select]

 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);
   }
  }

kamill

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

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.

Pascal17740

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.

68tjs

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.



-Standby

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.
The Mind is like a parachute it works best when opened.

ZigZag

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.

_pepe_

#13
Oct 11, 2017, 11:44 am Last Edit: Aug 19, 2018, 04:45 am by _pepe_
Supprimé

Pascal17740

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

 

Go Up