... 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:
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 ... :
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.
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ì
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
Si Guglielmo lo so che debbo studiare il C 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 eMestiere_2), ciascuno composto da 11 sottelementi (che rappresentano i 10 caratteri più il terminatore, delle stringhe).
... 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
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 ...
Siamo sempre alle basi del 'C' e ... non è scopo di questo forum insegnare il 'C' ... :
... nel tuo caso, se non vuoi problemi, DEVI mettere quanti 'Mestiere' diversi ti servono, poi, quando avrai tempo, potrai approfondire
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
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...
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...
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 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.
... 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.
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.
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
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
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
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
L'odio di alcune persone verso il VB è viscerale, tipo roma lazio, inter milan ...
Ma esiste ... come esiste il C. Occorre farsene una ragione
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
Ho dato un occhiata al repo BAX ma vedo solo java quindi causa allergia mi astengo.
Ciao.