Aller au contenu

GO Print

double affichage lcd


zardiax

Messages recommandés

bonjour voila je suis en train de faire un projet et j'ai besoin de deux écran lcd un qui affiche l'heure et l'autre défile un message. Le problem c'est que l'heure s'actualise que quand le message a fait son déroulement et je ne veux pas çà il me faut donc un multitache mais je ne sais pas comment faire.

voici mon code actuellement:

#include <DS3231.h>
#include <LiquidCrystal.h>



DS3231  rtc(SDA, SCL);
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
LiquidCrystal lcd2(36, 34, 32, 30, 28, 26);
void setup() {
 rtc.begin();
 lcd.begin(16,2);
 
  lcd2.begin(16, 2);
  // Print a message to the LCD.
  lcd2.print("bonjour");
 
}
void loop() {
tim();
mes();

}

void tim () {

 lcd.setCursor(0,0);
 lcd.print("Time:  ");
 lcd.print(rtc.getTimeStr());
 
 lcd.setCursor(0,1);
 lcd.print("Date: ");
 lcd.print(rtc.getDateStr());
 rtc.setTime(24, 0, 0);     // Set the time to 12:00:00 (24hr format)
 rtc.setDate(8, 10, 2019);


}


void mes () {

{// scroll 13 positions (string length) to the left
  // to move it offscreen left:
  for (int positionCounter = 0; positionCounter < 13; positionCounter++) {
    // scroll one position left:
    lcd2.scrollDisplayLeft();
    // wait a bit:
    delay(150);
  }

  // scroll 29 positions (string length + display length) to the right
  // to move it offscreen right:
  for (int positionCounter = 0; positionCounter < 29; positionCounter++) {
    // scroll one position right:
    lcd2.scrollDisplayRight();
    // wait a bit:
    delay(150);
  }

  // scroll 16 positions (display length + string length) to the left
  // to move it back to center:
  for (int positionCounter = 0; positionCounter < 16; positionCounter++) {
    // scroll one position left:
    lcd2.scrollDisplayLeft();
    // wait a bit:
    delay(150);
  }

  // delay at the end of the full loop:
  delay(1000);
}
}

Lien vers le commentaire
Partager sur d’autres sites

Salut,

J'avais rencontré le problème lors de la fabrication d'un module de gestion d'aquarium récifal sur base arduino.

La mise à jour de l'affichage des paramètres et la mesure ce ceux-ci.

Je dois t'avouer que ça fait pas mal de temps que je ne me suis pas replongé dans la programmation, je ne vais donc pas te donner le code tout fait mais je peux te donner des pistes.

L'arduino ne fonctionne pas en RTOS (Real Time Operating System, qui permet de gérer en // des taches) d'origine. Je me souviens de tentatives à l'époque mais je ne sais pas ou ça en est aujourd'hui.

Si tu veux que l'horloge sois mise à jour pendant la diffusion du message il faut rappeler la fonction Time et la mise à jour de l'affichage dans la fonction message. Juste avant les fonctions delay par exemple je pense que ca pourrait le faire.

Par contre il ne faut pas rafraîchir trop fréquemment le LCD sinon tu as un effet de scintillement. 

 J'espère t'avoir aidé

Cdt

LC

ps: Using FreeRTOS multi-tasking in Arduino

Modifié (le) par miserovitch
Lien vers le commentaire
Partager sur d’autres sites

Il n'y a pas de réponse simple à ta demande : il va te falloir apprendre un peu plus la programmation pour réaliser ce que tu veux.

Je peux quand même te donner :

- une évidence : jamais de fonction delay() dans ton code, car c'est le signe d'un code "mal fichu" et ca bloque ton programme

- un lien : https://www.locoduino.org/spip.php?article78  Les cours sont très bien faits et il vaut mieux utiliser la bibliothèque LiquicrystalFast beaucoup plus rapide

- un autre lien avec articles d'une grande qualité : https://www.carnetdumaker.net/articles/faire-plusieurs-choses-la-fois-avec-une-carte-arduino/

Cela dit, la base c'est l'utilisation de millis() https://www.locoduino.org/spip.php?article6  et un peu plus poussé, les interruptions https://www.locoduino.org/spip.php?article84       

Modifié (le) par Vincent
  • +1 1
Lien vers le commentaire
Partager sur d’autres sites

+1 @Vincent pour les interruptions et timers.
Ça peut être contraignant mais c'est très utile.

Mais même sans, ici c'est juste le code qui n'est pas adapté à ce que tu veux.
Il suffirait de faire défiler le texte à chaque passage dans le main, et de mettre à jour l'heure seulement si besoin.

En passant, quand tu balances du code utilise les balises qui vont bien :

#include <stdio.h>

int main(void) {
  printf("Je suis du code dans la balise qui va bien. \o/");
  return 0;
}

C'est bien plus lisible. 🙂

Modifié (le) par Luvwahraan
  • Haha 1
  • +1 1
Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
  • Sur cette page :   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
  • YouTube / Les Imprimantes 3D .fr

×
×
  • Créer...