Le forum a migré vers l'adresse suivante:

Forum

Masquer ce message

Simple-Duino Index du Forum



[Résolu] Calcul avec virgules
Aller à la page: 1, 2  >

 
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Questions
Sujet précédent :: Sujet suivant  
Auteur Message
Tachro52
Débutant

Hors ligne

Inscrit le: 30 Nov 2013
Messages: 100
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Dim 22 Déc - 14:30 (2013)    Sujet du message: [Résolu] Calcul avec virgules Répondre en citant

PublicitéSupprimer les publicités ?
Bonjour à tous. 


J'ai regardé sur pas mal de site, et on me dit qu'il faut utiliser les variables de type float ou double pour effectuer des calculs à nombre à virgules.


OK. 


Je fait donc une variable float nommée vir.


Dans le setup, je dit que vir vaut 4,8828125




Lorsque je lis la valeur de vir dans le moniteur série, j'ai 4 ??!


En fait il faudrait que lorsque l'entrée A0 est à 1024, que j'aie une variable à 5000, donc le calcul est de 1024*4,8828125 Wink


Danke schön !

EDIT : La solution était : Il faut utiliser des POINTS et non des VIRGULES lorsque l'on effectue ce genre de calcul Wink


Dernière édition par Tachro52 le Dim 26 Jan - 12:38 (2014); édité 2 fois
Revenir en haut
oneill
Débutant

Hors ligne

Inscrit le: 03 Juin 2013
Messages: 60
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Lun 23 Déc - 12:01 (2013)    Sujet du message: [Résolu] Calcul avec virgules Répondre en citant

essai avec ça:

Citation:

float vir = 4.8828125;
Serial.println(vir, 5); //le " ,5" format l'affichage de 5 chiffre après la virgule.





mais pour le calcul sa change rien, sa calcul quand même avec tout les chiffre.
Dit moi si sa ta aider ou pas.
bonne chance
Revenir en haut
Tachro52
Débutant

Hors ligne

Inscrit le: 30 Nov 2013
Messages: 100
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Lun 23 Déc - 23:02 (2013)    Sujet du message: [Résolu] Calcul avec virgules Répondre en citant

Tu crois que le calcul est effectué dans l'art alors que l'affichage est arrondi c'est ça ? Je te tiens au courant demain matin, merci  Okay
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Mar 24 Déc - 10:23 (2013)    Sujet du message: [Résolu] Calcul avec virgules Répondre en citant

Mais j'ai bien relu et il existe la fonction map qui te permet de passer automatiquement de 0-->1024 à 0-->5000


Structure :
Citation:

int val = map(valdebase, 0, 1024, 0, 5000);



____________________________
http://simple-duino.com
Revenir en haut
Tachro52
Débutant

Hors ligne

Inscrit le: 30 Nov 2013
Messages: 100
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Mar 24 Déc - 11:32 (2013)    Sujet du message: [Résolu] Calcul avec virgules Répondre en citant

J'avais déjà vu cette fonction, mais je ne connaissais plus son nom...

Donc du coup c'est niquel.


Mais j'aurais de toute manières besoin de calculer avec des virgules Wink


Désormais, j'ai ma variable à 5000.


Il m'en faut une seconde qui soit égale à -0,002725+13,65 fois la première !


Donc utilisation de float ? 


Merci à vous Wink
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Mar 24 Déc - 11:53 (2013)    Sujet du message: [Résolu] Calcul avec virgules Répondre en citant

ah oui et là c'est avec oneill qu'il faut que tu vois ...
____________________________
http://simple-duino.com
Revenir en haut
Tachro52
Débutant

Hors ligne

Inscrit le: 30 Nov 2013
Messages: 100
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Mar 24 Déc - 12:47 (2013)    Sujet du message: [Résolu] Calcul avec virgules Répondre en citant

oneill ? gnéé
Revenir en haut
oneill
Débutant

Hors ligne

Inscrit le: 03 Juin 2013
Messages: 60
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Mar 24 Déc - 14:20 (2013)    Sujet du message: [Résolu] Calcul avec virgules Répondre en citant

salut donc si je comprend tu a ta première variable et ta deuxième variable. Et tu veux multiplier la deuxième par la première c'est bien ça ? 
Revenir en haut
Tachro52
Débutant

Hors ligne

Inscrit le: 30 Nov 2013
Messages: 100
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Mar 24 Déc - 19:22 (2013)    Sujet du message: [Résolu] Calcul avec virgules Répondre en citant

Ouai.
Je vais t'expliquer le contexte, je pense que ça pourra t'aider.
J'ai deux réservoirs d'air de 5 litres, commandés chacun par deux électrovalve, soit 4 EV au total. Chacun des deux réservoir possède son capteur de pression analogique.
Sur le premier réservoir, les commandes des électrovalves sont manuelles, c'est l'humain qui rempli/vide la capacité. La pression maximum de ce premier réservoir est détendue à 5bars, ce qui correspond à notre variable max de 5000.
Le second réservoir lui, en revanche, je dois le commander automatiquement à partir de ses deux électrovalves.
La pression résidant dans le second réservoir varie selon la préssion dans le premier : la formule qui lie les deux est y=-0,002725x+13,625
Normalement, à 5bars (x=5000) dans le premier réservoir, ça correspond à 0bars dans le second : -0,002725*5000 = -13,625, +13,625 = 0bar
à 4,5 bars dans le premier, on obtient 1,325 bars dans le second. (Il faudrait d'ailleurs transformer ce résultat en millier : 1325)

Le résultat de ce calcul on va l'appeler référence :
Plus la pression baisse dans le premier, plus la pression devrait augmenter dans le second.

Bien entendu il y a une limite, qui est 3,8bars dans le second, et cette limite est ici aussi fixée par un détendeur.

Deux condition seront utilisées :

Code:

if("capteur_réservoir_2" < "référence") 
{  
DigitalWrite(électrovalve alimentation HIGH) 

else if(capteur_réservoir_2" > "référence") 

digitalWrite(électrovalve échappement HIGH) 
}  
else  

digitalWrite(électrovalve alimentation LOW) 
digitalWrite(électrovalve échappement LOW) 
}



Voila, avec une marge d'erreur à ajouter due au temps de réaction de l'air, des électrovalve, au temps de détente de l'air dans un volume etc... je pense que +/- 150 seraient raisonnables.

Si tu le souhaite je peux ouvrir un projet Wink
Revenir en haut
Tachro52
Débutant

Hors ligne

Inscrit le: 30 Nov 2013
Messages: 100
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Sam 28 Déc - 18:40 (2013)    Sujet du message: [Résolu] Calcul avec virgules Répondre en citant

Salut à tous !

Sur le même sujet, problème "similaire"

En effet, le réservoir commandé électroniquement décrémente un compteur :
Plus la préssion sera importante dans le réservoir, plus la décrémentation devra être rapide,

j'ai souhaitais m'occuper de cette partie de décrémentation automatique variable cet après midi, mais je sèche encore sur le même sujet :
les calculs à virgules.

Déjà voici le code que j'ai fait en vain :


Code:

if(cf > 200)
{
  fnct = ((-0,3243*cf)+2032,4);
 
  if((millis()-freq10)>fnct)
  {
    regression = !regression;
    freq10 = millis();
  }
}


else
{
freq10 = millis()
}



Avec :

- CF directement lu sur l'entrée analogique A0, et grâce à notre bon admin, la valeur va de 0 à 5000
- fnct est une variable de type FLOAT (pour accepter les calculs à virgules...)
- freq10 une variable de type unsigned long, pour le temps.
- regression une variable de type boolean, une autre partie du programme se charge de la décrémentation lorsque régression == 1

Mais voila, lorsque je simule la montée en pression (grâce à un potentiomètre), fnct vaut 0, puis 1,0000 puis 2,0000, puis 3,0000 et enfin 4,0000. Et reste bloqué à 4.

Pourtant j'attends par exemple pour une pression de 200, un temps de 1960 ms environ ! pas 1,0000 !

help help help

Merci !
Revenir en haut
oneill
Débutant

Hors ligne

Inscrit le: 03 Juin 2013
Messages: 60
Masculin
Niveau d'éléctronique: Débutant

MessagePosté le: Mar 31 Déc - 14:46 (2013)    Sujet du message: [Résolu] Calcul avec virgules Répondre en citant

Dsl Tachro52 la peut pas t'aider mais il y aura surement quelqu’un qui peut.
Revenir en haut
Tachro52
Débutant

Hors ligne

Inscrit le: 30 Nov 2013
Messages: 100
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Sam 11 Jan - 22:10 (2014)    Sujet du message: [Résolu] Calcul avec virgules Répondre en citant

UP :

Dans quasi tous les programmes, je mettais une virgule et non un point, cela peut être la source de mon problème ?
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Dim 12 Jan - 10:59 (2014)    Sujet du message: [Résolu] Calcul avec virgules Répondre en citant

En effet, je sais pas si cela a une incidence mais les anglais mettent des points au lieu des virgules, à essayer nan ?
____________________________
http://simple-duino.com
Revenir en haut
Tachro52
Débutant

Hors ligne

Inscrit le: 30 Nov 2013
Messages: 100
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Dim 12 Jan - 12:17 (2014)    Sujet du message: [Résolu] Calcul avec virgules Répondre en citant

Ouaip, le week-end prochain, promis Embarassed
Revenir en haut
Tachro52
Débutant

Hors ligne

Inscrit le: 30 Nov 2013
Messages: 100
Masculin
Niveau d'éléctronique: Intermédiaire

MessagePosté le: Sam 18 Jan - 22:09 (2014)    Sujet du message: [Résolu] Calcul avec virgules Répondre en citant

Bon, j'avais raison Bravo Bravo


Il faut placer des points et non des virgule.

Un essais avec la fonction f(x) = -0,0025x + 13,65

à 5000 on doit avoir 0
à 4500 on doit avoir environ 1,3 (exprimé en bar dans la vraie vie)

its OK !
Me reste plus qu'à transformer la plage 0 à 3,8 en ° servos !

Code =

Code:
#include <Servo.h>


const int relaistraction = 2;
const int desserage = 4;
const int serrage = 7;
const int marche = 8;
const int neutre = 12;
const int compresseur_marche = 13; // il reste à mettre compresseur sur direct, grand débit, et surcharge.

boolean QT;
boolean DG;
boolean SG;
boolean ZFPBN;
boolean ZFPBM;
boolean ZFPBIS;
boolean CPRAUTO;
boolean CPRDIRECT;
boolean GRANDEBIT;
boolean SURCHARGE;
boolean Z_FPB;

int CPRANALOG;
int GDANALOG;
int SURCHARGEANALOG;
int ISOLEANALOG;

int TEST; // TESTTTT
double calculobtenu; // TESTTTT
int calculfixe; // TESTTTT

void setup()
{
 pinMode(relaistraction, INPUT);
 pinMode(desserage, INPUT);
 pinMode(serrage, INPUT);
 pinMode(marche, INPUT);
 pinMode(neutre, INPUT);
 pinMode(compresseur_marche, INPUT);
 
QT = 0;
DG = 0;
SG = 0;
ZFPBN = 0;
ZFPBM = 0;
ZFPBIS = 0;
CPRAUTO = 0;
CPRDIRECT = 0;
GRANDEBIT = 0;
SURCHARGE = 0;
Z_FPB = 0;
 
calculfixe = 3.8; 
Serial.begin(9600);
 
 
}
 
void loop()
{
  QT = digitalRead(relaistraction);
  DG = digitalRead(desserage);
  SG = digitalRead(serrage);
  ZFPBM = digitalRead(marche);
  ZFPBN = digitalRead(neutre);
  CPRAUTO = digitalRead(compresseur_marche);
  CPRANALOG = analogRead(A0);
  GDANALOG = analogRead(A1);
  SURCHARGEANALOG = analogRead(A2);
  ISOLEANALOG = analogRead(A3);
  TEST = analogRead(A4);
 
 
 
  if(CPRANALOG > 1000)
  {
    CPRDIRECT = 1;
  }
  else
  {
    CPRDIRECT = 0;
  }
 
 if(ISOLEANALOG > 1000)
 {
   ZFPBIS = 1;
 }
 else
 {
   ZFPBIS = 0;
 }
 
 if(SURCHARGEANALOG > 1000)
 {
   SURCHARGE = 1;
 }
 else
 {
   SURCHARGE = 0;
 }
 
 if(GDANALOG > 1000)
 {
   GRANDEBIT = 1;
 }
 else
 {
   GRANDEBIT = 0;
 }
 
 
 TEST = map(TEST, 0, 1023, 0, 5000);
 calculobtenu = ((-0.002725*TEST)+13.65);
 
 if(calculobtenu > 3.8)
 {
   calculobtenu = 3.8;
 }
 
 Serial.print("TEST = ");
 Serial.println(TEST);
 Serial.print("calculobtenu = ");
 Serial.println(calculobtenu);
 
 
}
Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 09:06 (2017)    Sujet du message: [Résolu] Calcul avec virgules

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Questions Toutes les heures sont au format GMT + 1 Heure
Aller à la page: 1, 2  >
Page 1 sur 2

 
Sauter vers:  

Index | creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB
Propulsé par Simple-Duino