letssteam / pxt-lets-steam

MIT License
3 stars 0 forks source link

Distance sensor only update value every 500ms #111

Closed jnthbdn closed 2 years ago

jnthbdn commented 2 years ago

D'après Manu, le capteur de distance ne change de valeur qu'après 500ms, or lors d'un relevé toutes les 100 ms, les valeurs ne changent qu'une fois tous les 5 mesures.

jnthbdn commented 2 years ago

Le paramètre samplePeriod (commun à tous les object héritant de la classe Sensor de codal), est initialisé à sa valeur par défaut SENSOR_DEFAULT_SAMPLE_PERIOD (link) qui vaut 500ms (link).

Pour corriger le problème il suffit de remplacer le paramètre par defaut lors de l'appel du constructeur dans Makecode (link)

jnthbdn commented 2 years ago

Un problème plus profonds semble rendre difficile l'utilisation du capteur de distance, pour une raison étrange, les tentatives de lecture prennent un temps considérable.

Le changement de prise de mesure (dans CODAL) "One shot" vers un prise en "continue" devrait régler une partie du problème.

Ceci étant, il reste à comprendre pourquoi sous MakeCode les valeurs de distances n'ont que peu de sens (grosse variation, voir valeur adhérentes)

jnthbdn commented 2 years ago

Après investigation la lecture de la valeur de la distance est suffisamment rapide (<100ms), lors de son écriture sur le port série. Or dès l'écritures sur un écran (OLED ou LCD) alors les performances deviennent catastrophique...

jnthbdn commented 2 years ago

Le problème vient du temps d'initialisation du VL53, en abaissant le samplePeriod trop bas (100ms dans notre cas), cela a pour effet, de "mesurer" une distance (par le scheduler de Sensor) avant la fin de l'initialisation du capteur.

En utilisant un samplePeriod élevé (1000ms) lors de la construction de l'object Sensor, puis dans le corps du constructeur de l'objet MakeCode WDistance d'une mise à la période souhaitée (100ms) via sensor->setPeriod, cela laisse le temps au capteur de terminer sa mise en service.

Cf le commit 0ecec56