Salve a tutti,
prima di tutto un ciao a fosfori verdi. Appena arrivato nel forum.
Ho una Arduino mega 2560, con un LCD su seriale della Grifo (il QTP03) e sto giocherellando a connetterlo alla seriale. Parlerebbe anche I2C ma per ora la seriale mi rende le cose più veloci. Questo LCD retroilluminato 20 x 4 ha anche 3 tasti ed un buzzer. Fin qui tutto bene. Collegato al pc tramite porta seriale, tramite hyperterminal ci scrivo e leggo il valore restituito alla pressione di uno dei tre tasti (tasto 1 leggo 1, tasto 2 leggo2 e tasto 3 premuto mi leggo 3). Fatta questa prova tramite jumpers ho configurato l' LCD per lavorare con i livelli TTL della seriale e l' ho agganciato alla mia bellissima Mega 2560. Pin rx 15 e tx 14 (seriale a livelli TTL, giusto ?). Ebbene riesco a scrivere sull' LCD, a mandare quindi anche sequenze di escape per pulire lo shermo e far suonare il buzzer, ma quando vado a leggere dalla seriale, invece di trovare il valore che la scheda dell' LCD scrive alla pressione di uno dei tasti, non trovo nulla e nessun dato mi arriva. Questo lo sketch approntato con pezzetti di esempi, ne ho anche provati altri di sketch modificati all' uopo, ma nulla. Come mai non riesco a leggere dalla seriale secondo voi ? Scriverci funziona sempre. Idee ?
Grazie mille,
Stefano.
#include <SoftwareSerial.h>
#define rxPin 15
#define txPin 14
#define serialPortBaudRate 9600
// set up a new serial port
SoftwareSerial serialPort = SoftwareSerial(rxPin, txPin);
const byte COMMAND_BEEP[] = {0xFE,0x7};
const byte COMMAND_CLEAR_PAGE[] = {0xFE,0xC};
const byte COMMAND_SET_BUTTON_1_VALUE[] = {0xFE,0xA7};
const int SLEEP = 400;
void setup()
{
initSerialLCD();
}
void initSerialLCD(){
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
// set the data rate for the SoftwareSerial port
serialPort.begin(serialPortBaudRate);
serialPort.listen();
Serial.begin(serialPortBaudRate);
serialPort.write(COMMAND_CLEAR_PAGE, sizeof(COMMAND_CLEAR_PAGE));
//serialPort.write(COMMAND_SET_BUTTON_1_VALUE, sizeof(COMMAND_SET_BUTTON_1_VALUE));
serialPort.println("Init done");
}
void loop()
{
delay(SLEEP);
writeBufferToSerial();
//serialPort.listen();
int incomingByte;
// send data only when you receive data:
if(Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
//Say what you got:
//serialPort.print("I received: ");
serialPort.println(incomingByte, DEC);
}
if(serialPort.available() > 0) {
// read the incoming byte:
//incomingByte = serialPort.peek();
//Say what you got:
//serialPort.print("I received: ");
Serial.print(incomingByte, DEC);
}
}
void writeBufferToSerial(){
//serialPort.write(COMMAND_BEEP, sizeof(COMMAND_BEEP));
}
void serialEvent() {
while (serialPort.available()) {
// get the new byte:
char inChar = (char)serialPort.read();
// add it to the inputString:
//inputString += inChar;
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
/*
if (inChar == '\n') {
stringComplete = true;
}
*/
serialPort.println("XXXXXX");
}
serialPort.println("DDDDDDDD");
}