Online video hd

Смотреть крупно видео

Официальный сайт ejnews 24/7/365

Смотреть видео бесплатно

sol13 30.04.2011 16:49

ArduinoРабота с Serial port(Часть 1)

Я очень часто, а если быть точнее, постоянно работаю с микроконтроллерами, пишу код для atmeg или для быстроты разработки, пишу для arduino. Так же я начал учить perl, учусь использовать его в нужных мне целях. В данной "заметке" я попытаюсь рассказать как с помощью простой программки на perl можно управлять выходами на плате arduino.

И так начнем. У нас есть Arduino Duemilanove которая подключается через usb к ноутбуку, для того чтобы отправить ей какие-нибудь данные можно воспользоваться библиотекой SerialPort:
 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
use Device::SerialPort;
use Switch;
use strict;
use warnings;

my $port = Device::SerialPort->new("/dev/ttyUSB0");

# 9600, 81N on the USB ftdi driver
$port->baudrate(9600);
$port->databits(8);
$port->parity("none");
$port->stopbits(1);
$port->write_settings();
my $i=1;
while($i){
print "Enter 1 or 0: ";
chomp (my $in = <>);
switch($in){
case 1 {$port->write("1");}
case 0 {$port->write("0");}
case "q" {$i=0;}
else {print "wrong \n";}
}
}
$port->close;
exit(0);


А для того, чтобы все заработало на "железе" нам нужно залить на ардуино программу, которая будет считывать значения с серийного порта:
 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
int ledPin =  13; 
int x ;
int i = 0;

void setup(){
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}

void led_blink(){
if (i == 1){
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}
delay(100);
}

void loop(){
if (Serial.available() > 0){
x = Serial.read();
if (char(x) != '0'){
i = 1;
}
else{
i = 0;
digitalWrite(ledPin, LOW);
}
}
led_blink();
}


Данная программа при получении 1 будет мигать светодиодом на 13 порту.
Вроде все просто.
В следующей "заметке" постараюсь описать процесс чтения данных с серийного порта из perl. Будем получать координаты серво-машинки.


Тэги: perl arduino
+ 13 -
Похожие Поделиться

kma21 02.05.2011 02:06 #
+ 0 -
Cut пожалуйста.
sol13 02.05.2011 02:11 #
+ 1 -
сделал. забыл просто.
Q2W 02.05.2011 14:02 #
+ 1 -
У Вас perl 5.12 что ли?
В остальном - круть!
sol13 02.05.2011 14:05 #
+ 0 -
Да. В fedora было обновление.
1
2
3
4
5
Установленные пакеты
Name        : perl
Arch        : i686
Epoch       : 4
Version     : 5.12.3

Но если надо могу и для 5.10 написать.
kstep 02.05.2011 22:42 #
+ 0 -
Ну вроде же и под 5.10 "use Switch" работает. Только вот что проверял. Больше вроде никаких фич не юзается, так что не нужно же ничего переписывать. Или я что-то упустил?
sol13 02.05.2011 22:57 #
+ 0 -
Вроде все так же, вот код на 5.10 без свитча:
 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
#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

use Device::SerialPort;

my $port = Device::SerialPort->new('/dev/ttyUSB0');

# 9600, 81N on the USB ftdi driver
$port->baudrate(9600);
$port->databits(8);
$port->parity('none');
$port->stopbits(1);
$port->write_settings();

POLL:
for ($| = 1;;) {
    print 'Enter 1 or 0: ';
    chomp (my $inn = <>);
    given ($inn) {
        $port->write($_)  when [qw/0 1/];
        last POLL         when 'q';
        say 'wrong';
    }
}
kstep 02.05.2011 23:50 #
+ 0 -
Вы заблуждаетесь. Это перл 6, но никак не 5, и не 5.10 в том числе.

В перле 5.10 given/switch работают при use Switch:
use Switch 'Perl6'; — для given, use Switch; — для switch.

А вот это, вообще без нужных use, даёт такое:

1
2
3
4
5
6
7
8
9
use v5.10.0;
$inn = 1;
POLL: {
    given ($inn) {
        print 1  when [qw/0 1/];
        last POLL         when 'q';
        say 'wrong';
    }
}


perl test.pl:

syntax error at /home/kstep/test.pl line 5, near "1 when"
syntax error at /home/kstep/test.pl line 6, near "last POLL when"
Execution of /home/kstep/test.pl aborted due to compilation errors.
kstep 02.05.2011 23:52 #
+ 0 -
Debian Wheezy, perl --version:

This is perl, v5.10.1 (*) built for i486-linux-gnu-thread-multi
(with 53 registered patches, see perl -V for more detail)
sol13 02.05.2011 23:54 #
+ 0 -
Понял. учу.
digiwhite 02.05.2011 19:43 #
+ 0 -
Расскажите, под чем и как крутиться программа непосредственно на целевой платформе.

Просто текст программы у меня вызвал вопросы тем, что отсутствуют директивы include и точка входа в программу.
Shihad 02.05.2011 21:17 #
+ 1 -
Это язык программирования Wiring - обертка для C. Крутится на Ардуино - Atmega8/168/328 с обычной обвязкой и выведенными портами.

Поэтому, хоть синтаксис и С-подобный, но include и точка входа не требуются.
digiwhite 02.05.2011 22:00 #
+ 0 -
Понял, спасибо.
sensor_ua 03.05.2011 14:56 #
+ 1 -
Не силён в программировании на Perl, но с микроконтроллерами (в т.ч. AVR без Arduino) дело имею. Для отладки обычно пользуюсь терминалами для последовательных портов. Эхо обычно организовываю со стороны микроконтроллера. Самое простое из используемого мною - Tiny serial terminal - рекомендую.
sensor_ua 04.05.2011 11:41 #
+ 0 -
Может кому-нибудь окажется интересным - вариант с использованием PHP для управления Arduino под Ubuntu

Смотреть видео онлайн

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн