Arduino Forum

International => Français => Topic started by: Zazu51 on Mar 28, 2019, 05:30 pm

Title: Code Capteur de pression
Post by: Zazu51 on Mar 28, 2019, 05:30 pm
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();
     
  }

}

Title: Re: Code Capteur de pression
Post by: pomme-poire on Mar 28, 2019, 06:19 pm
salut,

tu devrais poster ton "gros" code

garde une poignée d'ouverture à ton parachute !
Title: Re: Code Capteur de pression
Post by: 68tjs on Mar 28, 2019, 06:53 pm
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" ?
Title: Re: Code Capteur de pression
Post by: jfs on Mar 28, 2019, 07:01 pm
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.
Title: Re: Code Capteur de pression
Post by: Zazu51 on Mar 28, 2019, 07:13 pm
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.
Title: Re: Code Capteur de pression
Post by: jfs on Mar 28, 2019, 07:17 pm
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.
Title: Re: Code Capteur de pression
Post by: jfs on Mar 28, 2019, 07:20 pm
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
Title: Re: Code Capteur de pression
Post by: fdufnews on Mar 28, 2019, 07:39 pm
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?
Title: Re: Code Capteur de pression
Post by: Zazu51 on Mar 28, 2019, 08:05 pm
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é...
Title: Re: Code Capteur de pression
Post by: al1fch on Mar 28, 2019, 08:15 pm
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



Title: Re: Code Capteur de pression
Post by: fdufnews on Mar 28, 2019, 08:21 pm
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;
Title: Re: Code Capteur de pression
Post by: Zazu51 on Mar 28, 2019, 08:30 pm
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...
Title: Re: Code Capteur de pression
Post by: al1fch on Mar 28, 2019, 08:43 pm

fais l'effort de parcourir  attentivement  ligne à ligne le programme 'patchwork' en te demandant le rôle de chaque ligne
Title: Re: Code Capteur de pression
Post by: fdufnews on Mar 28, 2019, 09:08 pm
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.