Buongiorno a tutti,
dopo le varie piccole esperienze con Arduino, ho deciso di lanciarmi in qualcosa di decisamente più complesso.
vagando per il web, ho trovato la tesina di esame di Massari che ha creato una serie di schede interconnesse tra loro tramite rs485.
tra le schede realizzate, ne esiste una utilizzando appunto un modulo arduino.
Prendendo quindi spunto dal suo codice, ho iniziato a creare tre scetch: un master e due slave.
dal codice di massari, poichè già testati, ho preso le varie funzioni per la creazione della trama da inviare, invio trama, lettura trama, decodifica trama e elaborazione pacchetto.
mi rendo perfettamente conto che il progetto è molto complicato per quelle che sono le mie conoscenze/competenze ma...
avrei bisogno di un input per risolvere il primo scoglio con il quale mi sto scontrando.
non allego le varie funzioni che, come ho detto, fanno il loro dovere egregiamente per non appesantire il post.
poichè il master non avrà nessuna entrata/uscita collegate (almeno per il momento), pensavo di interrogare i vari slave in pooling
void loop() {
byte indirizzo;
byte tipo=12;
byte dato1=0;
byte dato2=0;
int i;
int infinito;
while (infinito=1) { //creo un ciclo infinito
for (i=2;i<num_slave-1;i++) {
if (!Serial.available()) {
code_data_to_send(i,tipo,0,0);
}
else {
serialEvent();
}
}
}
}
la funzione code_data_to_send invia correttamente le trame (verificato tramite monitor seriale sullo slave) e i due slave, dopo aver eseguito ogni funzione, "reagiscono" correttamente.
guardando invece il monitor seriale del master, mi rendo conto che:
al primo invio entrambi gli slave inviano l'ack ma dal secondo invio del master, benchè entrambi abbiano ricevuto, decodificato e elaborato il pacchetto, solo il primo slave invia l'ack!
presumo che il problema sia legato ai tempi di esecuzione e che in maniera casuale, si verifica l'evento appena descritto.
mi potreste indicare la giusta direzione per far si che, il master, dopo aver inviato il suo comando, aspetti un tempo X entro il quale lo slave deve rispondere?
spero di aver descritto correttamente il mio problema.
grazie in anticipo