Seriell komunikation linux script problem

Trädvy Permalänk
Medlem
Plats
LKPG
Registrerad
Jun 2006

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!

Trädvy Permalänk
Medlem
Plats
Långtbortistan
Registrerad
Mar 2007

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

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

Trädvy Permalänk
Medlem
Plats
#Archlinux
Registrerad
Jun 2007
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.

Arch - Makepkg, not war -||- Asus Crosshair Hero VI -||- GSkill 16GiB DDR4 15-15-15-35-1T 3600Mhz -||- AMD 1600x @ 4.1GHz -||- nVidia MSI 970 Gaming -||- Samsung 850 Pro -||- EVEGA G2 750W -||- Corsair 570x -||- Asus Xonar Essence STX -||- Sennheiser HD-650 -||
Arch Linux, one hell of a distribution.

Trädvy Permalänk
Medlem
Plats
LKPG
Registrerad
Jun 2006

@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 ?

Trädvy Permalänk
Medlem
Plats
#Archlinux
Registrerad
Jun 2007
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 &

Arch - Makepkg, not war -||- Asus Crosshair Hero VI -||- GSkill 16GiB DDR4 15-15-15-35-1T 3600Mhz -||- AMD 1600x @ 4.1GHz -||- nVidia MSI 970 Gaming -||- Samsung 850 Pro -||- EVEGA G2 750W -||- Corsair 570x -||- Asus Xonar Essence STX -||- Sennheiser HD-650 -||
Arch Linux, one hell of a distribution.

Trädvy Permalänk
Medlem
Plats
LKPG
Registrerad
Jun 2006
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.

Trädvy Permalänk
Medlem
Plats
#Archlinux
Registrerad
Jun 2007
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 &

Arch - Makepkg, not war -||- Asus Crosshair Hero VI -||- GSkill 16GiB DDR4 15-15-15-35-1T 3600Mhz -||- AMD 1600x @ 4.1GHz -||- nVidia MSI 970 Gaming -||- Samsung 850 Pro -||- EVEGA G2 750W -||- Corsair 570x -||- Asus Xonar Essence STX -||- Sennheiser HD-650 -||
Arch Linux, one hell of a distribution.

Trädvy Permalänk
Medlem
Plats
LKPG
Registrerad
Jun 2006
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 !!

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Mar 2008

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?

Trädvy Permalänk
Medlem
Plats
LKPG
Registrerad
Jun 2006
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.