|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2004
Città: milano
Messaggi: 397
|
[C] Leggere e scrivere su porta seriale
Ciao a tutti,
dopo alcuni giorni di imprecazioni provo a chiedere aiuto a voi Dovrei fare un programmino per leggere e scrivere su una porta seriale, nella fattispecie leggere da una porta (mettiamo COM1), manipolare i dati e stampare su un'altra (mettiamo COM2). Vorrei arrivare ad avere un file .exe da poter eseguire da qualunque pc, con le relative porte ovviamente. Premetto che l'unico linguaggio nel quale riesco a muovermi un pò è il C, ho già fatto questo programma usando matlab solo che sostanzialmente non è "trasportabile". Ho girato e rigirato il web, ma piuttosto che chiarirmi mi sono venuti solo dubbi, quindi comincio con un pò di domande - si può fare in C? - riesco a fare il programma e farlo girare da una finestra del prompt di windows? - avrei problemi se usassi un adattatore seriale su porta usb? Ho trovato qualche esempio, ma mi sono ritrovato imbrigliato tra C e C++, e non conoscendo bene la differenza sono ancora più confuso Volendo potrei usare anche C++, però non avendolo mai usato non vorrei complicarmi ancora di più la vita. Spero possiate darmi qualche delucidazione, poi casomai se ho altri dubbi aggiungo in seguito. Grazie a tutti! Ciao |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2004
Città: milano
Messaggi: 397
|
In attesa di qualche pio aiuto
mi è sembrato molto semplice e simile al matlab. Però il dubbio è lo stesso: sono riuscito anche a creare una cartella con l'exe e le librerie, ma quanto è effettivamente "trasportabile"? Qualcuno ha qualche esperienza in merito? Grazie ancora. Ciao |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jun 2008
Città: Verona
Messaggi: 68
|
Si, si può anche con il C.
Se utilizzi linux il dispositivo collegato alla seriale lo vede come un file. Per windows è diverso. Esistono varie librerie che ti aiutano, potresti richiamare qualche comando assembler oppure provare a vedere la libreria libusb(utilizando un adattatore..io una volta l'ho provato e funzionava!) Ciao! |
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2004
Città: milano
Messaggi: 397
|
Grazie a tutti e scusate per il ritardo... troppo lavoro
In realtà ho passato un altro paio di giorni a smanettare ma poi mi sono rotto le scatole e sono passato a python: mai usato ma mi sono trovato benissimo ed ha gli stessi principi del matlab. Tra l'altro ho fatto anche un po di prove di "portabilità" e pare che su tre pc differenti funzioni senza problemi a differenza del matlab. Anzi, chiederei ai moderatori se possibile, di cambiare il linguaggio nel titolo, grazie. Vi posto il codice Codice:
import serial
import msvcrt
ser = serial.Serial(4) #open first serial port
ser.timeout=None
ser1 = serial.Serial(0)
ckk="v"
ckk1="v"
print ser.portstr #check which port was realy used
print ser1.portstr #check which port was realy used
print "Premi un tasto per iniziare la simulazione"
a=msvcrt.getch()
while ckk1!="q":
while ckk!="t":
ser.flushInput()
print "LEGGI DA PORTA SERIALE"
code=ser.read(13)
.
.
.altre operazioni in mezzo
.
.
ser1.write(code)
print "Premi un tasto per continuare o T per uscire"
ckk=msvcrt.getch()
ckk="v"
print "ciao"
print "premi un tasto per ricominciare la simulazione o Q per uscire"
ckk1=msvcrt.getch()
ser.close() #close port
ser1.close() #close port
Adesso avrei un ultimo problema, vorrei fare il ciclo while in modo che si interrompa quando premo t o un tasto qualsiasi, il classico repeat until keypressed senza dover ogni volta premere un tasto al termine del while. Per ora sono riuscito solo a fare un while così Codice:
while not (msvcrt.kbhit() and msvcrt.getch() == "t"): il timeout perdo dal monitor tutte le informazioni perchè il cursore comincia a scorrere. Grazie a tutti. Ciao! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:53.




















