Archive 07/10/2020.

Résultat n’affiche que la température et la pression

faten_l

J’ai suivit tous les instructions mais le terminal toujours n’affiche que la température et la pression
Pressure: 984hPa, Temperature: 32.50°C
Pressure: 984hPa, Temperature: 32.52°C
Pressure: 984hPa, Temperature: 32.51°C
Pressure: 984hPa, Temperature: 32.54°C
Pressure: 984hPa, Temperature: 32.52°C
Pressure: 984hPa, Temperature: 32.54°C
Pressure: 984hPa, Temperature: 32.53°C
Pressure: 984hPa, Temperature: 32.54°C
Pressure: 984hPa, Temperature: 32.53°C
Pressure: 984hPa, Temperature: 32.55°C
Pressure: 984hPa, Temperature: 32.54°C
Pressure: 984hPa, Temperature: 32.53°C
malgré j’ai ajouté le deuxieme capteur.
une autre question si possible: pourquoi la boucle while du capteur lps331ap est écrite dans la fonction main alors que celle du capteur lsm303dlhc est écrite dans the thread handler function?
Merci en avance

aabadie2

Bonjour,

Est-ce que vous pouvez poster ici le contenu du fichier main.c ?

faten_l

Bonjour,
Pour la première question c’est corrigé et ça marche bien. Pouvez vous me répondre sur la 2eme question SVP.
merci.

aabadie2

Pour la deuxième question, on veut lire les capteurs à des intervalles différents (500ms et 2s) et c’est plus simple programmatiquement de le faire dans 2 thread séparés. Il y a aussi un intérêt didactique de le faire dans 2 thread séparés: montrer l’utilisation des threads dans RIOT.
Cela dit, utiliser un deuxième thread nécessite plus de mémoire puisqu’il faut allouer une stack pour le deuxième thread donc si on est contraint en mémoire, il faudrait le faire dans un seul thread (ici main).

faten_l

Merci pour votre réponse.
SVP j’ai rencontré un problème lors de l’exécution du travail demandé. J’ai éditer le fichier main.c et le fichier makefile mais si j’exécute je trouve ce résultat avec une boucle infinie
main(): This is RIOT! (Version: 2020.01)
Accelerometer x: -8 y: 156 z: -664
Magnetometer x: 181 y: 67 z: 194
Pressure: 979hPa, Temperature: 34.75°C
Gyro data [dps] - X: 0 Y: 0 Z: 0
*** RIOT kernel panic:
HARD FAULT HANDLER

*** rebooting…

Accelerometer x: -8 y: 156 z: -664
Magnetometer x: 181 y: 67 z: 194
Pressure: 979hPa, Temperature: 34.75°C
Gyro data [dps] - X: 1 Y: 0 Z: 0
*** RIOT kernel panic:
HARD FAULT HANDLER

*** rebooting…
Pouvez vous SVP m’aider à comprendre d’ou peut venir l’erreur

aabadie2

Est-ce que vous pouvez aussi poster le contenu de main.c ?

faten_l

merci pour votre réponse.
C’est aussi resolu et le travail demandė a été envoyé. Merci une seconde fois.

willsteve

Bonjour,
J’ai le même problème, mon résultat n’affiche que la température et la pression. Je vous joins le contenu de mon fichier main.c :

#include <stdio.h>

#include "thread.h"
#include "xtimer.h"

/* Add lps331ap related include here */
#include "lpsxxx.h"
#include "lpsxxx_params.h"

/* Add lsm303dlhc related include here */
#include "lsm303dlhc.h"
#include "lsm303dlhc_params.h"

/* Declare the lps331ap device variable here */
static lpsxxx_t lpsxxx;

/* Declare the lsm303dlhc device variable here */
static lsm303dlhc_t lsm303dlhc;


static char stack[THREAD_STACKSIZE_MAIN];

static void *thread_handler(void *arg)
{
    (void)arg;

    /* Add the lsm303dlhc sensor polling endless loop here */
    while (1) {
        lsm303dlhc_3d_data_t mag_value;
        lsm303dlhc_3d_data_t acc_value;
        lsm303dlhc_read_acc(&lsm303dlhc, &acc_value);
        printf("Accelerometer x: %i y: %i z: %i\n",
               acc_value.x_axis, acc_value.y_axis, acc_value.z_axis);
        lsm303dlhc_read_mag(&lsm303dlhc, &mag_value);
        printf("Magnetometer x: %i y: %i z: %i\n",
               mag_value.x_axis, mag_value.y_axis, mag_value.z_axis);
        xtimer_usleep(500 * US_PER_MS);
    }

    return 0;
}

int main(void)
{
    /* Initialize the lps331ap sensor here */
    lpsxxx_init(&lpsxxx, &lpsxxx_params[0]);
    
    /* Initialize the lsm303dlhc sensor here */
    lsm303dlhc_init(&lsm303dlhc, lsm303dlhc_params);
    
    
    thread_create(stack, sizeof(stack), THREAD_PRIORITY_MAIN - 1,
               0, thread_handler, NULL, "lsm303dlhc");
    
    /* Add the lps331ap sensor polling endless loop here */
    while (1) {
        uint16_t pres = 0;
        int16_t temp = 0;
        lpsxxx_read_temp(&lpsxxx, &temp);
        lpsxxx_read_pres(&lpsxxx, &pres);
        printf("Pressure: %uhPa, Temperature: %u.%u°C\n",
               pres, (temp / 100), (temp % 100));
        xtimer_sleep(2);
    }
    
    return 0;
}

Merci d’avance pour vos éclaircissements !

willsteve

Je viens de ressayer en relançant une nouvelle expérience et maintenant tout est correct. :slightly_smiling_face: