quanti programmi per gestire il seriale da arduino verso il pc

Ciao ragazzi... come da titolo, voglio far ricevere al pc i byte provenienti dall'arduino tramite seriale.. Avevo pensato di scrivere due programmi a questo scopo : il primo sara' salvato sulla memoria dell'arduino e servira' per inviare i dati al pc; il secondo funzionerà sul pc e servirà a leggere i dati inviati e comportarsi di conseguenza. IN SOSTANZA : l'utente digita un pulsante , quindi il primo programma invia un determinato dato al pc tramite seriale; nello stesso momento il secondo programma dovrebbe captare quel dato e agire di conseguenza. Secondo voi é possibile che i due programmi agiscano in sincronia senza perdere dati per strada? e ancora... nel caso in cui non fosse possibile, come potrei risolvere ?

Se conosci il java, potresti usare Processing per il programma su PC --> http://www.processing.org/
Nell'IDE di Processing, da cui è derivato anche quello di Arduino, ci sono molti esempi sulla comunicazione da e per Arduino.

@Simrizze:
va bene un qualunque linguaggio lato PC che gestisce la seriale, la seriale poi è bufferizzata quindi non perdi dati se non li ricevi nel momento in cui sono spediti, vengono memorizzati e sono disponibili per un accesso in un secondo momento

:relaxed:
@leo72
1)come devo convertire un livello (ho visto sul alcuni post che Arduino UNO lavora con livelli TTL, la porta RS232 del PC NO)?
2)ho bisogno di spezzettare il dato per poter inviare un byte alla volta?
3) c'è il pericolo di fondere l'arduino,dato che esso lavora con tensioni fino a 5v mentre il pc può arrivare a 12v\25\ ?
4)basta collegare l'arduino a pc tramite usb o devo comprare qualche adattatore usb\seriale ?
5)come si identifica la porta cosi' creata ?
6)una volta collegato tutto ,posso trattare quella porta usb come se fosse seriale?

P.S. Le numerose domande sono date dal fatto che voglio documentarmi quanto più possibile prima di fare danni.

Grazie 8)

  1. no, quella del pc è un rs232 VERA, serve un chip che tradutra i +/-12v a 0-5v (il che risponde alla domanda 3, sì, te lo frigge)

  2. dipende. in realtà sì, e aggiungere anche un header di 2 bit... in pratica non sei obbligato, le librerie lo fanno già di nascosto al posto tuo. Però quando leggi devi tenere presente che potresti aver ricevuto solo parte dei byte, di solito si usa un byte di valore specifico per indicare il fine messaggio o il TIPO di messaggio (che in tal caso è composto da un numero fisso di byte)

  3. se volleghi arduino al PC, stai sfruttando il connettore seriale-USB presente sulla scheda arduino.

  4. il sistema la vede come una porta seriale, COMX (dove X è un numero) o ttyUSBX o ttyACMX su linux. Se poi dietro quella porta c'è un arduino o un modem o una vera porta seriale non c'è modo di saperlo, a priori, tranne aprire la porta e cercare di identificare il componente in base alle sue risposte ai comandi!

  5. esatto, o meglio, il PC crea una porta seriale virtuale, i cui comandi sono inviati alla USB. se tu togli la USB mentre la seriale è in uso (le seriali non supoprtano il plug-n-play) la seriale virtuale rimamrrà "viva" ma ciò che ci scrivi viene direttamente buttato nel cestino (o meglio in /dev/null)

Mi hai chiarito qualche dubbio,ma ho ancora qualche perplessità.
1)Come fare quindi per adattare la tensione arduino a quella del pc ,voglio dire il chip è economico e reperibile ?
2)Quando creo il programma che dovrà ricevere i dati da Arduino (mettiamo caso che io lo voglia scrivere in c# tramite visual studio) come faccio a identificare quella specifica porta che è collegata ad Arduino ?

Grazie ancora.

  1. un max232 costa meno di un euro, io comprio da rs-online, ha tanta roba e spedisce in fretta, ma ler spedizioni sono 6/8€, non ricordo.

Ma sinceramente per 10/15€ trovi convertitori rs232-ttl -> usb

  1. bhe di base non esiste un metodo. io farei così: per ogni porta seriale, invio la string "pronto?", il mio arduino avràun codice che, riceviuta la stringa, risponde "sì mi dica", quindi se il pc dopo qualche secondo non riceve rispota da nessuna seriale da errore di mancanza arduino, se la riceve da più di una, fa scegliere all'utente.
    Non prendo in considerazione la condizione in cui il codice funziona, di solito non lo fa mai come dovrebbe :grin:

simrizze:
1)Come fare quindi per adattare la tensione arduino a quella del pc ,voglio dire il chip è economico e reperibile ?

La cosa più semplice è collegare l'Arduino tramite il connettore USB, nessun hardware addizionale richiesto perché la scheda è stata progettata per lavorare alle tensioni USB (5V) e per dialogare col computer attraverso quella porta.
Se invece tu devi per forza passare da una seriale VERA, allora come ha detto Lesto ti serve un convertitore, il Max232. Ma tu hai questa necessità? Scusa se te lo chiedo ma inizialmente non sembrava.

Giusto,
Forse non ti è chiaro che la usb già presente su arduino la usi sia per caricare gli sketch sia per comunicare in seriale.
Se carichi un esempio dalla sezione communication stai gia trasferendo dati in modo bidirezionale perché aprendo il serial monitor puoi scrivere qualsiasi cosa ed inviarla ad arduino, ed a sua volta l arduino ti riscrive tutto verso il pc.
Quimdi stai appunto spedendo e ricevendo dati seriali.

Approfitto per una curiosità, il serial monitor è estrapolabile dall ide ? Cioè è un sorgente separato dal resto che potrei far girare autonomamente sotto processing ?

Ok, vi spiego cosa voglio fare.
Voglio creare una tastiera musicale .
In pratica arduino servirà solo a collegarci i 5 tasti e ad inviare al pc tramite seriale 5 segnali differenti a seconda del tasto premuto.
Successivamente,un programma dal pc prenderà il segnale della seriale e in base a quale dei 5 segnali è ,farà partire un determinato suono.

ESEMPIO : premo il 1° tasto della tastiera arduino : arduino invia tramite seriale il codice 1. Il programma scritto in c se riceverà il codice 1 farà partire un suono, se riceverà il 5 un'altro ancora e cosi' via.

Prima ho chiesto come si potrebbe abbassare la tensione perchè lesto mi ha giustamente fatto notare che si potrebbe bruciare la scheda o qualche pin.

So che ho bisogno (a livello hardware e fili per adesso) di 1 arduino, 5 tasti collegati ad esso e di un cavo usb per connettere arduino al pc che funzionerà automaticamente come seriale .
Ho bisogno di altre attrezzature come scalatori di tensione,adattatori,max232 (del quale non ho capito bene la funzione) e qualnt'altro?

Grazie.

Testato:
Approfitto per una curiosità, il serial monitor è estrapolabile dall ide ? Cioè è un sorgente separato dal resto che potrei far girare autonomamente sotto processing ?

Ni, è la RXTX (ora cambiata in non ricordo cosa), ed è la stessa che usa pricessing. Con processing e basta non puoi fare quello che dici, non ha sistemi per creare GUI di input senza usare una lib esterna. se vuoi posso farti qualcosa ad-hoc in poco tempo, ma usare hyperterminal/putty o altro è più veloce

@simrizze: ahh ok. ti spiego; il motivo per cui arduino ha così tanto successo, è proprio perchè gli ideatori hanno GIA' pensato a questo, e la scheda ti arriva già con un circuito che trasforma la seriale TTL di arduino NON in una normale seriale, ma in una USB che poi viene vsta come seriale virtuale. Questo perchè NON tutti i pc (vedi portatili) hanno la seriale, ma tutti hanno la USB.

l'ide lato pc ha un piccolo menù in cui ti mostra tutte le seriali (reali e virtuali) installate sul pc, quindi tu scegli la seriale che compare inserendo l'arduino, schegli il modello di scheda, e puoi programmare. In olrte esiste un piccolo programmino interno chiamato "serial monitor" con cui puoi comunicare con la porta seriale selezionata; ciò è molto comodo per controllare che il codice funzioni, o "parlare" con l'arduino. Una volta che tutto funziona, puoi scrivere (se necessario) un codice lato PC al posto del serial monitor che faccia ciò che deve fare lato pc.

x lesto, so che usa la stessa seriale, visto pero' che l'ide arduino e' fatta con rpocessing, e cosa interessante premendo il tasto SerialMOnitor si apre una finestra a parte, credo che ci sia un bel file che include la Gui, cioe' quella finestra che si apre a parte se e' descritta in un filke a parte, dovrebbe essere facilmente avviabile via processing, magari con piccole modifiche. E' solo curiosita' a titolo di studio, ma non so districarmi bene nei file, tu riesci a capire quella finestra da dove viene fuori ?

x simrizze: ti confermo quindi che nel tuio caso specifico non ti serve niente altro, solo la scheda arduino. Il programa che scriverai lato PC andra' a collegarsi con la seriale virtuale usb di arduino stessa. Su una sola seriale (porta USB) farai sia la programmazione dello sketch che la trasmissione dati che ti interessa

no, l'ide processing è scritto in java, e quello arduino è una fork di processing, quindi ciò vuol dire che l'ide arduino è scritto in java.

Il sistema di disegno è incluso nella classe, ma POTREBBE essere facilemnte esportabile, dipende da come è stata scritta e dalle dipendenze.
Ma vista la semplicità pazzesca di implemntazione è più facile riscriverlo (sono 2 textbox alla fine) cmq ora guardo

Il programma che vorresti realizzare l'ho già fatto io... quindi si può fare...
Vai sul mio sito www.ardulink.org scaricati il software e fammi sapere.

In caso contattami con la form sul sito perché a volte non mi arrivano le notifiche della comunity.