Go Down

Topic: conflit sur sortie digitale (Read 421 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: Oct 10, 2017, 09:18 am by _pepe_
... car il n existe pas de fonction logique non ou exclusif a priori
Quoi qu'il en soit, cette fonction peut s'écrire :
- « (A==B) » en logique booléenne (comme rappelé par al1fch)
- « ~(A^B) » en logique bit à bit

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: Oct 11, 2017, 12:01 pm by _pepe_
deux fonctions et une sortie
C'est un peu comme mettre deux volants sur une voiture. Ça ne peut pas marcher.



Quote
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
La description correcte de la commande de l'état de la pin doit être unique. Elle pourrait être du type « La pin est portée à l'état bas si (et seulement si) ... », étant entendu qu'elle sera portée l'état haut dans le cas contraire.

C'est la fonction réalisée par cette pin qui doit totalement déterminer son comportement. Or ici tu n'as pas indiqué (ni peut-être même décidé ?) son comportement complet (quid des situations que tu qualifies de « conflit » ?) ni sa fonction.



S'il y a « conflit », ce ne peut être que parce que la démarche de développement a consisté à écrire du code qui faisait un peu n'importe quoi, puis à tenter de le modifier en constatant que ce qu'il ne produisait était contraire à certains résultats espérés (c'est malheureusement une erreur très courante, parce qu'on veut souvent aller trop vite).

Ce n'est assurément pas la bonne façon de faire.


On doit commencer par exposer clairement, en bon français et de façon exhaustive, ce qu'on veut globalement obtenir du système (besoin) et dans quel cadre (environnement, contraintes et moyens disponibles).

Viennent ensuite les phases de conception (s'appuyant généralement sur un travail documentaire), où l'on doit, toujours clairement, en bon français et de façon exhaustive :
- d'abord exposer les principes (d'un point de vue purement fonctionnel) d'une solution répondant à ce besoin et conforme au cadre défini,
- puis décrire la réalisation de cette solution (d'un point de vue technique), en procédant par niveaux de détails croissants.

Ensuite seulement, on réalise la transcription de la solution détaillée en code informatique. À ce stade, cette transcription ne doit plus apparaître que comme une formalité, les questions fonctionnelles et techniques devant déjà avoir été réglées précédemment.

Enfin, on teste le résultat pour vérifier qu'il est conforme à ce qu'on attendait et qu'il répond au besoin exprimé. Dans le cas contraire, on cherche à quel endroit on a commis l'erreur dans les étapes précédentes, on corrige, puis on reprend la démarche à partir ce point.



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