penso di aver già visionato quella pagina (ne ho viste tante).
Starei cercando proprio una guida, anche generica, che spieghi COSA voglia dire comunicare sulla seriale, ecc (compreso i concetti di stream, flush, ecc... tutte cose che NON mi sono affatto chiare).
Ho trovato vari articoletti...Hai visto anche le pagine della nostra WIKI sull'argomento ?
perchè per un argomento del genere mi aspetterei un po' di più...Devi sempre tenere conto (https://forum.ubuntu-it.org/images/smilies/teach.gif) che ogni pagina della wiki è fatta da qualcuno che volontariamente e gratuitamente intende condividere le proprie conoscenze su un argomento.
Devi sempre tenere conto che ogni pagina della wiki è fatta da qualcuno che volontariamente e gratuitamente intende condividere le proprie conoscenze su un argomento.
Sulle "Porte":
https://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Porte
Su "Arduino":
https://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Gambas_e_Arduino
Forse :-\ dovresti porre una domanda specifica alla volta, passo-passo.
(Speriamo che qualcuno ben più esperto di me al riguardo intervenga.)
Forse :-\ dovresti porre una domanda specifica alla volta, passo-passo.Sì lo spero anch'io...
(Speriamo che qualcuno ben più esperto di me al riguardo intervenga.)
Per intanto ben venuto nino83.
Io ho giocato un po' con le seriali, se posti del codice posso provare ad aiutarti, perché così faccio fatica a immaginare cosa non va.
Private SerialPort1 As SerialPort
Public Sub Form_Open()
With SerialPort1 = New SerialPort As "portaseriale"
.PortName = "/dev/ttyACM0"
.Speed = 9600
.Parity = 0
.DataBits = 8
.StopBits = 1
.FlowControl = SerialPort.None
End With
End
Public Sub btnON_Click()
SerialPort1.Open()
If SerialPort1.Status = Net.Active Then
SerialPort1.Begin
Print #SerialPort1, "HUB_ON"; Chr$(13); Chr$(10)
Sleep 0.1
SerialPort1.Send
Sleep 1.0
Wait
SerialPort1.Close
Endif
End
Public Sub btnOFF_Click()
SerialPort1.Open()
If SerialPort1.Status = Net.Active Then
SerialPort1.Begin
Print #SerialPort1, "HUB_OFF"; Chr$(13); Chr$(10)
Sleep 0.1
SerialPort1.Send
Sleep 1.0
SerialPort1.Close
Endif
End
Public Sub Form_Close()
If SerialPort1.Status = Net.Active Then SerialPort1.Close
End
Tieni presente, ma probabilmente già lo sai, la gestione delle seriali su Linux è differente da quella di Windows.
Partiamo dall'HW. cosa devi collegare?
Avendo usato il comando "Print", che di per sé invia una stringa formattata con il comando "nuova riga a capo" (in Linux: 0x0A), penso non sia necessario impostare i due valori finali non-stampabili: Chr$(13); Chr$(10) .Codice: [Seleziona]Print #SerialPort1, "HUB_ON"; Chr$(13); Chr$(10)
......
Print #SerialPort1, "HUB_OFF"; Chr$(13); Chr$(10)
@nino83
Ovviamente quando colleghi arduino trovi il file /dev/ttyACM0 giusto!
Se vuoi comunicare con la seriale devi anche averei permessi per farlo.
Si usa (se già non l'hai fatto):
sudo adduser username dialout
dove username è il nome dell'utnte che userà le seriali.
Prova!
ad ogni modo, come posso eseguire quel comando (sudo adduser username dialout)?Il comando di cui sopra devi usarlo una sola volta, non nel programma ma da terminale.
Chiamando nel codice, poco prima, un comando "EXEC"?
Il comando di cui sopra devi usarlo una sola volta, non nel programma ma da terminale.
Stai in sostanza dicendo a Linux che l'utente "username" è autorizzato all'uso dei device di comunicazione.
ma una volta per sempre?Sì
Ma questo SW devo realizzarlo io...;D
non avendo esperienza di Stream generici e operazioni legate.Come è noto uno "Stream" è - appunto - un flusso di dati-byte che possono essere "letti da" o "scritti in" una memoria (di qualunque tipo) o un file-device creato dal sistema Linux per comunicare con dispositivi virtuali o reali esterni (" In Linux tutto è un file. ").
....mia domanda iniziale: una guida completa!Purtroppo non esiste una guida organica e completa, scritta in italiano, per apprendere il linguaggio Gambas (insomma un "manuale", cartaceo o on-line che sia).
Che San Midi ti protegga!
il problema è linux!...ovviamente potrai fare delle ricerche in rete sugli aspetti di Linux che vuoi comprendere meglio.
se fossi in te proverei a scrivere un piccolo programma di comunicazione
cortocircuitando il TX con RX per vedere se rileggi quello che scrivi sulla seriale.
Userei la gestione della porta direttamente dall'IDE di Gambas che trovo, per le prove molto comoda.
Private intervSleep As Float = 0.5
Private SComm As SerialPort
Const None As Integer = 0
Private Rx As String
Public Sub Form_Open()
SComm = New SerialPort As "SComm"
SComm.PortName = "/dev/ttyACM0"
SComm.Speed = "9600"
SComm.Parity = 0
SComm.DataBits = "8"
SComm.StopBits = "1"
SComm.FlowControl = 0
Try
SComm.Open()
TextArea2.Text &= "seriale aperta..." & "\r\n"
SComm.Close()
TextArea2.Text &= "...e subito chiusa" & "\r\n"
If Error
Message("Problema nel test della seriale...")
Quit
End If
End
Public Sub btnON_Click()
SComm.Open()
SComm.Begin()
Sleep intervSleep
Write #SComm, "HUB_ON"
Sleep intervSleep
SComm.Send()
SComm.Close()
End
Public Sub btnOFF_Click()
SComm.Open()
SComm.Begin()
Sleep intervSleep
Write #SComm, "HUB_OFF"
Sleep intervSleep
SComm.Send()
SComm.Close()
End
Se nella sub dei tasti metti sempre
SComm.Open()
SComm.Begin()
e relative chiusure alla fine devi attendere il tempo per inizializzare la seriale di conseguenza lo Slepp di attesa.
Se apri la seriale in form e la chiudi quando esci dal programma dovrebbe funzionare meglio.
Spero di non aver sbagliato qualcosa.
...mi è sembrato di capire, che è buona norma APRIRE-LEGGERE/INVIARE-CHIUDERE contestualmente, e non lasciare seriale aperta per svariato tempo...Al di là del caso "porta seriale" quella sequenza di istruzioni rappresenta ovviamente la procedura generale di come leggere "da" o scrivere "in" un file.
Se pensi possa tornarti utile lo posso inviare...magari anche condividerlo su questo forum...