Arduino e FT515KS

Ciao ragazzi, ho una scheda collegata al pc che controlla 8 relè tramite comunicazione seriale; inoltre ha anche degli ingressi analogici e digitali che fin’ora non ho utilizzato perchè non so a cosa possono servire. Sto vedendo un pò come funziona la comunicazione seriale di arduino, credo sia possibile comandare i relè senza il pc, ci sto lavorando. Una cosa che non mi è chiara è a cosa servono gli ingressi della scheda e se è possibile farli interagire con arduino. Le caratteristiche della scheda sono disponibili al link che inserisco, non voglio assolutamente fare pubblictà (è pure fuori catalogo)
http://www.futuraelettronica.net/pdf_ita/7100-FT515KS.pdf

Certo che puoi farli interagire con arduino, devi pero collegarti al centro dei jumper che selezionano seriale/usb direttamente con la seriale dell'Atmega. Dato che tramite USb sono tutti e 2 slave non possono dialogare e la seriale a 9 poli ha i livelli RS232 mentre tu sull'arduino hai i C-MOS.

Certo che puoi farli interagire con arduino, devi pero collegarti al centro dei jumper che selezionano seriale/usb direttamente con la seriale dell'Atmega. Dato che tramite USb sono tutti e 2 slave non possono dialogare e la seriale a 9 poli ha i livelli RS232 mentre tu sull'arduino hai i C-MOS.

Sto provando con scarsi tentativi a controllare la scheda. Ho seguito il tuo consiglio, quindi ho collegato i pin digitali 0 e 1 di arduino sul jumper di selezione della scheda. Il manuale della scheda dice che occorre inviare dei pacchetti composti da 4 byte secondo questa logica: "" "" "dato" "#" I primi due asterischi servono per la sincronizzazione, il terzo carattere è un byte contenente 8 bit che determinano lo stato di ogni relè e il cancelletto serve per chiudere il pacchetto. Ho scritto un pò di codice tanto per provare e succede che la scheda ha problemi a sincronizzarsi con arduino, infatti soltanto raramente la scheda risponde ai comandi. Ecco la prima bozza molto elementare di codice che ho scritto, serve a far accendere i relè in sequenza, dal primo all'ottavo dopodichè quando tutti e otto sono accesi, si spengono e il ciclo ricomincia:

int R1 = 0; // R1 variabile per il relè 1 int R2 = 0; // se è 0 il relè è spento, 1 acceso. int R3 = 0; int R4 = 0; int R5 = 0; int R6 = 0; int R7 = 0; int R8 = 0; int Dato; // variabile per calcolare il terzo byte da inviare

int calcolo() { int Dato = R1*1 + R2*2 + R3*4 + R4*8 + R5*16 + R6*32 + R7*64 + R8*128; Serial.print(""); Serial.print(""); Serial.print(Dato,BYTE); Serial.println("#");

}

void setup() { Serial.begin(9600); }

void loop() { R1=1; // accendo il primo relè calcolo(); delay(1000); R1=1; R2=1; // accendo anche il secondo relè calcolo(); delay(1000); R1=1; R2=1; R3=1; // poi il terzo calcolo(); delay(1000); R1=1; R2=1; R3=1; R4=1; // anche il quarto calcolo(); delay(1000); R1=1; R2=1; R3=1; R4=1; R5=1; calcolo(); delay(1000); R1=1; R2=1; R3=1; R4=1; R5=1; R6=1; calcolo(); delay(1000); R1=1; R2=1; R3=1; R4=1; R5=1; R6=1; R7=1; calcolo(); delay(1000); R1=1; R2=1; R3=1; R4=1; R5=1; R6=1; R7=1; R8=1; // ora sono tutti e 8 accesi calcolo(); delay(1000); R1=0; R2=0; R3=0; R4=0; R5=0; R6=0; R7=0; R8=0; // tutti e 8 i relè spenti calcolo(); delay(1000); }

Dopo aver caricato lo script non succede nulla, solo dopo un pò di tempo e molti tentativi i relè cominciano ad attivarsi; c'è da dire però che una volta che accetta un comando poi non ha più problemi. Ho provato a resettare anche arduino ma il problema persiste, è come se non si riescono a sincronizzare. Avete qualche dritta? Un'altra cosa, la scheda invia come risposta un pacchetto di 3 byte secondo la logica "dato1" "dato2" "dato3", come faccio a riceverli tutti e tre separatamente? Ho provato con la funzione Serial.read() ma non riesco. Saluti a tutti.

Devo usare Serial.available() per la sincronizzazione? Ho cercato sulla reference come avviene la comunicazione seriale, qualcuno ha la gentilezza di spiegarmi dove sto sbagliando? Saluti

Sto continuando a provare senza ottenere risultati. Ho provato ad usare Serial.write() al posto di Serial.print() ma fa esattamente come prima. Per curiosità poi ho riadattato il codice in processing e ho collegato la scheda al pc tramite seriale senza usare arduino. La scheda risponde perfettamente ai comandi. Posto il codice funzionante (processing):

import processing.serial.; Serial myPort; void **setup() { String portName = Serial.list()[0]; myPort = new Serial(this, portName, 9600); } void draw() { myPort.write(''); myPort.write(''); myPort.write(1); myPort.write('#'); delay(2000); myPort.write(''); myPort.write(''); myPort.write(2); myPort.write('#'); delay(2000); myPort.write(''); myPort.write(''); myPort.write(4); myPort.write('#'); delay(2000); myPort.write(''); myPort.write(''); myPort.write(8); myPort.write('#'); delay(2000); myPort.write(''); myPort.write(''); myPort.write(16); myPort.write('#'); delay(2000); myPort.write(''); myPort.write(''); myPort.write(32); myPort.write('#'); delay(2000); myPort.write(''); myPort.write(''); myPort.write(64); myPort.write('#'); delay(2000); myPort.write(''); myPort.write(''); myPort.write(128); myPort.write('#'); delay(2000); myPort.write(''); myPort.write('*'); myPort.write(0); myPort.write('#'); delay(10000); }

Facendo questa prova ho dedotto che il metodo utilizzato per creare il pacchetto di dati da inviare è corretto, soltanto non capisco perchè le due schede non si sincronizzano. Ormai è una settimana che ci sto sbattendo la testa...