salve,
devo poter inviare in udp al client che mi ha contattato lo stato di un pin.
generalmente per inviare qualcosa faccio
char ReplyBuffer[] = "stringa"
come faccio a inserire all'interno di un char lo stato di uno pin??
salve,
devo poter inviare in udp al client che mi ha contattato lo stato di un pin.
generalmente per inviare qualcosa faccio
char ReplyBuffer[] = "stringa"
come faccio a inserire all'interno di un char lo stato di uno pin??
se il pin è digitale, puoi inviare 8 stati con un char...
sembra una complicazione inutile, ma ti tornerà utile quando vorrai giocare con i registri dell'atmega.
metti tutto il char (meglio usare un byte direttamente) a zero:
byte stati = 0;
poi fai stati &=B111000; //in questo caso metti ad uno il 4,5 e 6 bit a partire da sinistra
se poi la funzione vuole per forza una stringa, fai
char risposta[1] ={stati};
ecco un pezzo del mio script
void loop() {
// se il buffer contiene dei byte allora vado a leggere
int packetSize = Udp.available();
if (packetSize) {
packetSize = packetSize - 8; // vado ad eliminare gli 8 byte di header che vengono passati al socket
// leggo i byte ricevuti, l'ip e la porta del mittente
Udp.readPacket(packetBuffer,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort);
if (digitalRead(ledPinStart) == 1){
char ReplyBuffer[] = "1";
}else{
char ReplyBuffer[] = "0";
}
Udp.sendPacket(ReplyBuffer, remoteIp, remotePort);
}
}
ma ottengo questo errore in fase di compilazione
arduino_remote_3.cpp: In function 'void loop()':
arduino_remote_3:82: error: 'ReplyBuffer' was not declared in this scope
se tolgo
if (digitalRead(ledPinStart) == 1){
char ReplyBuffer[] = "1";
}else{
char ReplyBuffer[] = "0";
}
e lascio
char ReplyBuffer[] = "0";
funziona
io proverei a fare così:
dopo le define ti dichiari l'array globale char ReplyBuffer[2] = "x";
poi la condizionale diventa
if (digitalRead(ledPinStart) == 1)
ReplyBuffer[0] = '1';
else
ReplyBuffer[0] = '0';
l'array globale è un'esagerazione, ma effettivamente si tratta di un errore di visibilità delle variabili.
Dato che l'array lo dichiari all'inderno dell'if o dell'else, lui nasce e muore all'interno dell'if/else.
Quindi qunado provi a scrivere poi il pacchetto, l'array è già morto e sepolto, da quì l'errore...
La soluzine è spostare la dichiarazione dell'array prima dell'if. Ricordati che per le stringhe l'array deve essere grande lunghezza stringa +1, dove il +1 serve per far posto al carattere '\0', segnale di fine stringa.
grazie mille!! infatti cosi funziona ![]()