Bonjours à tous !
J'ai adpaté les prog. que j'ai vu dans le Playground pour faire fonctionner mon LCD 1x16 (qui marche en 2x8) sur 4 bits. Ensuite j'ai rajouté un petit bout pour le commander avec le port série en passant par le Serial Monitor, mais quand je tape un mot de 6 caractères par exemple, il y a 10 cases qui sont noires, alors qu'elles devraient êtres vides. Je voudrais donc savoir comment résoudre ce probléme ? et comment indiquer au programme qu'il n'y a en entrée que 6 caractéres, c'est à dire quel est l'équivalent de 'NULL' pour l'entrée série ? :-/
Merci
int DI = 12;
int RW = 11;
int DB[] = {
7, 8, 9, 10};
int Enable = 2;
int count = 0;
char texte[16] = {
' ', ' ', 'A', 'r', 'd', 'u', 'i', 'n', 'o', 'B', 'o', ' a', 'r', 'd', ' ', ' '};
int a = 0;
int i;
int decalageLettre = 0;
void LcdCommandWrite(int value) {
int i = 0;
int value1 = 0;
value1 = value;
value1 >>= 4;
for (i=DB[0]; i <= DI; i++) {
digitalWrite(i,value1 & 01);
value1 >>= 1;
}
digitalWrite(Enable,LOW);
delayMicroseconds(1);
digitalWrite(Enable,HIGH);
delayMicroseconds(1);
digitalWrite(Enable,LOW);
delayMicroseconds(1);
delay(1);
for (i=DB[0]; i <= DB[3]; i++) {
digitalWrite(i,value & 01);
value >>= 1;
}
value >>= 4;
for (i=RW; i <= DI; i++) {
digitalWrite(i,value & 01);
value >>= 1;
}
digitalWrite(Enable,LOW);
delayMicroseconds(1);
digitalWrite(Enable,HIGH);
delayMicroseconds(1);
digitalWrite(Enable,LOW);
delayMicroseconds(1);
}
void LcdDataWrite(int value) {
int i = 0;
int value1 = 0;
digitalWrite(DI, HIGH);
digitalWrite(RW, LOW);
value1 =value;
value1 >>= 4;
for (i=DB[0]; i <= DB[3]; i++) {
digitalWrite(i,value1 & 01);
value1 >>= 1;
}
digitalWrite(Enable,LOW);
delayMicroseconds(1);
digitalWrite(Enable,HIGH);
delayMicroseconds(1);
digitalWrite(Enable,LOW);
delayMicroseconds(1);
delay(1);
digitalWrite(DI, HIGH);
digitalWrite(RW, LOW);
for (i=DB[0]; i <= DB[3]; i++) {
digitalWrite(i,value & 01);
value >>= 1;
}
digitalWrite(Enable,LOW);
delayMicroseconds(1);
digitalWrite(Enable,HIGH);
delayMicroseconds(1);
digitalWrite(Enable,LOW);
delayMicroseconds(1);
}
void setup (void) {
int i = 0;
for (i=Enable; i <= DI; i++) {
pinMode(i,OUTPUT);
}
delay(100);
LcdCommandWrite(0x03);
delay(64);
LcdCommandWrite(0x03);
delay(50);
LcdCommandWrite(0x03);
delay(50);
LcdCommandWrite(0x02);
delay(50);
LcdCommandWrite(0x28);
delay(20);
LcdCommandWrite(0x06);
delay(20);
LcdCommandWrite(0x0E);
delay(20);
LcdCommandWrite(0x01);
delay(100);
LcdCommandWrite(0x80);
delay(20);
LcdCommandWrite(0x0E);
delay(10);
Serial.begin(9600);
}
void serialInput() {
for(a=0; a<16; a++) {
texte[a] = Serial.read();
}
}
void loop (void) {
if(Serial.available() > 0) {
serialInput();
}
LcdCommandWrite(0x02);
delay(10);
for(i=0; i<8; i++) {
LcdDataWrite(texte[i]);
delay(decalageLettre);
}
LcdCommandWrite(0xC0);
delay(10);
for(i=8; i<16; i++) {
LcdDataWrite(texte[i]);
delay(decalageLettre);
}
delay(1000);
}