SukkoPera:
Capisco che per te sia un hobby, ma un hobby dovrebbe essere qualcosa per cui uno è portato e in cui investe volentieri del tempo, nonché eventualmente del denaro, e per cui "si sbatte" senza che questo gli pesi particolarmente.
Ora, senza offesa, ma non mi pare che tu sia particolarmente portato per la programmazione:
puls=(digitalRead,PIND); // digitalRead (PIND,puls); // leggi dato da inviare al display
delay(5);
int i=puls; //initializing variables
char puls=char(i);
if (puls<19) goto casa;
Questa cosa è a dir poco obbrobriosa e, se l'hai scritta, probabilmente è perché non hai investito tempo a studiare le basi. Questo vuol dire che probabilmente non andrai da nessuna parte.
Non c'è nessuna polemica e nessuna offesa, ripeto. Sono sicuro che hai i tuoi buoni motivi per non potere investire più tempo in questa attività e non mi permetterei mai di criticare ciò, però permettimi di dire allora che hai scelto l'hobby sbagliato, perché qua di fatto chi vuole aiutarti deve riscrivere da capo l'intero sketch. Ma così non è più un aiuto, diventa un lavoro non pagato, e per queste cose io personalmente non ho né il tempo, né la voglia.
Stai ancora sbagliando nel dare giudizi su persone che non conosci.
Ho 75 anni e ancora mi interesso di elettronica (e anche altro).
E' da circa 25-30 anni che non programmo più, e i miei programmi erano tutti in assembler (studiato per hobby).
Ho fatto programmi complessi e di una certa importanza collaborando con una ditta del settore.
Ho imparato l'assembler da solo e a quei tempi, non c'era quasi nessuno che ti aiutava.
Ho sempre trascurato il Basic e i C, non ero interessato.
Come già detto, ho ripreso in mano una mia scheda programmata in assembler e ho voluto adattargli un Arduino del quale non conoscevo il suo linguaggio.
Ecco la mia cattiva volontà di imparare.
Nei post precedenti, chiedevo solo di trovare dove sbagliavo e non di riscrivere il programma.
Grazie Docsavage,
non pretendevo un lavoro simile per il mio programma.
So che è molto difficile fare un listato simile senza avere l'apparecchiatura finale a disposizione.
Purtroppo c'è un mal funzionamento. Provo a spiegare quello che succede.
Digito un carattere. tutto ok è scritto sulla prima riga prima posizione.
Digito un secondo caratt. viene scritto sopra al caratt. precedente.
Digito un terzo caratt. viene scritto sulla seconda riga prima posizione.
digito un quarto caratt. viene scritto sulla seconda riga nella seconda posizione.
Introdotti molti caratteri, a un certo punto scrive sopra i caratteri precedenti nella prima e seconda riga.
Se può essere di aiuto, nel mio programma, solo all'inizio della seconda riga visualizzava due volte lo stesso carattere. Per il resto funzionava regolarmente.
Poichè il tuo programma è molto più preciso e sofisticato del mio, ora cercherò di capire bene tutte le righe e vedo se ne cavo qualche cosa.
Funziona quasi perfettamente.
Completato la prima e seconda riga regolarmente, quando ritorna alla prima riga, i caratteri precedenti rimangono visibili e i nuovi caratteri vengono scritti sopra e così succede anche quando riscriva nella seconda riga.
Quando si riscrive su di una riga si possono cancellare i caratteri precedenti?
Puoi fare ancora uno sforzo?
Ho inserito alla fine un "lcd.clear()" che mi cancella tutte e due le righe prima di scrivere i nuovi caratteri, ma sarebbe più comodo e logico che venga cancellata solo la riga corrente.
Saverio.
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 13, 8, 9, 10, 11);
char rx; // il valore letto
int num = 0; // numero di caratteri scritti nella riga
int riga = 0; // numero righe scritte
#define COLONNE 16
#define RIGHE 2
void setup()
{
DDRD = (INPUT); // configura la porta D come ingresso
pinMode(A4, OUTPUT); // pin busy - Pin analogico
pinMode(A5, INPUT); // pin strobe - Pin analogico
lcd.begin(COLONNE , RIGHE);
lcd.setCursor(0, 0);
}
void loop()
{
digitalWrite(A4, LOW); // metti a 0 il busy - rx disponibile
if (!digitalRead(A5))
{
digitalWrite(A4, HIGH); // metti a 1 il busy - rx NON disponibile
delay(10);
rx = (digitalRead, PIND); // digitalRead (PIND,puls); // leggi dato da inviare al display
if (rx > 19)
{
// per i caratteri stampabili
// lcd.print(rx);
// lcd.setCursor(riga, num++);
// ---------------------------------------------------------------------------------
// per i caratteri stampabili
lcd.setCursor(num++, riga);
lcd.print(rx);
// -----------------------------------------------------------------------------------
// stampato, mica difficile, con avanzamento del contatore di colonna
// adesso calcolo la nuova posizione del cursore
if (num >= COLONNE)
{
// oltre la fine del display
num = 0;
riga++;
// indietro carrello, avanti riga, come sulle macchine da scrivere
if (riga >= RIGHE)
{
// fine display
riga = 0;
// lcd.clear();
// indietro alla prima riga
}
}
}
}
}
Attenzione: L'interessante discussione sull'assegnazione di una variabile con post/pre incremento, essendo off-topics rispetto a questo thread, è stata spostata (... con fatica) in QUESTO nuovo thread dove, civilmente, potete continuare a discuterne.