Hola. Está muy bien este proyecto. Quiero aportar mi grano de arena.
Como hace ya muchos años que no uso Windows, dejo una versión del ejemplo Blink, en Perl, para hacerlo funcionar con tu código del Arduino.
Código: Seleccionar todo
#!/usr/bin/perl
use Device::SerialPort::Arduino;
my $Arduino = Device::SerialPort::Arduino->new(
port => '/dev/ttyACM0',
baudrate => 115200,
databits => 8,
parity => 'none',
);
sleep 1; # esperar estabilización del puerto serie
while (1) { # ¡Blink!
$Arduino->communicate('Led_ON');
sleep 1;
$Arduino->communicate('Led_OFF');
sleep 1;
}
Lo bueno es que incluso se puede ejecutar desde la línea de comandos

Código: Seleccionar todo
perl -MDevice::SerialPort::Arduino -E '$ARD = Device::SerialPort::Arduino->new(port=>"/dev/ttyACM0",baudrate=>115200); sleep 1; $ARD->communicate("Led_OFF")'
Naturalmente, esto es muy feo. Es mejor tenerlo en forma de programa, así:
Código: Seleccionar todo
#!/usr/bin/perl
use Device::SerialPort::Arduino;
my $Arduino = Device::SerialPort::Arduino->new(
port => '/dev/ttyACM0',
baudrate => 115200,
databits => 8,
parity => 'none',
);
if (@ARGV) {
for my $orden (@ARGV) { # órdenes en línea de comandos
sleep 1;
$Arduino->communicate($orden);
}
}
else { # órdenes directas
while (my $orden = <>) {
chomp $orden;
last if $orden eq 'fin'; # comando de salida
$Arduino->communicate($orden);
}
}
Y ahora ya podemos darle órdenes tanto desde la línea de comandos
como directamente, hasta que escribamos fin:
Esto solo es una prueba de concepto. Ya lo iré mejorando y lo colocaré en mi cuenta de Github.