inserire lo stato di un pin in char

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 :slight_smile: