Seriell komunikation linux script problem

Permalänk
Medlem

Seriell komunikation linux script problem

Hej!

Är väldigt ny med Linux och shell script och har stött på ett problem jag inte lyckas få någon ordning på.

Det jag ska göra i scriptet kort förklarat är att skicka "3" till en arduino uno. Sen ska det hända lite mer saker.
Men problemet är att när jag startar mitt script så skickar aldrig datorn iväg någon "3", så programet i arduinon körs aldrig då den väntar på "3an".

Men om jag skriver "sudo screen /dev/ttyACM0 115200" i terminalen och sen avlutar "screen" och kör scriptet igen då funkar allt klockrent.
Drar jag ur USBn eller startar om datorn så får jag samma problem som innan.

Här är koden jag har i mitt script som endast funkar efter man har kört "screen":
stty -F /dev/ttyACM0 115200
echo -n "3" > /dev/ttyACM0

Någon som har något förslag på hur man ska lösa detta problem ?

Tacksam för svar!

Permalänk
Medlem

Har din användare skrivrättigheter på /dev/ttyACM0?

Här kanske du hittar något matnyttigt: http://forum.arduino.cc/index.php?topic=61127.0

Visa signatur

Det finns bara två sorters hårddiskar: de som har gått sönder och de som skall gå sönder.

Permalänk
Medlem
Skrivet av NoX1989:

Hej!

Är väldigt ny med Linux och shell script och har stött på ett problem jag inte lyckas få någon ordning på.

Det jag ska göra i scriptet kort förklarat är att skicka "3" till en arduino uno. Sen ska det hända lite mer saker.
Men problemet är att när jag startar mitt script så skickar aldrig datorn iväg någon "3", så programet i arduinon körs aldrig då den väntar på "3an".

Men om jag skriver "sudo screen /dev/ttyACM0 115200" i terminalen och sen avlutar "screen" och kör scriptet igen då funkar allt klockrent.
Drar jag ur USBn eller startar om datorn så får jag samma problem som innan.

Här är koden jag har i mitt script som endast funkar efter man har kört "screen":
stty -F /dev/ttyACM0 115200
echo -n "3" > /dev/ttyACM0

Någon som har något förslag på hur man ska lösa detta problem ?

Tacksam för svar!

Från manualen:
"If a tty (character special device) name (e.g. "/dev/ttya") is specified as the first parameter, then the window is directly connected to this device. This window type is similar to "screen cu -l /dev/ttya". Read and write access is required on the device node, an exclusive open is attempted on the node to mark the connection line as busy

<baud_rate>
Usually 300, 1200, 9600 or 19200. This affects transmission as well as receive speed.

"

115200 är baud rate.

Skriver du sudo screen /dev/ttyACM0 115200 så kommer det vara kvar fram tills du stänger shell eller som du säger kopplar ut/in den igen vilket då ställer automatiskt till default.

Kör det kommandot i skriptet innan du skall skicka något så kan du vara säker på att den ställer rätt baud.
Jag tror du skulle kunna sätta baud rate automatiskt genom att skapa en udev regel (udev rule) men är inte helt säker.

Hoppa in på #Arduino eller ##electronics kanalen på freenode så kan de säkert hjälpa dig mer.

Visa signatur

Arch - Makepkg, not war -||- Gigabyte X570 Aorus Master -||- GSkill 64GiB DDR4 14-14-15-35-1T 3600Mhz -||- AMD 5900x-||- Gigabyte RX6900XT -||- 2x Adata XPG sx8200 Pro 1TB -||- EVGA G2 750W -||- Corsair 570x -||- O2+ODAC-||- Sennheiser HD-650 -|| Boycott EA,2K,Activision,Ubisoft,WB,EGS
Arch Linux, one hell of a distribution.

Permalänk
Medlem

@Commander:

Hej!

Du skrev att jag kan lägga in det kommandot innan i scriptet.
Menar du kommandot "sudo screen /dev/ttyACM0 115200" ?

För det har jag testat med och det som händer då är att screen fönstret öppnas och sen kör den inte mer i scriptet.
Det jag skulle vilja att den gör i så fall är att den öppnar screen och sen stänger det igen och fortsätter i mitt script.
Någon idé på de ? Går det att göra ?

Permalänk
Medlem
Skrivet av NoX1989:

@Commander:

Hej!

Du skrev att jag kan lägga in det kommandot innan i scriptet.
Menar du kommandot "sudo screen /dev/ttyACM0 115200" ?

För det har jag testat med och det som händer då är att screen fönstret öppnas och sen kör den inte mer i scriptet.
Det jag skulle vilja att den gör i så fall är att den öppnar screen och sen stänger det igen och fortsätter i mitt script.
Någon idé på de ? Går det att göra ?

Yes, detta bör nog funka, inte testat men & kommer sätta den som en job i bakgrunden. Dock vet jag inte om du måste vara i själva screen för att skriva till Arduinon.

sudo screen /dev/ttyACM0 115200 &

Visa signatur

Arch - Makepkg, not war -||- Gigabyte X570 Aorus Master -||- GSkill 64GiB DDR4 14-14-15-35-1T 3600Mhz -||- AMD 5900x-||- Gigabyte RX6900XT -||- 2x Adata XPG sx8200 Pro 1TB -||- EVGA G2 750W -||- Corsair 570x -||- O2+ODAC-||- Sennheiser HD-650 -|| Boycott EA,2K,Activision,Ubisoft,WB,EGS
Arch Linux, one hell of a distribution.

Permalänk
Medlem
Skrivet av Commander:

Yes, detta bör nog funka, inte testat men & kommer sätta den som en job i bakgrunden. Dock vet jag inte om du måste vara i själva screen för att skriva till Arduinon.

sudo screen /dev/ttyACM0 115200 &

Testade att lägga till den raden kod i scriptet på raden innan.
Det enda jag får då är "Must be connected to a terminal"

Testar jag att skriva in den raden direkt i terminalen får jag upp screen och hela terminalen låser sig så jag måste trycka krysset och öppna en ny terminal.

Tack för tipset endå ! Uppskattar det verkligen.

Permalänk
Medlem
Skrivet av NoX1989:

Testade att lägga till den raden kod i scriptet på raden innan.
Det enda jag får då är "Must be connected to a terminal"

Testar jag att skriva in den raden direkt i terminalen får jag upp screen och hela terminalen låser sig så jag måste trycka krysset och öppna en ny terminal.

Tack för tipset endå ! Uppskattar det verkligen.

Hm försök

-d -m Start screen in "detached" mode. This creates a new session but doesn't attach to it. This is useful for system startup scripts.

sudo screen -dm /dev/ttyACM0 115200 &

Visa signatur

Arch - Makepkg, not war -||- Gigabyte X570 Aorus Master -||- GSkill 64GiB DDR4 14-14-15-35-1T 3600Mhz -||- AMD 5900x-||- Gigabyte RX6900XT -||- 2x Adata XPG sx8200 Pro 1TB -||- EVGA G2 750W -||- Corsair 570x -||- O2+ODAC-||- Sennheiser HD-650 -|| Boycott EA,2K,Activision,Ubisoft,WB,EGS
Arch Linux, one hell of a distribution.

Permalänk
Medlem
Skrivet av Commander:

Hm försök

-d -m Start screen in "detached" mode. This creates a new session but doesn't attach to it. This is useful for system startup scripts.

sudo screen -dm /dev/ttyACM0 115200 &

Har testat det och det funkar sådär. Allt känns väldigt opålitligt.
Ibland funkar det på första försöket och ibland på kanske 3e. Väldigt oklart vad det kan vara som ställer till det.

Tack för hjälpen !!

Permalänk
Medlem

Har du testat att köra stty -a --file=/dev/ttyACM0 före och efter screen för att se vilka inställingar screen ändrar på ttyn?

Permalänk
Medlem
Skrivet av Emaku:

Har du testat att köra stty -a --file=/dev/ttyACM0 före och efter screen för att se vilka inställingar screen ändrar på ttyn?

Aaa, har testat det och det är lite inställningar som ändras ser jag.
Har även försökt och återskapa samma inställningar genom att skriva tex, "stty -F /dev/ttyACM0 eof ^d min 100 time 2 -echoke "...... osv så att alla inställningar ser identiska ut. Men ändå funkar det inte förrän jag skriver in screen komandot.