Go Down

Topic: [risolto] Gestione pin via UDP, che cosa sbaglio? (Read 1 time) previous topic - next topic

ZioWally

Jul 03, 2013, 07:11 pm Last Edit: Jul 03, 2013, 08:02 pm by ZioWally Reason: 1
Ciao a tutti!
Sto cercando di gestire dei pin digitali con protocollo UDP e Processing.
Da Processing invio un comando che una volta ricevuto da Arduino mi inverte lo stato di un pin (da LOW a HIGH o viceversa)
La parte processing non è un problema ed invia il comando correttamente.
In Arduino sbaglio qualcosa,
-  se parto col led settato in setup() spento, al primo invio del comando lo accende. Alla ricezione di altri comandi mi dice sempre che ha acceso il led e non lo spegne più
-  se invece parto col led settato HIGH, ad ogni invio del comando mi dice che ha acceso il led e non lo spegne più.

Non riesco a capire cosa sbaglio... :smiley-red:
Allego lo sketch alleggerito delle parti inutili al problema, grazie in anticipo :smiley-mr-green:

Code: [Select]

char MexRicevuto[UDP_TX_PACKET_MAX_SIZE];
int Led    =  2;

void setup()
{
 Ethernet.begin(mac,ip);
 Udp.begin(localPort);
 Serial.begin(9600);
 pinMode (Led,  OUTPUT);
 digitalWrite (Led, HIGH);
}
void loop()
{
 int DimensStringa = Udp.parsePacket();
 if(DimensStringa)
 {
   Udp.read(MexRicevuto,DimensStringa);
   Serial.print("Ho ricevuto una stringa lunga: ");
   Serial.println(DimensStringa);
   Serial.print("Contenente il seguente testo: ");
   Serial.println(MexRicevuto);
   if ((String(MexRicevuto) == "P00") && (digitalRead (Led == LOW)))
     {
       digitalWrite (Led, HIGH);
       Serial.println ("Ho acceso il led");
       delay (500);
     }
   else
     {
       digitalWrite (Led, LOW);
       Serial.println ("Ho SPENTO il led");
       delay (500);
     }

       Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
       Udp.write(MexRicevuto);
       Udp.endPacket();
 }
}


pablos71

#1
Jul 03, 2013, 07:31 pm Last Edit: Jul 03, 2013, 07:38 pm by pablos Reason: 1
Se i titoli non li metti maiuscoli è meglio. non siamo ciechi :)


scusa, non puoi mettere....
Code: [Select]
if ((String(MexRicevuto) == "P01")
acendi il led

Code: [Select]
if ((String(MexRicevuto) == "P00")
spegni il led

se vuoi usare lo stesso comando per on/off devi memorizzare lo stato del pin per fare uno switch mode

non mi convince questo (String(MexRicevuto) == "P00") per convertire in stringa è string che va tra parentesi
( (String)MexRicevuto == "P00")
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

ZioWally

#2
Jul 03, 2013, 07:47 pm Last Edit: Jul 03, 2013, 07:55 pm by ZioWally Reason: 1
hai ragione, scusa!.. me ne sono accorto anch'io un'attimo dopo aver lanciato il post... :smiley-sleep:   ho già corretto! :smiley-red:

In effetti se usassi dei comandi diversi per ogni pin forse funzionerebbe.
A lavoro finito ci saranno 16 pin controllati e quindi servirebbero 32 comandi diversi, il grave è che il problema lo passo al programma in Processing che a quel punto deve sapere quando dare il comando di accensione e quando lo spegnimento.

E' una cosa che devo risolvere in Arduino, non credo sia difficile, non mi rendo conto del mio errore...

non mi convince questo (String(MexRicevuto) == "P00") per convertire in stringa è string che va tra parentesi
( (String)MexRicevuto == "P00")


Ho provato a modificarlo secondo le tue indicazioni, le cose non cambiano, nè le stampate di controllo che ho inserito, nè la logica di funzionamento

nid69ita

Non ha senso:
if ....(digitalRead (Led == LOW)) {

questo si
if ... (digitalRead(Led) == LOW) {
my name is IGOR, not AIGOR

ZioWally

:smiley-mr-green: :smiley-mr-green: Grande! :smiley-mr-green: :smiley-mr-green:

adesso funziona!

Ho ripassato il listato una montagna di volte e se  non era per nid69ita mica me ne sarei accorto!

considero la cosa risolta!

grazie infinite a tutti

Go Up