Hi,
I've been working on an arduino project lately and i can't figure out an issue.
My UNO is linked to both a LCD screen TC1602A-01T and a Relay SRD-05DC-SL-C.
If my relay is not connected to the 24V power source, the LCD works perfectly, but as soon as I turn on the 24V, it print random characters.
I've put an external source, as i feared it was the backlight who messed all up, but it didn't solve the thing.
Only one relay but the circuit is the same.
I'm working on a BreadBoard, but the two components are at both end of it. As shown below:
During a normal functionnement:
And as soon as the relay is under the 24V tension, this kind of things appen:
And the character often jump one place to the left each iteration, and sometimes the correct number is printed.
Here is my code:
#include <LiquidCrystal.h>
//import bibliothèque lcd, définition des pins du lcd que l'on utilise sur l'arduino (dans l'ordre: RS, E, D4, D5, D6,D7)
LiquidCrystal lcd(2, 3, 8, 9, 10, 11);
//definition des constantes et pins
long nbCycle = 10000;
const int pinStart = 12;
const int pinPause = 13;
bool val_bouton_start = 0;
bool val_pause = 0;
void setup() {
// le lcd vas avoir 2 rangé de 16 caractères
lcd.begin(16, 2);
lcd.clear();
//affichage des paramètres initiaux
lcd.print("Nb Cycle:");
lcd.print(nbCycle);
//def des pins, on en utilise deux pour les boutons debut et pause/reprise. Le pin 5 sert à controler le relais
pinMode(pinStart, INPUT);
pinMode(pinPause, INPUT);
pinMode(5, OUTPUT);
Serial.begin(9600);
}
void loop() {
// depart seulement quand le bouton de depart est pressé
val_bouton_start = digitalRead(pinStart);
if (val_bouton_start == HIGH) {
//affichage des infos sur le lcd
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Progression");
lcd.setCursor(7, 1);
lcd.print("/");
lcd.print(nbCycle);
//debut du cyclage
for (long i = 1; i <= nbCycle; i++) {
digitalWrite(5, HIGH);
//temps à définir selon l'essais
delay(500);
digitalWrite(5, LOW);
delay(500);
//à chaque fin de cycle on vérifie si la pause à été enclenché
val_pause = digitalRead(pinPause);
if (val_pause) {
lcd.setCursor(0, 0);
lcd.print("Pause ");
delay(50);
val_pause = digitalRead(pinStart);
//puis on regarde quand la reprise est enclenché (1s de délais entre les deux vérifications
while (val_pause == 0) {
delay(50);
val_pause = digitalRead(pinStart);
}
lcd.setCursor(0, 0);
lcd.print("Progression ");
}
//màj du nombre de cycle effectué
lcd.setCursor(0, 1);
lcd.print(i);
//communication avec la raspberryPI
Serial.println(i);
}
//une fois sortis de la boucle, le cyclage est terminé, on affiche que c'est finis
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Essais Accomplis");
lcd.setCursor(0, 1);
lcd.print("Cycles: ");
lcd.print(nbCycle);
}
}