In pratica utilizzo la variabile EtherEvent.readEvent(event); nel ciclo if:
if (event ="1001"){
digitalWrite(led, HIGH);
}
e mi da questo errore error: incompatible types in assignment of 'const char [5]' to 'char [(((unsigned int)(((int)availableLength) + -0x000000001)) + 1)]
Come posso risolverlo?
Grazie mille in anticipo e buona giornata.
Per primo stai facendo nel IF una assegnazione "=" e non un confronto "=="
Per secondo il C non lavora direttamente con stringhe. Devi usare delle funzioni di stringhe opppure confrontare ogni elemento singolarmente.
Da come l'hai comparata nell'if, essa dovrebbe essere una Stringa, forse l'errore è questo.
Se è come dico io,
è come se tu volessi comparare una variabile intera con una stringa.
e poi si usano due uguali per comparare e non uno solo
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:
Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare (pulsante </>).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.
Premesso che non conosco la libreria in questione, ho dato un'occhiata agli esempi e io farei così:
if (byte availableLength = EtherEvent.availableEvent(ethernetServer)) {
Serial.print(F("\nReceived event length="));
Serial.println(availableLength);
char event[availableLength];
EtherEvent.readEvent(event);
Serial.print(F("Received event: "));
Serial.println(event);
if (strcmp (event), "1001") == 0) {
// Gestisci qua l'evento
}
}
In questo modo hai anche un minimo di stampe che ti aiutano a debuggare quel che sta succedendo. Puoi rimuoverle (commentandole) quando tutto funziona.
Postando TUTTO il codice. La variabile event NON è dichiarata nella libreria.
Viene scritta dalla funzione EtherEvent.readEvent(event) ma la event TU l'hai dichiarata da qualche parte ma se non posti il codice che ne sappiamo ? Palla di vetro ? infatti @francesco_b ti ha chiesto di che tipo è event, ma tu rispondi altro.
La funzione richiede un array di char che TU devi aver dichiarato (potevi chiamarlo anche pippo) e quindi si parla di classiche stringhe C ovvero array che non puoi confrontare con un semplice ==
char event[50]; // dimensione di quanto ?? boh ??
...
EtherEvent.readEvent(event); // scrive dentro a event
if( strcmp(event,"1001")==0 ) // uguali se ritorna 0
{ // entro per valore 1001
In pratica quello che @sukkopera ha postato.
Ora facci vedere come hai integrato quel codice di @sukko con il tuo, dire che non ti funziona è un pò poco, non credi ?
cyberhs:
Se non ho compreso male il funzionamento, la readEvent restituisce la variabile char[] eventBuffer e non event.
Non proprio. La funzione richiede un array di char, su cui andrà a scrivere. Si può usare quella forma ma sarebbe stato meglio mettere un bel char * e forse sarebbe stato più chiaro.
Passare poi il nome di un array è come passare un pointer.
void funz( char buf[])
void funz( char *buf) // identica a quella sopra
char str[10];
funz(str); // parametro per puntatore