Compteur et affichage lcd

Bonjour,
Je viens d'intégrer au groupe et j'aimerais avoir vos aides ou suggestions pour mon petit projet.
Je précise que je suis un amateur débutant en électronique et dans l'Arduino donc ne soyer pas surpris si je comprends mal les choses ou si je confonds:).

Je souhaiterais faire un compteur et afficher l'incrémentation du décompte sur un écran lcd parallèle (16x2).

Mon petit projet consiste à gérer l'ouverture et la fermeture d'un interrupteur et l'envoi d'une tension 120Vdc.
J'ai déjà rédigé le code pour cette partie et ça fonctionne nickel. Voici mon code ci-dessous.
Maintenant mon souhait est de mettre un compteur qui s'incrémentera à chaque changement d'état de l'interrupteur (INTER) uniquement et pas le 120V.
J'ai réussi à afficher des mots sur l'écran lcd juste pour m'entrainer mais je n'arrive pas à combiner les deux codes pour afficher l'incrémentation du compteur à chaque fois que l'interrupteur change d'état. µ

J'ai déjà regardé sur internet assez longtemps en vain.

Pouvez-vous m'orienter s'il vous plaît ?

Merci d'avance.

// La commande de l'interrupteur se fait par la broche 2 de l'Arduino
#define INTER 2

// Le contrôl de l'alim 120V se fait avec la broche 4 de l'Arduino connectée à l'entrée du driver de MOSFET
#define ALIM_120V 4
 
void setup() {

  
// Déclaration des broches 2 et 4 de l'arduino comme sorties
  pinMode(INTER, OUTPUT);
  pinMode(ALIM_120V, OUTPUT);
}
 
void loop() {


  // Passer la sortie 4 de l'Arduino à l'état HAUT pour avoir 0 en sortie du driver afin de ne pas piloter le MOSFET
  digitalWrite(ALIM_120V, HIGH);

  // Attendre 1 seconde avant de passer aux instructions suivantes
  delay(1000);
  
  // Passer la sortie 2 de l'Arduino à l'état HAUT pour fermer l'interrupteur
  digitalWrite(INTER, HIGH);
   
  // Après fermeture de l'interrupteur, attendre 3 secondes avant d'activer le MOS et envoyer du 120V
  delay(3000);
   
  // Passer la sortie 4 de l'Arduino à l'état BAS pour envoyer le 120V
  digitalWrite(ALIM_120V, LOW);

  // Après envoi du 120V, attendre 9 seconde avant d'arrêter cette tension
  delay(9000);

  // Passer la sortie 4 de l'Arduino à l'état HAUT pour arrêter le 120V
  digitalWrite(ALIM_120V, HIGH);
  
  // Après arrêt du 120V, attendre 1 seconde avant d'ouvrir l'interrupteur
  delay(1000);

  // Passer la sortie 2 de l'Arduino à l'état BAS pour ouvrir l'interrupteur
  digitalWrite(INTER, LOW);

  // Après ouverture de l'interrupteur, attendre 3 seconde avant d'envoyer du 120V
  delay(3000);

  // Passer la sortie 4 de l'Arduino à l'état BAS pour envoyer le 120V
  digitalWrite(ALIM_120V, LOW);

  // Après envoi du 120V, attendre 9 seconde avant d'arrêter cette tension
  delay(9000);
 
}

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Bonjour bricoelec

Mets, également, ce code, ça aidera à combiner les deux.

Cordialement
jpbbricole

@jpbricole

Voici le code:

#include <LiquidCrystal.h>

const int rs = 12, en = 11, d4 = 10, d5 = 9, d6 = 8, d7 = 7;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);


void setup() {
  
  lcd.begin(16, 2);

}

void loop() {
  lcd.setCursor(0,0);
 lcd.print("BONJOUR !");
 lcd.setCursor(0,1);
 lcd.print("BIENVENUE !");
}

Bonsoir bricoelec

La première chose, est de définir une variable de comptage de INTER:
int cptINTER = 0; // Comptage des transitions d'INTER

Variable qui est incrémentée à la transition à HIGH de INTER:

	digitalWrite(INTER, HIGH);
	cptINTER ++; // Incrémentation du compteur

ensuite il ne reste plus qu'à afficher:

	lcd.setCursor(0,0);
	lcd.print("INTER=");
	lcd.setCursor(7,0);
	lcd.print(String(cptINTER) + " ");

Si tu mets la console de l'IDE à 115200, tu verras l'echo du comptage:

Le programme:

#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 10, d5 = 9, d6 = 8, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// La commande de l'interrupteur se fait par la broche 2 de l'Arduino
#define INTER 2
int cptINTER = 0; // Comptage des transitions d'INTER

// Le contrôl de l'alim 120V se fait avec la broche 4 de l'Arduino connectée à l'entrée du driver de MOSFET
#define ALIM_120V 4

void setup() {
	Serial.begin(115200);
	lcd.begin(16, 2);
	
	// Déclaration des broches 2 et 4 de l'arduino comme sorties
	pinMode(INTER, OUTPUT);
	pinMode(ALIM_120V, OUTPUT);
}

void loop() {


	// Passer la sortie 4 de l'Arduino à l'état HAUT pour avoir 0 en sortie du driver afin de ne pas piloter le MOSFET
	digitalWrite(ALIM_120V, HIGH);

	// Attendre 1 seconde avant de passer aux instructions suivantes
	delay(1000);
	
	// Passer la sortie 2 de l'Arduino à l'état HAUT pour fermer l'interrupteur
	digitalWrite(INTER, HIGH);
	cptINTER ++; // Incrémentation du compteur
	lcd.setCursor(0,0);
	lcd.print("INTER=");
	lcd.setCursor(7,0);
	lcd.print(String(cptINTER) + " ");
	Serial.println("INTER = " + String(cptINTER));
	
	// Après fermeture de l'interrupteur, attendre 3 secondes avant d'activer le MOS et envoyer du 120V
	delay(3000);
	
	// Passer la sortie 4 de l'Arduino à l'état BAS pour envoyer le 120V
	digitalWrite(ALIM_120V, LOW);

	// Après envoi du 120V, attendre 9 seconde avant d'arrêter cette tension
	delay(9000);

	// Passer la sortie 4 de l'Arduino à l'état HAUT pour arrêter le 120V
	digitalWrite(ALIM_120V, HIGH);
	
	// Après arrêt du 120V, attendre 1 seconde avant d'ouvrir l'interrupteur
	delay(1000);

	// Passer la sortie 2 de l'Arduino à l'état BAS pour ouvrir l'interrupteur
	//digitalWrite(INTER, LOW);

	// Après ouverture de l'interrupteur, attendre 3 seconde avant d'envoyer du 120V
	delay(3000);

	// Passer la sortie 4 de l'Arduino à l'état BAS pour envoyer le 120V
	digitalWrite(ALIM_120V, LOW);

	// Après envoi du 120V, attendre 9 seconde avant d'arrêter cette tension
	delay(9000);
	
}

N'hésites pas à poser des questions :wink:

PS: Je n'ai pas ce type d'affichage, donc pas pu essayer :wink:

A+
Bonne soirée
jpbbricole

Merci pour votre réponse.
Si je comprends bien, le compteur s'incrémente que lorsque l'INTER est en état HIGH et non en état LOW.
Je voulais avoir l'incrémentation dans les deux cas (HIGH et LOW)

@jpbbricole t'as montré comment le faire lorsqu'on met INTER à HIGH.
Il suffit de faire la même chose lorsque tu mets INTER à LOW.

D'accord, je vais essayer tout ça demain et je vous dirai.
Merci et bonne soirée !

Comme les 2 changements provoquent les mêmes actions (incrément et affichage), pour éviter la répétition de lignes de code, j'ai ajouté une fonction qui regroupe le tout et qui est appelée avec l'état de INTER:

void changeINTER(int etat) // Change l'état de INTER

Essaies ça (je n'ai pas pu essayer en vrai) et inspires t'en pour la suite :wink:

#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 10, d5 = 9, d6 = 8, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// La commande de l'interrupteur se fait par la broche 2 de l'Arduino
#define INTER 2
int cptINTER = 0; // Comptage des transitions d'INTER

// Le contrôl de l'alim 120V se fait avec la broche 4 de l'Arduino connectée à l'entrée du driver de MOSFET
#define ALIM_120V 4

void setup() {
	Serial.begin(115200);
	lcd.begin(16, 2);
	
	// Déclaration des broches 2 et 4 de l'arduino comme sorties
	pinMode(INTER, OUTPUT);
	pinMode(ALIM_120V, OUTPUT);
}

void loop() {


	// Passer la sortie 4 de l'Arduino à l'état HAUT pour avoir 0 en sortie du driver afin de ne pas piloter le MOSFET
	digitalWrite(ALIM_120V, HIGH);

	// Attendre 1 seconde avant de passer aux instructions suivantes
	delay(1000);
	
	// Passer la sortie 2 de l'Arduino à l'état HAUT pour fermer l'interrupteur
  changeINTER(HIGH);
	
	// Après fermeture de l'interrupteur, attendre 3 secondes avant d'activer le MOS et envoyer du 120V
	delay(3000);
	
	// Passer la sortie 4 de l'Arduino à l'état BAS pour envoyer le 120V
	digitalWrite(ALIM_120V, LOW);

	// Après envoi du 120V, attendre 9 seconde avant d'arrêter cette tension
	delay(9000);

	// Passer la sortie 4 de l'Arduino à l'état HAUT pour arrêter le 120V
	digitalWrite(ALIM_120V, HIGH);
	
	// Après arrêt du 120V, attendre 1 seconde avant d'ouvrir l'interrupteur
	delay(1000);

	// Passer la sortie 2 de l'Arduino à l'état BAS pour ouvrir l'interrupteur
  changeINTER(LOW);
	// Après ouverture de l'interrupteur, attendre 3 seconde avant d'envoyer du 120V
	delay(3000);

	// Passer la sortie 4 de l'Arduino à l'état BAS pour envoyer le 120V
	digitalWrite(ALIM_120V, LOW);

	// Après envoi du 120V, attendre 9 seconde avant d'arrêter cette tension
	delay(9000);
	
}

void changeINTER(int etat) // Change l'état de INTER
{
	digitalWrite(INTER, etat);

	cptINTER ++; // Incrémentation du compteur

	lcd.setCursor(0,0);
	lcd.print("INTER=");
	lcd.setCursor(7,0);
	lcd.print(String(cptINTER) + " ");
	Serial.println("INTER = " + String(cptINTER));
}

Bonne soirée
jpbbricole

Bonjour,
Ce programme me convient bien.
Je les mis dans les deux changements d'état et ça marche très bien pour le moment. Merci infiniment !
Je vais faire l'assemblage complet du matériel et tout tester.

Encore merci et bonne journée !