Pages: [1] 2 3   Go Down
Author Topic: Problemi con programmino semplice  (Read 1945 times)
0 Members and 1 Guest are viewing this topic.
Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
#include <LiquidCrystal.h>

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

void setup() {
  Serial.begin(1200);
}

void loop() {
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial.write (inByte);
    lcd.println(inByte);
  }
}

Salve a tutti,
sto usando questo semplice programmino per leggere dei dati da seriale e visualizzarli su serial monitor.
Volevo stamparli a video ma purtroppo, non riesco. Ho testato il circuito LCD con lo sketch di esempio "hello world" e funziona, ma se uso lo sketch qui sopra non visualizza altro che una riga completamente nera, una bianca, una nera e una bianca.
Ho provato anche a mettere l' lcd.print fuori dall' if ma il risultato non cambia. Dove sbaglio?
La stringa in ingresso da seriale è un stringa ASCII di 32 caratteri.
Grazie a tutti quelli che vorranno aiutarmi.
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6974
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai dimenticato:
Code:
lcd.begin(16, 2);

Serve per inizializzare il LCD e specificare colonne e righe.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si Paolo hai ragione,
l'ho riscritto talmente tante volte che mi è scappato... però purtroppo mettendolo non risolve.
Ora mi appaiono tutta una serie di numeri: '8'32'72'105'32'13'10

Code:
#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()) {
    int inByte = Serial.read();
    Serial.write (inByte);
    lcd.println(inByte);
  }
}

Ciò che entra su Rx (pin 0) sono stringe ASCII 32 caratteri... che sia quello l'inghippo?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se spedisci un numero come stringa, poi lo ricevi come tale e lo stampi come tale.
Ossia se spedisci "32" trasmetti "3" + "2" e come tali li ristampi. Devi spedire un byte di valore 32 per poter scrivere sul display il carattere ASCII 32 oppure riconvertire i valori ricevuti in un unico codice ASCII.
Logged


Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie Leo,
allora questo è il mio problema: su Rx mi entra una volta al secondo una stringa ASCII di 32 caratteri che su serial monitor mi visualizza così:"kT1  26.3 Lo 26.3 Hi 26.3"
Sullo sketch dichiaro questa stringa int inByte.
Se non ho capito male quindi, lcd.println(inByte); non si può fare direttamente, ma devo tradurre la stringa?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Prova ad usare il metodo lcd.write per scrivere il valore in formato byte.
Logged


Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ora li scrive giusti, grazie. Mi spieghi la differenza?
Esiste l'equivalente di println con write?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ora li scrive giusti, grazie. Mi spieghi la differenza?
Come nel Serial, print "traduce" i valori in formato "console" quindi se hai un byte lo stampa trasformandolo in stringa mentre write stampa il corrispondente carattere ASCII.

Quote
Esiste l'equivalente di println con write?
Non ho capito.
Logged


0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10437
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Esiste l'equivalente di println con write?
Non ho capito.
ho capito che non ha capito

la println non è altro che la write, ma che prima trasforma i valori passando dalla tabella ascii: http://it.wikipedia.org/wiki/Ascii
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si scusate, mi son spiegato male. Semplicemente chiedevo se anche write dava la possibilità di andare a capo automaticamente al termine dell'istruzione.
Logged

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora... usando questo sketch scrive le cose giuste però purtroppo scrive tutto di seguito e quindi alla fine non si capisce molto:

Code:
#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()) {
    int inByte = Serial.read();
    Serial.write (inByte);
    lcd.write(inByte);
  }
}

La stringa ASCII che mi invia lo strumento però è comprensiva di <CR> e line feed. Come posso fare in modo che il programma riconosca automaticamente i comandi <CR> e line feed e li esegua anche quando invio il dato ad LCD? Su serial monitor il dato appare perfetto, va a capo automaticamente e salta una riga. Per fare un confronto devo usare il loro codice decimale?
Grazie
Logged

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10437
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ricordati che se scrivi una lettera tra apici singolo (es: 'a') il compilatore la valuta secondo il valore numerico: quindi dato che CR LF corrisponde a "\r\n" puoi dire che se incontri '\n' vai a capo
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie lesto era proprio quello che volevo sapere.
Il problema successivo però è quello che avevo postato ieri, esprimendomi male, ovvero: mentro con la funzione "print" se voglio che al termine della stampata vada a capo basta che gli dia il comando "println", come faccio ad ottenere la stessa cosa con la funzione "write"?
Logged

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10437
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

write('\n')  smiley-mr-green
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Padova
Offline Offline
Full Member
***
Karma: 0
Posts: 197
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusate se vi rompo le scatole per certe cavolate ma io ci provo anche a cercare in giro ma niente... ho letto in giro sul reference book ma il mio caso non l'ho trovato.
Questo vale per ogni supporto? Ovvero sia per LCD, che per stampante o memorizzazione su SD?

Dubbio:

Quote
if (Serial.available()) {
    int inByte = Serial.read();
    Serial.write (inByte);
    lcd.write(inByte);

Su uno sketch cosi quando sapendo che il penultimo carattere della mia stringa è sempre "/n", in teoria quando esegue lcd.write(inByte) ed inByte assume il valore "/n" non dovrebbe andare a capo automaticamente?
Logged

Pages: [1] 2 3   Go Up
Jump to: