1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#!/usr/bin/env perl use Device::SerialPort::Arduino; use strict; use warnings; my $Arduino = Device::SerialPort::Arduino->new( port => '/dev/tty.usbmodemFA131', baudrate => 9600, databits => 8, parity => 'none', ); my $speed = $ARGV[0]; sleep(2); # Send something via Serial $Arduino->communicate("$speed") or die 'Warning, empty string: ', "$!\n"; # receive sth from Arduino with delay print $Arduino->receive(2), "\n";
1 2 3 4 5 6 7 8 9 10
#! /usr/bin/perl use strict; use warnings; use 5.010; # read from STDIN (or read from files given as arguments) while ( my $line = <> ) { chomp $line; say "I got: $line"; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#! /usr/bin/perl use strict; use warnings; use 5.010; my $worker = "./worker.pl"; my @values = 1 .. 10; open( my $pipe, '|-', $worker ) or die "Can't open pipe to $worker: $!"; $pipe->autoflush; for my $value ( @values ) { say $pipe $value; sleep 1; } close $pipe;
Guest phischmiNun ist meine Idee, die Kommunikation zum Arduino aufrecht zu erhalten und das Script mit wechselnden Werten zu füttern, ohne es jedesmal explizit mit einem anderen Parameter aufzurufen.
Stattdessen würde ich ein zweites Hilfsscript "zwischenschalten" wollen und mit dem gewünschten Parameter aufrufen. Dieses kommuniziert dann mit dem Script, welches die serielle Verbindung mit dem Arduino hält.
Soweit mein Plan :D
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
#!/usr/bin/env perl # worker.pl use Device::SerialPort::Arduino; use warnings; use strict; my $Arduino = Device::SerialPort::Arduino->new( port => '/dev/tty.usbmodemFA131', baudrate => 9600, databits => 8, parity => 'none', ); my $line = "nothing"; print "Worker running.\n"; while ($line ne "exit") { $line = <>; if ($line) { chomp($line); print "I got: $line\n"; $Arduino->communicate($line); next; } else { $line = "nothing"; } sleep(1); } print "Worker finished.\n"; # receive sth from Arduino with delay # print $Arduino->receive(2), "\n";
./worker.pl < myfifo
echo 100 > myfifo
2016-07-17T16:21:54 hlubenow1. Führe folgendes bash-Skript aus:
Dann siehst Du ein eigenartiges neues File "myfifo" im Verzeichnis (named pipe).
2016-07-17T20:13:19 LinuxerIch frage mich, welchen Sinn der Teil nach dem mkfifo hat? mkfifo legt eine named pipe an. Dazu braucht es den Teil dahinter nicht. Was soll das genau bezwecken?