serieel praten met de computer over usb

Hoi,
Lange tijd weggeweest.
Op een ander pad.

Ik heb een nieuw probleem.
Ik wil serieel kunnen communiceren via de usb kabel met de computer.
De oplossing daarvoor is simpel.

Open 2 consoles.
In beide typ je:

stty -F /dev/ttyACM0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts

luisteren is nu:

tail -f /dev/ttyACM0

praten is:

echo "something" > /dev/ttyACM0

In de Arduino zit de basis voorbeeld scetch SerialEvent, lichtjes aangepast, en telkens als ik wat tegen de Arduino zegt, zegt ie wat teug.

Echter om de een of andere reden doet dit het niet altijd.

Of eigenlijk als ik opnieuw opstart, moet ik eerst de seriele console in de ide openen en weer sluiten, en dan pas werkt het.

Is dat iets normaals?
Ben ik iets vergeten?

Zover ik weet zit ik op de goede poort, want die zoek ik op met

ls /dev/ttyACM*

En de baudrate is ook goed.

:slight_smile: Rik.

Hoi Rikky.

Dat ziet er uit als een Linux systeem (of iets dat daar zwaar op leunt).

Schijnbaar initialiseer je iets niet goed, en moet je daarom meeliften met de al door de IDE geïnitialiseerde verbinding.
De IDE gooit het DTR signaaltje om, wat leidt tot een reset van de Arduino.
Ik weet niet of dat iets is wat standaard hoort te gebeuren tijdens het opzetten van een seriële verbinding, of dat dat specifiek aangestuurd moet worden.
Dit Data Terminal Ready signaal is van origine bedoeld om aan te geven dat de PC klaar is om data te gaan ontvangen, maar voor de Arduino wordt het dus misbruikt om een reset te generen.

Ik heb nooit meegemaakt dat er geen data uit een Arduino kwam voor er eerst met de IDE wat gedaan werd.

Okee, dank je wel.

Dit is bruikbare informatie.
Eerstens weet ik nu, dat het aan mij ligt, of aan mijn systeem.
Het is dus iets dat is op te lossen, en tweedens kan ik nu verder zoeken op DTR.
Want ik zat helemaal vast.
Google gaf zo’n beetje 400.000 antwoorden.
En dan kan je door de bomen het bos niet meer zien.

Een Linux systeem inderdaad op een Raspberry Pi.
De logische combinatie voor met een Arduino toch?

En ik heb geen idee of er Windows op een Raspberry kan, maar waarom zou je, als er zoveel andere open source mogelijkheden zijn.

Je gaat je toch niet vrijwillig knechten aan de groot oligarchen.
Maar dat is mijn persoonlijke opinie.
Als anderen daar anders over denken, dat staat hun vrij. :wink:

Gelukkig kan je op een Raspi met een multibootsysteem, Berryboot, vrij eenvoudig je systeem helemaal leegwissen, of snel even een heel nieuw besturingsysteem installeren.
Dat ga ik dan nu even doen.
Dan weet ik direct of het aan mij, die iets fout doet, of aan een fout in het systeem ligt.

Dank.
:slight_smile: Rik.

Ik had nog een andere Raspi liggen, zonder scherm, en zonder Arduino IDE.

2 keer

ssh pi@ipadres.andere.machine

en dan moest ik voor de ene console

tail -f /dev/ttyACM0

veranderen in

cat /dev/ttyACM0

en nu werkt het.

Tijd voor een fresh install dus.

Dank
:slight_smile: Rik.

Ik weet niet of er mensen in geinteresserd zijn, maar deze informatie had ik nodig om een BaCon code snippet te maken, om te praten met de Arduino.

BaCon is een Basic to C vertaler,
En Basic is werkelijk de meest menselijke computertaal die er bestaat.
Komt nog uit de jaren 80

Een soort van baby Engels.

Dus de code in BaCon, nogmaals, voor wie het interessert wordt nu

luisteren:

 usb_port$ = "/dev/ttyACM0"
baudrate = 115200

OPEN usb_port$ FOR DEVICE AS myserial

SETSERIAL myserial SPEED baudrate
SETSERIAL myserial CMODE CS8
SETSERIAL myserial IMODE ~IGNBRK
SETSERIAL myserial IMODE ~BRKINT
SETSERIAL myserial IMODE ~ICRNL
'~imaxbel //windows
SETSERIAL myserial OMODE ~OPOST
SETSERIAL myserial OMODE ~ONLCR
SETSERIAL myserial LMODE ~ISIG
SETSERIAL myserial LMODE ~ICANON
SETSERIAL myserial LMODE ~IEXTEN
SETSERIAL myserial LMODE ~ECHO
SETSERIAL myserial LMODE ~ECHOE
SETSERIAL myserial LMODE ~ECHOK 
SETSERIAL myserial LMODE ~ECHOCTL
SETSERIAL myserial LMODE ~ECHOKE : ' only bsd 
SETSERIAL myserial LMODE NOFLSH
SETSERIAL myserial IMODE ~IXON
SETSERIAL myserial CMODE ~CRTSCTS

PRINT "connecting " & usb_port$ & " at " &  STR$(baudrate) & " b/s."
 
 WHILE TRUE
 
  OPEN usb_port$ FOR READWRITE  AS arduino
  READLN sendtext$ FROM arduino
  IF LEN(sendtext$) > 0 THEN 
  
 PRINT sendtext$
 SLEEP 50

  END IF

WEND

CLOSE FILE arduino
CLOSE DEVICE myserial

praten:

usb_port$ = "/dev/ttyACM0"
baudrate = 115200
 
OPEN usb_port$ FOR DEVICE AS myserial

 ' Set speed - B0, B50, B75, B110, B134, B150, B200, B300, B600, B1200, B1800, B2400, B4800, B9600, B19200, B38400, B57600, B115200, B230400
 
SETSERIAL myserial SPEED baudrate
SETSERIAL myserial CMODE CS8
SETSERIAL myserial IMODE ~IGNBRK
SETSERIAL myserial IMODE ~BRKINT
SETSERIAL myserial IMODE ~ICRNL
'~imaxbel //windows
SETSERIAL myserial OMODE ~OPOST
SETSERIAL myserial OMODE ~ONLCR
SETSERIAL myserial LMODE ~ISIG
SETSERIAL myserial LMODE ~ICANON
SETSERIAL myserial LMODE ~IEXTEN
SETSERIAL myserial LMODE ~ECHO
SETSERIAL myserial LMODE ~ECHOE
SETSERIAL myserial LMODE ~ECHOK 
SETSERIAL myserial LMODE ~ECHOCTL
SETSERIAL myserial LMODE ~ECHOKE : ' only bsd 
SETSERIAL myserial LMODE NOFLSH
SETSERIAL myserial IMODE ~IXON
SETSERIAL myserial CMODE ~CRTSCTS

 PRINT "connecting " & usb_port$ & " at " & STR$(baudrate) & " b/s."
 
 WHILE TRUE
 
   INPUT "give here some sendtext : ",sendtext$
   IF sendtext$ = "" THEN BREAK
   
   OPEN usb_port$ FOR READWRITE  AS arduino
   WRITELN sendtext$ TO arduino
   IF LEN(sendtext$) > 0 THEN 
  
 PRINT sendtext$
 SLEEP 50
 
  END IF

WEND

CLOSE FILE arduino
CLOSE DEVICE myserial

vergeet Java Python php, en al de rest.
Baby Engels brengt je overal, waar je maar wilt.

http://www.basic-converter.org/