Bonjour,
J’ai besoin d’aide pour faire défiler du texte affichage de température sur une matrice Led.
J’utilise comme matrice le WS2812 et comme sonde de température/humidité le DHT11 avec un Arduino Nano (de chez Elegoo). J’ai mis un code ensemble (en googlant à gauche à droite) qui fonctionne, sauf pour le défilement du texte que je n’arrive pas à programmer comme je le voudrais, à savoir :
Étape 1 : La sonde relève la température. (sous-fonction void mesure() )
Étape 2 : La température est affichée sur la matrice (sous-fonction void affichage() ) pendant 4000ms.
Étape 3 : La température est scrollée rapidement vers le bas (sous fonction void defilement()) et retour à l’Etape 1 pour une nouvelle mesure et réaffichage.
Mon problème est que l’affichage Etape 1 et le scroll Etape 3 sont toujours à la même vitesse. Je n’arrive pas à programmer 2 vitesses différentes.
J’ai essayé de placer un delay(4000) juste après la déclaration de la sous fonction affichage, mais ça ne fonctionne pas, car le scroll passe lui aussi à 4000ms. Il semble que si j’ajoute plusieurs fonctions delay dans le code, uniquement la plus lente est prise en compte. Donc soit tout l’affichage s’exécute à une vitesse 4000s soit à 150s . (en commentant delay(4000).
Je voulais savoir si l’utilisation de delay est correcte ou s’il y a une autre fonction semblable qui fera le job. Si vous avez une indication pour modifier le code, elle est la bienvenue
Je joins mon code, c’est la partie void loop qui pose problème.
Grand merci pour tout tuyau.
#include <Adafruit_NeoMatrix.h>
#include <gamma.h>
#include <Adafruit_GrayOLED.h>
#include <gfxfont.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SPITFT.h>
#include <Adafruit_SPITFT_Macros.h>
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#include <dht_nonblocking.h>
#define DHT_SENSOR_TYPE DHT_TYPE_11
#include "DHT.h"
#define PIN 3 //PIN D3 on Arduino Nano towards Led Matrix
#define DHTPIN 2 // PIN D2 on Arduino Nano towards DHT
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE); // on indique la broche et le type de capteur
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(32, 8, PIN,
NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT +
NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800);
const uint16_t colors[] = {
matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(255, 255, 0),matrix.Color(0, 0, 255), matrix.Color(255, 0, 255), matrix.Color(0, 255, 255), matrix.Color(255, 255, 255)};
//parameters DHT
static const int DHT_SENSOR_PIN = 2;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
dht.begin(); // initialisation du capteur
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(5);
//matrix.setTextColor(matrix.Color(80,255,0));
matrix.setTextColor(colors[0]);
}
// temperature = readTemperature ();
int x = matrix.width();
int pass = 4;
float temp;
float hum;
int z = 1;
int y = -1;
void loop()
{
mesure();
affichage();
//delay(4000);
defilement();
}
void mesure()
{
hum = dht.readHumidity(); // lecture de la valeur de l'humidité
temp = dht.readTemperature(); // lecture de la valeur de la température
if (isnan(temp) || isnan(hum)) Serial.println( "Lecture impossible !"); // test erreur
else
Serial.print("Humidite :"); // affichage message
Serial.print(hum); // affichage valeur humidité
Serial.print(" %\t");
Serial.print("Temperature :");// affichage message
Serial.print(temp); // affichage valeur température
Serial.println(" *C");
// Serial.print( "T = " );
// Serial.print( temperature, 1 );
// Serial.print( " deg. C, H = " );
//Serial.print( humidity, 1 );
//Serial.println( "%" );
}
void affichage()
{
matrix.setCursor(z, y);
matrix.setTextColor(colors[pass]);
matrix.print((temp));
delay(4000);
}
void defilement()
{
matrix.setCursor(z, y);
matrix.setTextColor(colors[pass]);
matrix.print((temp));
y = y+1;
if(y >= 10) y = 0;
matrix.fillScreen(0);
matrix.setCursor(z, y);
//matrix.print((temp));
// if( --x < -30 )
//{
//x = matrix.width();
//if(++pass >= 0) pass = 0;
matrix.setTextColor(colors[pass]);
matrix.print((temp));
// delay(150); }
matrix.show();
}