Pages: [1]   Go Down
Author Topic: LCD seriale con scrittura che riesce e lettura che fallisce  (Read 448 times)
0 Members and 1 Guest are viewing this topic.
Rome, Italy
Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.


Code:
#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");
}
« Last Edit: October 22, 2012, 01:39:36 pm by UweFederer » Logged

Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 28
Posts: 929
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Benvenuto nel Forum!

La Arduino MEGA 2560 possiede un buon numero di porte seriali hardware in più rispetto ad Arduino UNO (che, poverina, ne ha solo una!).

Non è necessario, quindi, usare la libreria SoftwareSerial pensata per sopperire a questa mancanza e neanche indicare i pin di Rx e Tx in quanto già prefissati.

Devi semplicemente inizializzare la porta in Setup [ Serial3.begin(9600) ] ed usare le stesse funzioni usate per la Serial0 alias Serial.

Ettore Massimo Albani

Logged

Rome, Italy
Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve,

grazie mille, riscritto lo sketch ed ora va, leggo e scrivo. Stranissimo che però prima scrivesse soltanto. Questo per futura memoria lo sketch che sulla Mega mi funziona, per quanto banale possa essere.

Code:
#define serialPortBaudRate 9600

const byte COMMAND_CLEAR_PAGE[] = {0xFE,0xC};

const int SLEEP = 100;

void setup(){
 
 Serial3.begin(serialPortBaudRate);
 Serial3.write(COMMAND_CLEAR_PAGE, sizeof(COMMAND_CLEAR_PAGE));
 Serial3.println("Init completed");
 
}
void loop(){   
  delay(SLEEP);
  int incomingByte;
   
  if(Serial3.available() > 0) {
     Serial3.write(COMMAND_CLEAR_PAGE, sizeof(COMMAND_CLEAR_PAGE));
     incomingByte = Serial3.read();
     Serial3.println(incomingByte, DEC);
  }
}
« Last Edit: October 22, 2012, 01:42:35 pm by UweFederer » Logged

Pages: [1]   Go Up
Jump to: