eprom esterna 24LCxxx

... e chi ci sarebbe arrivato :o
grazie per quanto mi state dicendo.
Il problema è che appena esci da blink.ino inizia un mondo di insidie che ti impongono passi precisi, basati su necessaria conoscenza teorica... ed io ho il vizio di essere un pò troppo smanettone.

Adesso sto sbattendo le corna sul discorso degli array, che purtroppo (rispetto ad arduino) mi hanno insegnato cose facili da gestire.
Insomma, alla fine dei giochi, l'array concepito per arduino è ben differente da quello costruito per (diciamo) visual basic (e poi studio), che sto utilizzando da oltre 40 anni.
Per me array fino ad oggi era che se dici Pippo (x), dentro ci puoi mettere qualunque cosa.
Quindi
Pippo(1) = "Ciao"
Pippo(2) = "a tutti"
Print Pippo(1) + Pippo(2) dava "Ciao a tutti"

Mentre qui Pippo(1) e (2) non sono il contenitore di un insieme di cose, ma i contenitori (puntatore) di un byte. Nel secondo caso di due bytes.
E quindi, come consigliato da Guglielmo, è meglio utilizzare Struct.
Inoltre, cosa ancor più destabilizzante per me, la fobia della String!
Sto iniziando ad evitarla anche per le cose più banali, sto facendo finta che non esiste a favore dell'utilizzo char.
E pensare che string in vb è come il prezzemolo.
Ebbene, entrare in questa mentalità a 61 anni è difficilissimo, ma non impossibile.

Il mio professore di italiano, a suo tempo, diceva sempre che "... le cose difficili sono quelle che non si sanno e solo perchè non le hai studiate ..."

dopo il leggero OT del messaggio precedente (ogni tanto una chiacchiera credo non guasti) e sempre in relazione a quanto dovrò fare sulla eventuale memoria esterna, faccio una domanda da un milione di dollari relativa agli array:

esempio di struct

typedef struct
{
   char  Num[11];
   char  Nome[11];
   char  Tel_1[11];
   char  Tel_2[11];
      
} Tutti;

non ho messo il define per motivi di tempo, ma per ora non è essenziale.

come faccio a far diventare Tel_1 in Tel(1) con 11 caratteri disponibili, in modo che - secondo necessità - io lo possa richiamare con un valore numerico ?
cioè

int richiesta = 2;
Serial.print ( Tutti.Tel(richiesta) );

fotosettore:
... come faccio a far diventare Tel_1 in Tel(1) con 11 caratteri disponibili, in modo che - secondo necessità - io lo possa richiamare con un valore numerico ?

Non capisco cosa intendi ... vuoi sapere come si trasforma una stringa classica del 'C' in un numero? Cioè, vuoi sapere come trasformare "12345" nel numero 12345 o cosa, perché dire Tel_1 in Tel(1) non dice molto ... ::slight_smile:

Guglielmo

fotosettore:
l'array concepito per arduino è ben differente da quello costruito per (diciamo) visual basic (e poi studio)
...
Inoltre, cosa ancor più destabilizzante per me, la fobia della String!

Premetto che sono solo uno smanettone anche io e che per mestiere faccio altro.
Inizio OT.
L'unica cosa realmente diversa è il linguaggio di programmazione e le risorse disponibili (PC vs microcontrollore), le cose "importanti" sono gli algoritmi che sono alla base del ragionamento "informatico" e non solo.
Io ho iniziato a smanettare con PC e microcontrollori con lo scolasticissimo Pascal tanto per dire (esisteva un compilatore pseudo-pascal per PIC :o)
Fine OT.

Non credo di aver ben capito la richiesta... se Tel_1 è un numero perché lo vuoi memorizzare come un char array?
Se descrivi meglio cosa vorresti ottenere e non il come vorresti farla, probabilmente riusciamo a darti qualche dritta più efficace.

scusate ma mi sono espresso male .
cambio esempio

typedef struct
{
   char  Nome[11]
   char  Mestiere_1[11];
   char  Mestiere_2[11];
} Ufficio;

Ufficio Persone [100]

in questo modo, per sapere Mestiere_1 e Mestiere_2 della posizione 23 (qualsiasi cosa ci sia dentro di max 10 caratteri) debbo per forza richiamarli così

Serial.println (Persone(23).Mestiere_1);
Serial.println (Persone(23).Mestiere_2);

io invece ho necessità di fare una cosa del genere: richiamarli con un FOR e cioè

for (int Giro = 1 ; Giro <=2 ; Giro ++)
{
    Serial.println ( Persone(23).Mestiere[Giro] );
}

Invece di usare due nomi diversi e due variabili (Mestiere_1 e Mestiere_2), devi usare un array di stringhe ...

char Mestiere[2][11];

Comunque, perdona, ma ... tocca che prima di continuare ti metti a studiare le basi del 'C', perché ... questi sono i fondamenti! Vedrai che poi andrai molto più veloce e sarai molto più produttivo :wink:

Guglielmo

Si Guglielmo lo so che debbo studiare il C :slight_smile: credimi che ho sempre sottomano il Deitel. Ora sono in ufficio (faccio l'informatico in dogana) e non posso consultarlo.
In ogni caso non ho trovato un link che parli in modo decente di array bidimensionali ad uno scolaretto come il sottoscritto (abituato a ragionare come nel messaggio #20).
Danno tutti molte cose per scontato.
Prendo di buon grado il tuo input char Mestiere[2][11];
Però da quello che ho visto 2 e 11 indicano le matrici (riga e colonna) .... come si dice che debbo riservare X caratteri per Mestiere ?
Tutti gli esempi che trovo sono basati su int solo int sempre int
Nessuno che parli di un 20 char, peggio ancora dentro una Struct ...
sono confuso

In realtà più elementi indicano solo un array multidimensionale che, può anche essere visto come matrice ...
... nel tuo caso occorrono 2 elementi principali (che rappresentano Mestiere_1 e Mestiere_2), ciascuno composto da 11 sottelementi (che rappresentano i 10 caratteri più il terminatore, delle stringhe).

Quindi, per chiarire, potrai scrivere:

strcpy( Persone[23].Mestiere[1], "1234567890");
strcpy( Persone[23].Mestiere[2], "0123456789");

... in cui indichi quale elemento dell'array Persone e quale elemento dell'array Mestiere elemento che è composto da 10 caratteri.

Nota che il concetto di multidiemnsionalità può essere esteso quanto vuoi creando array con N dimensioni... il concetto è come ... in un ufficio, il numero di stanza, il numero di cassettiera, il numero della cartellina nella cassettiera, il numero del foglio nella cartellina, il numero della singola parola nel foglio, il numero della lettera nella parola :smiley:

Guglielmo

benissimo !
mi sono bastate le tue due righe di demo per fare un esempio funzionante secondo i parametri che mi servono.

Una cosa che non capisco : mentre col secondo gruppo di parentesi debbo essere preciso (se metto 11 debbo mettere max 10 caratteri, sennò sfarfalla), se metto o non metto numeri dentro il primo gruppo, invece, non cambia nulla e tutte le prove vanno a buon fine.

cioè se nella Struct metto :
char Mestiere[][11];
oppure
char Mestiere[5][11];
oppure
char Mestiere[43][11];
etc ...

non ci sono errori

Chiedo lumi !

Siamo sempre alle basi del 'C' e ... non è scopo di questo forum insegnare il 'C' ... ::slight_smile:
... nel tuo caso, se non vuoi problemi, DEVI mettere quanti 'Mestiere' diversi ti servono, poi, quando avrai tempo, potrai approfondire :smiley:

Guglielmo

sempre se qualche link decente spieghi questa cosa, senza dare per scontato che ci deve essere un numero, facendo solo esempi TUTTI UGUALI che non danno info adeguate, che riempiono pagine di blog solo alla ricerca di likes e facendo quindi solo filosofia informatica :smiley:

per ora grazie, guglielmo

Se già non lo hai ti consiglio il ... testo sacro ... "Il linguaggio C. Principi di programmazione e manuale di riferimento" di Brian W. Kernighan e Dennis M. Ritchie.

Li almeno cose inutile e fatte male non ne trovi ... :wink:

Guglielmo

a suo tempo ho acquistato
corso completo di programmazione C di di paul e harvey deitel - ed. apogeo.
adesso acquisto anche quello da te consigliato
... 28 euro - arriva domani

p.s. ho sempre paura di fare domande in questo forum, perchè non so mai se fanno parte delle cose da poter chiedere o se si ricevono caz[censured]...atoni... :frowning:
Avrai notato che ho voglia di imparare e capire.
La pappa pronta non mi è mai piaciuta ma un input per arrivare al risultato credo serva, altrimenti i forum che ci stanno a fare ?

fotosettore:
p.s. ho sempre paura di fare domande in questo forum, perchè non so mai se fanno parte delle cose da poter chiedere o se si ricevono caz[censured]...atoni... :frowning:

Tranquillo fai pure le domande :D, solo tenendo conto che qui si aiuta, ma non si tengo dei corsi sul linguaggio che ... uno deve studiarsi da solo :wink: Poi, se magari studiando ha dei dubbi, chiede qui ...

Il libro suggerito è quello che i puristi del 'C' ritengono appunto "il testo sacro" visto che dagli autori è stao ideato il 'C'. Considera che è molto un "reference" e poco una libro di tipo "tutorial" ... li trovi tutti gli elementi e tutte le sintassi il tutto descritto in modo molto preciso.

Guglielmo

... e chi ci sarebbe arrivato :o
grazie per quanto mi state dicendo.

Per di più questa informazione non la trovi in nussun libro sul C/C++. Considera anche quanto determinante è l'architettura hardware, in breve non basta leggere il libro sul C ma occorre anche conoscere le limitazioni imposte dalla architettura sulla quale l'eseguibile girerà.

Chiediti cosa è lo stack e come viene usato dal linguaggio e cambierà il tuo modo di scrivere il programma.
Chiediti cosa è lo heap e come viene (e quando) usato e cambierà il tuo modo di scrivere il programma.

Non sottovalutare la differenza tra: compile-time e run-time. Allocare memoria a compile-time e ben diverso da allocare memoria a run-time. La differenza non è ben documentata in un manuale sul C, poiché dipende anche dall'architettura; ad esempio su un PC la memoria è virtualmente infinita per cui chiedere (a run-time) allo allocatore di ottenere della memoria avrà "sempre" successo, tuttavia prima di usare questa memoria si controlla sempre se l'allocatore ha avuto successo o meno. Nota che l'allocazione di memoria è solo un esempio di ciò che può accadere a run-time o meno, quindi avere chiaro cosa accade a compile-time (staticamente) o a run-time (dinamicamente) determina come usiamo il linguaggio e cosa ci aspettiamo che accada.

Insomma, alla fine dei giochi, l'array concepito per arduino è ben differente da quello costruito per (diciamo) visual basic (e poi studio), che sto utilizzando da oltre 40 anni.

Già, tu vedi l'array come un contenitore generico, cosa che esiste in C++ (anche arduino usa C++) ma è implementata come libreria standard non prevista in arduino con architettura AVR. Come vedi le limitazioni hardware hanno conseguenze sul linguaggio.

L'array o vettore C è ancora il modo più efficiente e meno flessibile rispetto alle alternative, le quali non fanno parte del linguaggio ma sono sempre implementate come estensioni di libreria.

Stessa considerazione può essere fatta con la classe String di arduino (e non solo):

  • Per semplificare la gestione delle stringhe pago un prezzo; sono disposto a pagarlo?
  • Qual'è questo prezzo?
  • Esiste un modo per usare String in modo che paghi un prezzo minore?

Tutti questi problemi svaniranno quando sarà possibile impiegare visual basic su una MCU e quando accadrà forse in pochi si ricorderanno di visual basic. :slight_smile:

Ciao.

Maurotec:
Tutti questi problemi svaniranno quando sarà possibile impiegare visual basic su una MCU e quando accadrà forse in pochi si ricorderanno di visual basic. :slight_smile:

Oh no, speriamo che questo non accada mai! :o :o :o
Io oooooodio Visual Basic

Scherzi a parte, con alcune MCU (ESP32 compresa) qualcosa di simile esiste già, ma con Python o Javascript come linguaggi interpretati per fortuna :slight_smile:

Il Basic c'è! C'è ... sia per Arduino che per ESP ... Basic for Arduino (B4R) ... buon divertimento :smiley: :smiley: :smiley:

Guglielmo

P.S.: Solo Windows ... no Linux, no macOS

Eppure ragazzi cari, è dai tempi di vb4 (aggiornandomi, naturalmente) che faccio programmi per il mio ufficio e ancora oggi girano che è una bellezza.
Ho risolto in pochi giorni quello che le sedicenti società di megainformatica non risolvevano in un anno.
L'odio di alcune persone verso il VB è viscerale, tipo roma lazio, inter milan ...
Ma esiste ... come esiste il C. Occorre farsene una ragione :slight_smile:

Qui siamo in un altro mondo : ok ---> Dura lex, sed lex.
Mi adeguo a quanto c'è, se ho voglia di fare qualcosa. Altrimenti mollo tutto e mi vado a prendere il sole in giardino.
Però il mio istinto è più forte di quello di stare a non fare nulla su una sdraio.
In ogni caso debbo anche trovare il giusto input per essere motivato.

Sono davanti ad un monitor dai tempi del vic20 ... ne ho passati di SO e linguaggi.
Comincio ad essere stanco.

gpb01:
Il Basic c'è! C'è ... sia per Arduino che per ESP ... Basic for Arduino (B4R) ... buon divertimento :smiley: :smiley: :smiley:

dello stesso autore ho usato B4A per 4 anni, fino a quando si è arrivati alla versione 5 di Android. Parliamo più o meno del 2012 ?? si forse.
Dopo un primo disorientamento dovuto alla sua strana IDE, ho fatto valide app per android. Ricordo pure di aver modificato e accorpato delle librerie con Eclipse.
Le app suddette me le sarei sognate se avessi dovuto farle in altro modo :frowning:

L'odio di alcune persone verso il VB è viscerale, tipo roma lazio, inter milan ...
Ma esiste ... come esiste il C. Occorre farsene una ragione :slight_smile:

Peggio, io non lo conosco proprio VB, mai usato, ma ho letto un libro dell'epoca di window98, non mi è piaciuto molto questo si ma non lo posso odiare. Mentre si odio java (anzi sono allergico), mentre mi è piaciuto javascript e python entrambe dimenticati. Ultimamente mi ha ingrifato non poco il concetto di "injection" di js ma ho altro per la testa.

Mi adeguo a quanto c'è, se ho voglia di fare qualcosa. Altrimenti mollo tutto e mi vado a prendere il sole in giardino.
Però il mio istinto è più forte di quello di stare a non fare nulla su una sdraio.
In ogni caso debbo anche trovare il giusto input per essere motivato.

Per come la vedo io in pratica non hai alternative, però non conosco bene la piattaforma ESP.
La difficoltà che incontri è legata certamente dal fatto che hai impiegato linguaggi di alto (altissimo) livello e scendere a livello del C per di più su architetture non generiche è un bel salto nel buio, mentre è più facile passare dal C/C++ fino a javascript, poi con python ho fatto cose perverse :slight_smile:

Ho dato un occhiata al repo BAX ma vedo solo java quindi causa allergia mi astengo. :smiley:
Ciao.