Go Down

Topic: Problemi con programmino semplice (Read 2 times) previous topic - next topic

lesto

hai perfettamente ragione. Ma stai parlando un LCD, non di un computer. lui non sa "andare a capo", è fatto solo per mostrare una stringa, quindi sei tu che devi programmare l'atmega in modo da far credere all'utente che il LCD vada a capo et fronzoli vari
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

9six4

quindi io potrei fare una cosa del genere:

if (inByte = '/n'){
   lcd.write('/n');
}else if (inByte = '/r'){
   lcd.write('/r');
}

confermi?

lesto

no, LCD NON sa cosa farsene dei tuoi a capo. Lui è fatto per essere usato come a battaglia navale, dando le coordinate X e Y, non sa niente di righe o menate varie, il massimo della sua intelligenza è andare di seguito se gli passi più valori (ma nnon penso nemmeno che sia l'LCD, mi sa che è la libreria). Quindi in pratica se ricevi un \r\n (in windows) un \n (in linux) o un \n\r (in mac) devi dire all'lcd di posizionarsi alla riga successiva usando il gioco della battaglia navale col cursore.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

9six4

Perfetto, ho risolto grazie!
Questo è lo sketch finale:

Code: [Select]
#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

void setup() {
  lcd.begin(20,4);
  Serial.begin(1200);
}

void loop() {
 
  if (Serial.available()) {
    char inByte = Serial.read();
    switch (inByte) {
    case '\n':
      lcd.setCursor(0,0);
      break;
    case 'L':
      lcd.setCursor(0,1);
      lcd.write("L");
      break;
    case 'H':
      lcd.setCursor(0,2);
      lcd.write("H");
      break;
    case '\r':
      break;
    default:
      Serial.write(inByte);
      lcd.write(inByte);
      }
  }
}

Cosi facendo ho eliminato anche il problema della stringa che eccedeva la lunghezza dell'LCD quindi quando mi da la temperatura max (Hi) e min (Lo) vado su una nuova riga.
Ora devo trovare il modo di stampare tutto questo su carta... il problema è, non so perchè, che quando inserisco un comando di tipo printer.write(); non legge più la stringa ASCII ma mi da tutta una serie di 00X30 05X30 ecc ecc che in teoria dovrebbe essere un'altra forma di lettura del carettere ASCII giusto?

9six4

Problemino divertente: nel case ho distinto varie operazioni nel caso in cui entrino i caratteri 'L' 'H' '\n' e'\r'... la cosa divertente è che lui compie quelle operazioni anche se li vede come 72 74 10 o 13 ovvero i loro corrispettivi decimali! Come faccio per evitare questa cosa?
Per capirci voglio che vada a capo solo quando legge \r e non 13 perchè la mia stringa ASCII è alfanumerica e quindi sarebbe un disastro.
Grazie

Go Up