array aiuto....

ciao a tutti... e da ieri che cerco di trovare una soluzione ma non ne vengo fuori, così mi sono deciso a chiedere aiuto!

char cmdhttp[4]= {'salasu', 'salagiu', 'camerasu', 'cameragiu'}; int pintap[4] = { 24, 25, 27, 26};

inizialmente l'avevo pensata con un array bidimensionale, ma visto che non sono dello stesso tipo, ho deciso di inizializzare due array. Nel primo array memorizzo un comando, nel secondo array ho il pin a cui deo far riferimento.

Esempio,se da seriale ricevo la parola "salasu" devo memorizzare in una variabile il valore "24", cioè estrarre dall' array pintap il dato avente lo stesso indice della parola inviata da seriale!! :))

Prima di tutto, essendo il tuo primo post, ti consiglio di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO ...

... poi ... mi sa che prima sarà il caso che ti studi un po' meglio il C perché ti mancano proprio le basi dei "tipi" di dato e degli "array".

Il "char" è lungo UN byte ... difficile metterci dentro una "parola" di x caratteri ;)

Guglielmo

P.S. : Puoi cominciare a studiare da QUI ... ;)

Ciao Guglielmo, non ti dò torto..sono un novello!!

quell'array è l'unica cosa che funziona nei miei sketch!!!

No, l'array cmdhttp NON può funzionare così come lo hai fatto ... per il motivo che ti ho detto ...

Abilita la compilazione verbosa e ... vedrai i warning !!!

Guglielmo

array.ino:3:51: warning: character constant too long for its type [enabled by default]

che asino!!

Insomma...come posso ingegnerizzare il mio sketch!?

Dammi degli input..no la soluzione..x favore

Ok...ho sostituito gli apici con le doppie virgolette!!!!

Array di stringhe
E’ spesso conveniente , quando si lavora con una grande quantità di testo, lavorare con un array di stringhe.

Dato che le stringhe sono a loro volta degli array , l’array di stringhe è un esempio di array a due dimensioni. Nel codice seguente , l’ * (asterisco) dopo il tipo char (char*) indica che questo è un array di puntatori. I puntatori sono una trovata di C che non è necessario capire qui per capire come funzioni il codice.

char* mieStringhe= { “Stringa 1”, “Stringa 2”, “Stringa 3”, “Stringa 4”, “Stringa 5”, “Stringa 6” };

ho seguito questa guida, però mi dà sempre dei warning:
array.ino:3:64: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

Non è corretto!?

Dato che le stringhe sono a loro volta degli array , l'array di stringhe è un esempio di array a due dimensioni. Nel codice seguente , l' * (asterisco) dopo il tipo char (char*) indica che questo è un array di puntatori. I puntatori sono una trovata di C che non è necessario capire qui per capire come funzioni il codice.

La cosa bella è che non sono una trovata del linguaggio C, ma è ciò che accade se ad un indirizzo di memoria scrivi un altro indirizzo Indirizzo valore 0 1 puntatore 1 100 puntato

Il puntatore all'indirizzo 0, contiene il valore 1 e questo contiene 100.

Comunque, non dovrebbe dare errore, posta tutto lo sketch.

Ciao.

Ciao Mauro,
ho buttato giù questo sketch e sembra funzionare, ma lo vedo troppo macchinoso!!!

char* cmdhttp[4] = {“salasu”, “salagiu”, “camerasu”, “cameragiu”};
int pintap[4] = { 24, 25, 27, 26};

char* http = “camerasu”;

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

void loop() {

for (int x = 0; x < 4; x++) {
String b(cmdhttp);
if (b.equals(http)) {
Serial.println(pintap);
delay(600);
}
}
}

nn capisco xchè al posto delle parentesi quadre mi mette il quadratino nero!!!

cmq devo chiudere...se vuoi lasciami qlc consiglio...ne parliamo domani...

salute a tutti.

toreg:
nn capisco xchè al posto delle parentesi quadre mi mette il quadratino nero!!!

forse perché non usi i TAG CODE (il simbolo </> )

Ciao Uwe

Due cose …

  1. se avessi ben letto il regolamento avresti visto che il codice DEVE essere racchiuso nei tag CODE (… quelli che inserisce il bottone fatto così: </> , il primo a sinistra quando sei in edit)

  2. stai mischiando di nuovo tipi di dati. In C esistono le stringhe viste come array di char, che sono sicuramente le più efficienti e leggere e le trovi descritte QUI e, in C++, esiste la “classe” String, molto più pesante e dispendiosa, che trovi descritta QUI.

La “classe” String può sembrare più facile da usare, ma … te la sconsiglio perché sei su una piccola MCU, con pochissima RAM ed un suo “abuso” può facilmente portare all’esaurimento della memoria con conseguenti malfunzionamenti del codice difficili poi da trovare.

Per la gestione delle stringhe classiche del C, la libreria SEMPRE inclusa dall’IDE di Arduino, ovvero la AVRlibc, contiene tutta una serie di funzioni adatte alla loro manipolazione in modo estremamente veloce ed efficiente. In particolare guarda QUI. (In ogni caso, se ti studi tutte le altre funzioni che mette a disposizione, scoprirai tantissime cose utili).

Buono studio :wink:

Guglielmo

Ciao... Scusate se ho violato il regolamento,in realtà devo leggerlo ancora.

È vero che sto mischiando i dati, ma non riuscivo a confrontare la singola stringa "http" con i dati dell'array! Così ho convertito di volta in volta il dato preso dall'array con il ciclo for in una stringa e confrontato poi con .equals!

Spero di trovare il comando giusto nelle preziose guide che hai indicato, magari un comando che restituisca la posizione all'interno di un array di un dato che voglio cercare, senza un ciclo di confronto!

toreg:
Spero di trovare il comando giusto nelle preziose guide che hai indicato, magari un comando che restituisca la posizione all’interno di un array di un dato che voglio cercare, senza un ciclo di confronto!

… se guardi attentamente nelle funzioni della <string.h> … troverai TUTTO quello di cui hai bisogno senza dover ricorrere alla classe “String”, ma usando semplicemente le stringhe classiche del C :wink:

Se hai difficoltà … chiedi :slight_smile:

Guglielmo