Usare da solo un ATMEGA 328 programmato su Arduino uno

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.

Saverio.

docsavage:
Curiosità, sono in auto e non posso controllare

Ma
Num = num++

Cosa fa, lascia inalterato il valore?

Perché
Num = ++num

Chiaramente aumenta di uno
Complicato, inutile, è indice di confusione
Ma almeno qualcosa fa....
Ma l'altro?

Quella istruzione , nel mio caso, funziona sia in un modo che nell'altro e serve per incrementare il contatore.

Saverio.

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.

Ancora grazie dell'aiuto.

Saverio.

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?

Grazie da Saverio.

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
                }
            }
        }
    }
}

Docsavage, che dire, hai fatto un lavoro perfetto.

A dire il vero, avrei fatto anch'io lo stesso programma. :slight_smile: :slight_smile: :slight_smile:

Ti ringrazio enormemente e prometto che cercherò di "decifrare" le tue istruzioni.

Buona notte da Saverio.

Attenzione: L'interessante discussione sull'assegnazione di una variabile con post/pre incremento, essendo off-topics rispetto a questo thread, è stata spostata (... con fatica :stuck_out_tongue:) in QUESTO nuovo thread dove, civilmente, potete continuare a discuterne.

Guglielmo