Go Down

Topic: Code Capteur de pression  (Read 267 times) previous topic - next topic

Zazu51

Bonjour, j'ai un problème avec mon code de capteur de pression. En gros, lors d'un code tout simple avec juste un analogRead j'obtiens ce que je veux, c'est a dire des valeurs au alentour de 850 et qui augmente ou baisse suivant ce que je veux. là où ca ne va pas, c'est lorsque que je veux intégrer ce code dans un plus gros, bien plus gros et j'obtien la valeur 1023 qui ne change pas. Je ne trouve où ça pêche, si vous pouviez m'aider.
Bonne journée
Code: [Select]


/*
 *
 */
 #include <SPI.h>
#include <SD.h>
/* accelerometerADXL
 * X to A0
 * Y to A1
 * Z to A2
 * AREF to 3.3
*/
/*
 * MPX4115AP
 * Analaog to A3
 * MPX4115A
 * to A4
 *
 * SD
 * MOSI 11
 * MISO 12
 * SCK 13
 * CS 4
 */
 int actu = 0;
 int precedent;
 boolean bouton = LOW;
 const int xInput = A0;
const int yInput = A1;
const int zInput = A2;
float pression = A5;
const int chipSelect = 4;


// Raw Ranges:
// initialize to mid-range and allow calibration to
// find the minimum and maximum for each axis   X: 491-528, Y: 489-529, Z: 493-532

int xRawMin = 491;
int xRawMax = 528;

int yRawMin = 489;
int yRawMax = 529;

int zRawMin = 493;
int zRawMax = 532;

// Take multiple samples to reduce noise
const int sampleSize = 10;

 int pinBouton;
int measurePre = A3;
const int relais = 3;
const int ledR = 1;
const int ledV = 2;
unsigned long  tempsPrecedentPa = 0, tempsActuelPa = 0;


  unsigned long currentMillisParra = millis();
  File fusee;

void setup()
{
      pinBouton=6;
    pinMode(pinBouton,INPUT);
  pinMode(relais, OUTPUT);
  pinMode(ledR, OUTPUT);
  pinMode(ledV, OUTPUT);
  Serial.begin(9600);
  digitalWrite(relais, HIGH);
    analogReference(EXTERNAL);
  Serial.begin(9600);
    // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("Initializing SD card...");

  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("card initialized.");
    fusee = SD.open("donnees.txt", FILE_WRITE); //on peut en ouvrir qu'un à la fois //

  if (fusee) { //si le fichier a bien été ouvert :
    fusee.print("X,        Y,      Z,      ");
    fusee.println("PressionStat    ,PressionTot");
    fusee.close();
    Serial.println("Fait");
  } else { // sinon :
    Serial.println("Erreur lors de l'ouverture de test.txt");
}
}
void donne()
{
    int xRaw = ReadAxis(xInput); //lecture donnée accéléromètre
  int yRaw = ReadAxis(yInput);
  int zRaw = ReadAxis(zInput);
  {
    Serial.print("Raw Ranges: X: ");
    Serial.print(xRawMin);
    Serial.print("-");
    Serial.print(xRawMax);
   
    Serial.print(", Y: ");
    Serial.print(yRawMin);
    Serial.print("-");
    Serial.print(yRawMax);
   
    Serial.print(", Z: ");
    Serial.print(zRawMin);
    Serial.print("-");
    Serial.print(zRawMax);
    Serial.println();
    Serial.print(xRaw);
    Serial.print(", ");
    Serial.print(yRaw);
    Serial.print(", ");
    Serial.print(zRaw);
   
    // Convert raw values to 'milli-Gs"
    long xScaled = map(xRaw, xRawMin, xRawMax, -1000, 1000);
    long yScaled = map(yRaw, yRawMin, yRawMax, -1000, 1000);
    long zScaled = map(zRaw, zRawMin, zRawMax, -1000, 1000);
 
    // re-scale to fractional Gs
    float xAccel = xScaled / 1000.0;
    float yAccel = yScaled / 1000.0;
    float zAccel = zScaled / 1000.0;
 
 
    Serial.print(" :: "); // affichage donnée accéléromètre
    Serial.print(xAccel);
    Serial.print("G, ");
    Serial.print(yAccel);
    Serial.print("G, ");
    Serial.print(zAccel);
    Serial.println("G");
    fusee = SD.open("donnees.txt", FILE_WRITE);
    fusee.print(xAccel);
    fusee.print("   ,");
    fusee.print(yAccel);
    fusee.print("   ,");
    fusee.println(zAccel);
    fusee.close(); 
  delay(500);
  }
}
int ReadAxis(int axisPin)
{
  long reading = 0;
  analogRead(axisPin);
  delay(1);
  for (int i = 0; i < sampleSize; i++)
  {
    reading += analogRead(axisPin);
  }
  return reading/sampleSize;
}

void parachuteSecours() // timer de déploiment en cas de non fonctionnement du déclenchement auto
{
if (bouton == LOW)
{
  bouton = HIGH;
  precedent = millis();
}
if (bouton ==HIGH)
{
  actu = millis();
  if(actu - precedent > 10000)
  {
     digitalWrite(relais , LOW);
  }
}
//EN COURS

  }
 

void pressiond()
{ //lecture pression
Serial.println(analogRead(pression));
}
void loop()
{
  donne();
  Serial.println(analogRead(pression));

  boolean etatBouton=digitalRead(pinBouton); //debut timer parachute
    Serial.println(etatBouton);
  if (etatBouton == 0)
  {

     parachuteSecours();
     
  }

}


pomme-poire

salut,

tu devrais poster ton "gros" code

garde une poignée d'ouverture à ton parachute !

68tjs

#2
Mar 28, 2019, 06:53 pm Last Edit: Mar 28, 2019, 06:54 pm by 68tjs
Je suis toujours émerveillé quand je vois des personnes qui dise MON code et que dans ce code on trouve des commentaires et explications en anglais.

C'est fantastique la jeune génération serait-elle devenue parfaitement  "fluent english" ?

jfs

#3
Mar 28, 2019, 07:01 pm Last Edit: Mar 28, 2019, 07:02 pm by jfs
C'est marrant, parce que chaque fois qu'un sujet passe par le Bakapoubelle, il perd cette partie :

Bonjour à tous, je reviens vers vous concernant le projet de Terminale en SI.
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

Zazu51

De 1 certes j'ai repris des bouts de codes içi et là, surtout par l'écriture de la carte sd.
De 2, je n'ai pas mis que c'était pour le projet de Terminale car j'ai créer un sujet cette après midi vers 14h30, j'ai indiqué que c'était pour un projet et mon post a disparu...
Ceci est le code pour tout ce que dois faire le code, c'est à dire des mesures d'accélération et de 2 capteurs de pressions qui comme je l'ai dit ne fonctionne pas quand je l'implémente dans le code.

jfs

#5
Mar 28, 2019, 07:17 pm Last Edit: Mar 28, 2019, 07:35 pm by jfs
De 2, je n'ai pas mis que c'était pour le projet de Terminale car j'ai créer un sujet cette après midi vers 14h30, j'ai indiqué que c'était pour un projet et mon post a disparu...

Il a surtout disparu parce que le titre était merdique et que je t'ai demandé de le changer avant de mettre un autre post... et tu as continué ton sujet comme si rien n'avait été demandé.

De plus il est bien stipulé dans la charte que les projets scolaires doivent être déclarés comme tels.... donc c'est pas ça qui va faire que les sujets disparaissent.
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

jfs

#6
Mar 28, 2019, 07:20 pm Last Edit: Mar 28, 2019, 07:22 pm by jfs
En plus c'est juste le troisième sujet que tu ouvres à propos du même capteur de pression.....

Donc en gros tu relis le règlement du forum francophone et la charte, tu t'y conformes ou alors poste directement dans le Bak à poux bêle 2019 dans le bar.... ça m'évitera du boulot
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

fdufnews

Y'a rien qui te choque là:
Code: [Select]
float pression = A5;

.....

Serial.println(analogRead(pression));

C'est une remarque que l'on t'a faite il y a quelques jours il me semble.

Et là il n'y a rien qui te choque non plus:
Code: [Select]
const int ledR = 1;

Si je te dis que D0 et D1 sont utilisés pour la liaison série, ça te parle?

Zazu51

Pour le float pression, peut être que ce n'est pas le bon type de variable, j'ai essayé avec plusieurs et a chaque fois le même résultat.
Et non, je ne savais pas que D0 et D1 était pour la liaison série ^^
Je n'ai même pas eu le temps de lire ton message que le sujet était déjà supprimé...

al1fch

#9
Mar 28, 2019, 08:15 pm Last Edit: Mar 28, 2019, 08:24 pm by al1fch
Bonsoir
Quote
Pour le float pression, peut être que ce n'est pas le bon type de variable, j'ai essayé avec plusieurs et a chaque fois le même résultat.
Au final tu gagnerai du temps en faisant l'effort de comprendre le sens de ce que tu écris au lieu de tester aveuglément tout un tas de combinaisons en espérant que ça 'tombe en marche'.
Quote
Et non, je ne savais pas que D0 et D1 était pour la liaison série
C'est visible sur le schéma de la carte
Quote
Je n'ai même pas eu le temps de lire ton message que le sujet était déjà supprimé...
A cette période de l'année il vaut mieux que le ménage soit bien et vite fait




fdufnews

Pour le float pression, peut être que ce n'est pas le bon type de variable, j'ai essayé avec plusieurs et a chaque fois le même résultat.
Tu as bien réussi à le faire pour les autres sorties
Code: [Select]
const int yInput = A1;

Zazu51

Même en changeant le type de variable, j'obtiens toujours le même résultat : 1023.
Avec un code tout basique
 
Code: [Select]
const int pression = A5;
float pressionPas;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  pressionPas = analogRead(pression);
  Serial.println(pressionPas);
  delay(500);
}

Cela fonctionne parfaitement. C'est pour cela que j'ai créer ce post...

al1fch

#12
Mar 28, 2019, 08:43 pm Last Edit: Mar 28, 2019, 08:49 pm by al1fch

fais l'effort de parcourir  attentivement  ligne à ligne le programme 'patchwork' en te demandant le rôle de chaque ligne

fdufnews

#13
Mar 28, 2019, 09:08 pm Last Edit: Mar 28, 2019, 09:08 pm by fdufnews
Même en changeant le type de variable, j'obtiens toujours le même résultat : 1023.
OK mais en corrigeant toutes les conneries les unes après les autres tu finiras par faire fonctionner ton programme.
Là, ça en fait une de moins.

Go Up