Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
��� ������� �������� ��: English  Castellano  Deutsch  Francais  Nederlands  Portugues  Russian  Turkce  Arabic  

[Photo of the Authors]
����� Katja and Guido Socher

�� ������:

���� �������� �������� ���������� LinuxFocus. ��� ����� �����, ������ � ����������, � ����� ����. �� �������� �������� ����� ����� �����.

����� ��� ������ ����� ��������� Linux, ������� �������� ��� �� ��, ��� ������ �������� � ��������� ������. ��� ���� �� ������, �� ������� �� �������� ��� ������� ��������. ��� �������� �����: linuxfocus.org/~guido.


����������:

 

������ Linux-������

[Illustration]

������:

� ���� ������ �� ������ ���������� ����������� �������� ������, ������� ����� ��������� ����� ������������ ���� � Linux PC.
������, �������� ������� (����� ������������ ����) ����� ��������� � ������� ������������.



 

��������

������ ������ ����������� ���, ��� ��� �� ������������, ����� ����� ����� c ��������������� ��� ������ ���������� ����������������� ������ �� ����� �������. ������� � �����-�� ������� ��������� �����, ��� ��� �� �� ����� ������, �� �����, ������ ��� � ��� ����� ���������� �������, ��� ��� ����� ������������� ���������� ��������, ��� ��������� ���������. �� ����� �� ��������� �������, �� ��������, ��� ��-�� ������������ �������� ��������� � ������������ �������� �� �����-����� ��������. � �������, ����� ����� �������� �������� ����������� ������ �������, ��� ������������ ���������� ��� �� �������� ������, � ������� �� ������ ����� ���������.

 

�������

��� ����� �� ����� ������ � ����� ��������� ����, ��� � ��� ����� ����������� ����������� ���������, ������� � �������� �� � ��������. ������� �������� �������, ���������� "�������� ������" � ��������� �� ������ � ������, �� �������� ����������� ������� ������, ���������� ������������� �����. �� ����� ����������� �������������� ���� ��������� �� �������� ����������� � �������������, ��������� ��������� ��� "������������" ���������. ����� ��������� ��������������� (� ����� ������ ��� ����������� ������), ����� ������� �������� ��� �������������� �����. ��� ���������� ��������� �� 3-5% ����������� ����� ����� ����� �������� � ���������� �������� ������.


 

������ ������

��� ������ ������ �� ������������ ��������� ���������:



[pliers]
���.2: ���������
����������� ������� � ���������� �� ������ ������ � �������� ���� "��������-�����������", ��� ��������� �������� ��� ��������� ���������, ���������������� ����������� � �.�. ���� ��� �� ������� ������ �� � ����� ������, ���������� ����� � ��������� ����������, � ������� ���� ��������� �����������. ��������� �������� ������ ������ ������� ������ ����� � ������ ������, ������ ��������, ��� �� ������� ���������� �������, ��� ��������� ����� ����, ��� ����� ������ �������� ������.
������� ���������, ���������, ��� �� ������� ����������� �������, ����� �� �� ������� ������ ������ ����������� ���������.


[parts]
���.3: �������� ����� ������.

������ ��������

��� �������� ��� ������� ����������� ��� ��������� �����, ���� � ����������� 6�6 � ��� � ���������� 6�7, � ����� 4�� 2��-�� �������� ������ c 3.7�� ������.

[hinge]
���.4: "������" � ���� ������� �������

��������� �������� ������ �� 8��, 17.5��, � 8�� ����� ��� �������� �� ���.4. �� ������ ������� ���, ������� ������ ���� � ������ ������ �������� ����� � ����� ������ ��. ������ ��������� � ��� ������, ��� �� ������� �������� �����. �����, ����� ������ ���� ������� �������, ��� ����� � 6�6 �����������. �������� ����� 3.7�� ������. ����� � ���������� ������ ���� �������� �� 3�� ������, ��� ��� ����� ������, ��������� ������. ���������� ������ ������ ��� ��� ������.
������� ������ ������ �������� ���������, � �� ����� ��� ������e ����� �������� � ������.

[solder the 3 body parts]
���.5: ��������� ����� � "������"

����, ������� ������ �������� � ����� � 6�6 �����������. ���������, ��� ��� ����� ���������. ��� ������ ������ �������� � ��������� ���� ������.
������ �������� ��������� ��������� ����� � 2�7 �����������. �� ������� ��������� ����� �� �������� �������� ������. ���������� �������� �� ��������� ����� � ������� ������ ��� ����������. ��������� ��������� ��������� ����� � �������� �������� ������, ��� �������� �� �������:
[the flag]
���.6: ��������� ����� 2�7.

����������� ��������� ������� 1��-� �������� ������ � �������� �� ��� ��������� �������� ������ 4��. ������� ������ ������� ��������� ���� � ����� ������� ��. ��� ����������� 16 �������, ������ �������� ��������� ��������.
��������� �� ����� ����� ��������, ������ ��� ����� �������������������� � ��������� �������� ��������: ������� ����� ����������� ��������� � ����� � ������� ��� �����������. ��� ��������� ���������� �����. ������������ � ���, ����� ������ ������� ���������, ��� ��� ���������� ����� ������� ������ ��� ������ ������. �� ������ ����� ���������� ������� ����� ������ ��������� ������ ��� ������� �������������� ��������.

� ������ �� �������� ����������� ����������, ������� ���������� ��� ����������� ��� ����� � ����.

[the bridge]
���. 7: "����"

�������� ��������� ���, ��� ���� �� �� ������ ��������� ����. ������� � ����� �������, ��� ���������� ������� ������ ��������� ��������� ��������� c����. �������� ���� �� ��������� (��� �����������, ��� ���������� ��������) � �������� �� ��� ����� (�������������� ������� 4��-� ������� ������), ����� ���� �������� ���. ���������� ��������� ����� ������ ��������� ������ � ����� ����� ��������� ��������� ��������� �����. � ������ ������� �������� ���� � �������� ���. ����������� ��������� ������ ���� ��������, �� �� ������� ������. ���� �� ������ ��������� ��, ��� ������ ��������� �� 2-4��. ���� ��������� ������������ ��������, ��� �������� ������� ������, ����� �� ����� ��������� ��� ����. ��������� ������ � �����.
�������� �� �� ����� �� ������ �������
����� ���, ��� ����������, ���������, ��� ��� ��� ��������. �������� ����������� ��������� �� 1.5� � ������������ �� � ����������� ���������. ����� ��������� �����������, ������� ����� ���� ������ ������ ����������� �� 10-20 ��������. ������ ���������, �� ������� ��������� �������������� ������ 1 �������. �� ��������� ���������, ���� ���������� ��.

����


[music wire for legs]
���.8: ��� ������� ���������

�������� �� ������ ��� ������� ������ 10��, ��� ����� �������������� � �������� ���. ������� ������ �� ���������� 1.5�� �� ����� ������. ��������� ������ � ���� ������ ������. ��� ������ ���� ����������� ���� �����.

[legs top view]

[legs bottom viewl]
���. 9, 10: ��� �������� ���� �� ������

������ �� ������ ���������� ����������� ���������, �������� ���� �������, �� ���� ����� �����.

[leg and nitinol]
���. 11: ��������� ��������

���������� ����������� ��������� ������ ������ ����� � ������ ��������� �� ��������� �����. ���������� �� ������ - 3 ���������. �������� �� ��� ������� (��. ���. ����).
����� ������ ����� �� ������, ���� �� ���������� ��������� ������. �������� ������� � ����� � ������ �������� ���. ������ ����� �������. ��������� ������ � ������� ��������� ������, ��������� ��� ���� ������� ������ ��� �������������� ������ ��������. ����������� ������ ������� ��������������� ��������, ������� ������ �������� ��������� � ���. ������ ������� �������� ����� ��������� � 1-� ��������� ����� � ����������� ��������, ����� ���� ����� ������ ���� ������� � ����.
[nitinol must not be loose]
���. 12: ������� � ������ �� ����� ������


���������, ��� ������� � ������ ��������� �� ����� � ��� �� ������. ��� ���������� �������� ���� ������ ��������� �����, � �� ������������ ����� � ����.

�������� �� �� ����� � ���������� ����� ������.
���� � ������ � ��������� �������� ���������� ������ ��������� ������� ���� ������� �������, ������� ����� ���� ������ ���� ������������� �������. ������ ������� ����� �������� ������ ���������, ���������� ���� � ��� ����������� �������� ����������. �� �������� ���������, ���� 3�� 0.1��-�� ������� � ������� �������� � ������� ��� �� ���������������� �������� ������, ����� ���������� ��������� �������. ������ ������ � ��������� ������� � �������� ���������� ���� ��� � ������� ���� ���. ������ � ���� ������� ������ ������������ ������������ ��������.

����� ����� ����� �����, ��������� 0.5� (��� �������, ���� ������) ������� 0.1�� ������� � ������� �� ����� � ��������� ���� ������ � ��������� �����. ��� ����������� 9 ��������, 6 ��� ���, 2 ��� �������� ��� ��� ����� � ���� � 1 ��� ���� �������. �� ������ �������� ������ ����� �������� � ���������� ����������, ������� ����� �� ������ �������� � ��������������� ������ � ����� ����������.

 

� ������ ����� �� �������

���� ��������� ������� ��� ��������� ������. ��� ��������, ��� ���� ��� ���� (��� �� ����� � ���� �� ������ �������) ��������� �� �����, ������ ��� ����������. ����� ����� ����, ���� �� ����� ��������� � ����� �����������, � �� ����� ��� ����������� - � ��������.
[The gait]
���. 13: ������ ������



 

���������� ������� � ������� Linux ����������

 

����� ����� ����������

���� ���������� ��������� ������������ ��� PC ��� �������� ��� ��������� ������, ���������� �� � ������������ ����.
����� �� ������������� ���� ������������ ���������, �� ������ ����� ��������� �� �� ����������� � �������� ������� ���������� � ������ ���� ����� ����, ��� ���������� ���������� ���������� �������, ��� �������� � ���������� ������ ���������.
����� ������ ���������. ��� ����� ���������� ��� 200-250�� ����� ����������� "�����������", ����� ��������� �� �����������. ������������� 3�� ����������� ��������� �� ���� ����� 7 ��. ������ ���������� ��������� ����� ������� ������� �� ���� ����������, ������ ��� � ���� ������ �������� ������������ ������� �� ��������� ����� "����", ��� �������� �������� ����������� ��������. ��������� BIOS ���������� ������������� ��������� �������� �� ��������� ������������� �����, ��������� �� ��� ����� �������� ��������� "���", ���������� ���� ��� ����� ��������� ����� ��������� ������� ������ ����� ������� � �������� ��. ����� ���������� �������� ������ ��������� 1.5 ������� �������.

������������:
[circuit]
���. 14: ������������

��� �� ������ �� ����� ����, �� ���������� ����������������� ���� �������. ��� ����� ��� ����������� �������� ����������� ������� � ��� ������ ������������� �����. � �������� �������� ��������� �� ������ ������������ ����� ���� ������� � ���������� ����� � ����������� �� ������ 6� � 24�. ���������� 7805 �������� ����������� ����������� ����������. ������������ ����, �� ������� ��� ������� �������� ��������, ��� ������������ ���� ������������� (470��� � 0.1���). ���������� �� ��� ����� ����� � ���������� ���������� 7805, ������ ��� �� ����� ������ ������������� � ������ �� �����.

���������� ���������� ������ ���� ������� ������ ���. �� ���� ��� ������ ���� � ��� ���� ��� ����������� ��� ��� ����� � ����. �� ���������� ��������� n-p-n ����������-����������, ������ ��� ������ ������ ����� ������� ���. BC875 ��� BC618 ����� ������������� ����� 500��. �������� 47��� �� ����� ����� ��� ����������� ��������� "����" �������� ���� (��������, ����� ��������� �� ���������). ���������� �� ������������ ����� ����� 4� ��� ��������� "���" � ���� 1� ��� "����". ���������� �������� ������ ��� ����������. ��������� 15 �� ������������ ��� � �������� ���� ������ � ����������. ���������� ���������� ��������� ("���" ��� "����").

���� �� ������ ������ �������. ������� ���������� (���������� ����������� �������� ������) ������ ���������, ��������� �� ������������ ���������� ������� ����������. �� ������� ��������� �� 15 �� �� �������������� ���������, ������ � �������, �� ���� ������, ��� � ��� ���� �� �����. ������� ������ ��� ��������� ��������� 2��.


[the final drivercircuit1] [the final drivercircuit2]
���.15: ������



 

������������ ����

������������ ���� ��� ���������� � �������� ��������� ����� � ������������� ���������� �� �������. ��������� ������������ ����� ��������� ������ �� ���� � �����. ����� �� ���������� ���� ������ ��� �����. � ����� �� ��������� ������ �� ��������� � ������ ������� � ����� ������������ ������� �����. ���� ������������ ���� ����� 25 �����, �� ���������� ���� 9. ������ ����� ������������ ��� �������� ����� � ���� ��� ����������� ������������� �����.

��������� ������������� �����:

25-���������� D-SUB "����" ��� PC.

�������  �����������  �����������   ��������
 1       STROBE       [-->]      ����� (���������� ������)
 2       D0           [-->]      0 ��� ������
 3       D1           [-->]      1 ��� ������
 4       D2           [-->]      2 ��� ������
 5       D3           [-->]      3 ��� ������
 6       D4           [-->]      4 ��� ������
 7       D5           [-->]      5 ��� ������
 8       D6           [-->]      6 ��� ������
 9       D7           [-->]      7 ��� ������
 10      ACK          [<--]      �������� ������ ������
 11      BUSY         [<--]      ������� �� ����� � ������ (�����)
 12      PE           [<--]      ��������� ������
 13      SEL          [<--]      �������� ��������� ��������
 14      AUTOFD       [-->]      �������������� ������� ������ �����
                                    �������� �������
 15      ERROR        [<--]      ������
 16      INIT         [-->]      ������������� ��������
 17      SELIN        [-->]      ������� ����� ������
 18      GND          [---]         ������
 19      GND          [---]         ������
 20      GND          [---]         ������
 21      GND          [---]         ������
 22      GND          [---]         ������
 23      GND          [---]         ������
 24      GND          [---]         ������
 25      GND          [---]         ������
�� ������������ ���� ���������� � 18-�� �������� (������) � � ��������� ������ ������ 2-9

������ ������������ ���� �������� ��������� �������. ����� �� ����� ������ �������� �� ������ �����, ��������� ���������� ������ "1" �� ����� ���������� ������ (�����), ���������� ��������, ��� � ������ ������ ������� ����������. �� ���������� ����� ������ ��������, ������ ��� ��� �� ����� �������������� ���������� �������� � �������� ������.

 

����������� �����������

�� ������ ��������� ����������� ����������� ������.
���������� ��� �������� tar zxvf pprobi*.tar.gz. ���������� �� ��������� �����������.

��������� �������� �� C. � ������� ��������-������� �� ������ ��������� �������, ��������� ��� ������ ������, �������, ������ � �����. ����������� ������ ��� ��������� � q (��� x) ��� ������ �� ���������. ������ ������� �� ����� ������ ������������ ������� h,j,k,l (��������� ��� � vi), ���� ��� ��� ������ ��������. ����������, �������������� ��� ��������� �������� ������, �������������� ��� ����� ������. ������ ����� ������� ���������� �� �������, � �������� ������, ��� ������ �������� ����������� ��������� ����������� ��������. ��� ����� ����� �������� � ���������� ��� �������� � ��� ���������, ������ ��������, ��� �� ��� ���� ����� ��������� ���������, ��� ��� �� ������ ������ �������������������� ��� ���������� ��������� �������� ����������. ��� ����� ���� ������������ � ���, ����� ���� �� ������������� � ����� � ��� ���� ���������� ������� ��� ����������.

==== pprobi.c =====
/* vim: set sw=8 ts=8 si : */
/*
 * ��� ��������� �������� ��������� ����������� ������������.
 * �� ������ ��������������
 * ��� �������� �� � ������������ � ������������� ��������� GNU.
 * ����������� �� http://www.gnu.org/copyleft/.
 *
 * ������ Katja Socher <[email protected]>
 *      � Guido Socher <[email protected]>
 *
 */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <math.h>
#include <signal.h>

#include "robi.h"

/* ----------- */
static int opt_r=0;
static int fd=0;
/* ----------- */
/* ----------- */
void help()
{
    printf("pprobi -- control software for a walking robot\n\
USAGE: pprobi [-h] [parport-device]\n\
\n\
OPTIONS:\n\
         -h this help\n\
         -r reset the parallel port data pins (all zero) and exit\n\
     \n\
The default device is /dev/parport0 \n\
");
#ifdef VERINFO
    puts(VERINFO);
#endif
exit(0);
}
/* Signal handler: all off then exit */
void offandexit(int code)
{
    robi_setdata(fd,0);
    set_terminal(0);
    exit(0);
}

/* ----------- */
int main(int argc, char **argv)
{
    int state,bpat,alternate;
    char *dev;
    /* The following things are used for getopt: */
    int ch;
        extern char *optarg;
        extern int optind;
        extern int opterr;

    opterr = 0;
    while ((ch = (char)getopt(argc, argv, "hr")) != -1) {
        switch (ch) {
        case 'h':
            help(); /*no break, help does not return */
        case 'r':
            opt_r=1;
            break;
        case '?':
            fprintf(stderr, "serialtemp ERROR: No such option. -h for help.\n");
            exit(1);
        /*no default action for case */
        }
    }
    if (argc-optind < 1){
        /* less than one argument */
        dev="/dev/parport0";
    }else{
        /* the user has provided one argument */
        dev=argv[optind];
    }
    fd=robi_claim(dev); /* robi_claim has its own error checking */
    /* catch signals INT and TERM and switch off all data lines before
     * terminating */
    signal(SIGINT, offandexit);
    signal(SIGTERM, offandexit);

    /* initialize parpprt data lines to zero: */
    robi_setdata(fd,0);
    set_terminal(1); /* set_terminal has its own error handling */
    state=0;
    alternate=0;
    if (opt_r){
        offandexit(1);
    }
        while(1){
        ch=getchoice();
        if (ch!=0) state=ch;
        if (ch == ' '){
            printf("Stop\n");
            robi_setdata(fd,0);
            usleep(500*1000);
        }
        if (ch == 'q'|| ch == 'x'){
            printf("Quit\n");
            break;
        }

        if (state=='l'){
            /*right */
            printf("walking right\n");
            walkright(fd);
        }
        if (state=='h'){
            /*left */
            printf("walking left\n");
            walkleft(fd);
        }
        if (state=='j'){
            printf("walking back\n");
            walkback(fd);
        }
        if (state=='k'){
            if (alternate){
                printf("walking straight on a\n");
                walkstraight_a(fd);
            }else{
                printf("walking straight on b\n");
                walkstraight_b(fd);
            }
            alternate=(alternate +1) %2;
        }

    }
    /* we get here if q was typed */
    set_terminal(0);
    return (0);
}

==== robi.c  =====
/* vim: set sw=8 ts=8 si : */
/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License.
 * See http://www.gnu.org/copyleft/ for details.
 *
 * Written by Katja Socher <[email protected]>
 *        and Guido Socher <[email protected]>
 *
 */
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <sys/types.h>
#include <sys/time.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#include <linux/ppdev.h>
#include <sys/ioctl.h>
#include <termios.h>
#include "robi.h"


/* like printf but exit the program */
static int die(const char *fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    vprintf(fmt, ap);
    va_end(ap);
    exit(1);
}
/* get one character from stdin
 * Returns non zero if char was read otherwise zero
 * The arrow keys are mapped as follows:
 * <- = h
 * -> = l
 * v = j
 * ^ = k
 */
int getchoice()
{
    int c;
    char s[20];

    if (fgets(s,20,stdin)){
        c=s[0];
        switch (c){
            case 0x1b: /* ESC */
                if (s[1] == 0x5b){
                    /* arrow keys are pressed */
                    switch (s[2]){
                        case 0x41: /*up arrow*/
                            c='k';
                            break;
                        case 0x42: /*down arrow*/
                            c='j';
                            break;
                        case 0x44: /*l arrow*/
                            c='h';
                            break;
                        case 0x43: /*r arrow*/
                            c='l';
                            break;
                        default:
                            c=0;
                    }
                }else{
                    c=0;
                }
                break;
            case ' ':
            case 'h':
            case 'j':
            case 'k':
            case 'l':
            case 'q':
            case 'x':
                break;
            default:
                c=0;
        }
        return(c);
    }
    return(0);
}

/* Set the Terminal to Non Canonical mode with echo off
 * or reset the terminal.
 * USAGE: set_terminal(1) for canonical
 */
int set_terminal(int canonical)
{
    static struct termios originalsettings;
    struct termios newsettings;
    static int origok=0; /* set if originalsettings valid */
    if (canonical){
        /* save original settings and set canonical mode*/
        tcgetattr(fileno(stdin),&originalsettings);
        newsettings=originalsettings;
        newsettings.c_lflag &= ~ICANON;
        newsettings.c_lflag &= ~ECHO;
        newsettings.c_cc[VMIN]=0; /* do not block */
        newsettings.c_cc[VTIME]=1; /* 100 ms */
        if (tcsetattr(fileno(stdin),TCSANOW,&newsettings) !=0){
            die("ERROR: could not set terminal attributes on stdin\n");
        }
        origok=1;
    }else{
        if (origok){
            /* restore settings */
            tcsetattr(fileno(stdin),TCSANOW,&originalsettings);
        }
    }
    return(0);
}

/* open /dev/parportX device and claim it.
 * USAGE: fd=robi_claim("/dev/parport0");
 * The return value is a file descriptor used by other
 * functions such as robi_setdata */
int robi_claim(char *dev)
{
    int fd,i;

    fd = open(dev, O_RDWR );
        if (fd < 0) {
                die("ERROR: cannot open device %s\n",dev);
        }
    i=0;
    /* we need exclusive rights as we do not set the control lines*/
    /*ioctl(fd, PPEXCL, &i)&&
           die("ERROR: request for exclusive rights failed\n");*/
    ioctl(fd, PPCLAIM, &i)&&die("ERROR: could not claim parport\n");
    return(fd);

}
/* Walk left
 */
int walkleft(int fd)
{
    /* first B legs to ground */
    robi_setdata(fd,LEGBD);
    usleep(400 *1000);
    /* all A legs 1 step */
    robi_setdata(fd, LEGB1 | LEGB3 );
    usleep(1100 *1000);

    /* first A legs to ground, cool B*/
    robi_setdata(fd,LEGAD);
    usleep(400 *1000);
    robi_setdata(fd,0);
    usleep(1000 *1000);
    return(0);
}
/* Walk right
 */
int walkright(int fd)
{

    /* first A legs to ground */
    robi_setdata(fd,LEGAD);
    usleep(500 *1000);
    robi_setdata(fd,  LEGA3 | LEGAD);
    usleep(300 *1000);
    /* all A legs 1 step */
    robi_setdata(fd, LEGA1 | LEGA3 );
    usleep(1100 *1000);

    /* first B legs to ground, cool A*/
    robi_setdata(fd,LEGBD);
    usleep(400 *1000);
    robi_setdata(fd,0);
    usleep(1000 *1000);
    return(0);
}
/* Walk with all 3 legs 1 step forward
 */
int walkstraight_a(int fd)
{

    /* first A legs to ground */
    robi_setdata(fd,LEGAD);
    usleep(800 *1000);
    /* all A legs 1 step */
    robi_setdata(fd, LEGA1 | LEGA2 | LEGA3 );
    usleep(1000 *1000);

    /* first B legs to ground, cool A*/
    robi_setdata(fd,LEGBD);
    usleep(500 *1000);
    robi_setdata(fd,0);
    usleep(1200 *1000);
    return(0);
}
/* Walk with all 3 legs 1 step forward
 */
int walkstraight_b(int fd)
{
    /* first B legs to ground */
    robi_setdata(fd,LEGBD);
    usleep(400 *1000);
    /* all B legs 1 step */
    robi_setdata(fd,LEGB1 | LEGB2 | LEGB3);
    usleep(1000 *1000);
    /* A down and cool */
    robi_setdata(fd,LEGAD);
    usleep(800 *1000);
    robi_setdata(fd,0);
    usleep(1200 *1000);
    return(0);
}
/* Walk with all 6 legs 1 step back
 */
int walkback(int fd)
{

    /* first A legs to ground */
    robi_setdata(fd,LEGAD);
    usleep(800 *1000);
    /* all B legs 1 step in the air*/
    robi_setdata(fd, LEGB1 | LEGB2 | LEGB3 );
    usleep(500 *1000);

    /* first B legs to ground, cool A*/
    robi_setdata(fd,LEGBD);
    usleep(500 *1000);
    /* all A legs 1 step in the air*/
    robi_setdata(fd,LEGA1 | LEGA2 | LEGA3);
    usleep(500 *1000);
    /* A down and cool */
    robi_setdata(fd,LEGAD);
    usleep(800 *1000);
    robi_setdata(fd,0);
    usleep(1000 *1000);
    return(0);
}
/*---------*/
/* Write a bit pattern to the data lines
 * USAGE: rc=robi_setdata(fd,bitpat);
 * The return value is 0 on success.
 */
int robi_setdata(int fd,unsigned char bitpat)
{
    int rc;

    rc=ioctl(fd, PPWDATA, &bitpat);
    return(rc);
}

==== robi.h =====
/* vim: set sw=8 ts=8 si et: */
#ifndef H_ROBI
#define H_ROBI 1
#define VERINFO "version 0.2"


/* the first thing you need to do: */
extern int robi_claim(char *dev);

/* write a bit pattern to the data lines of the parallel port: */
extern int robi_setdata(int fd,unsigned char bitpat);

/* input and terminal functions */
extern int set_terminal(int canonical);
extern int getchoice();
extern int walkstraight_a(int fd);
extern int walkstraight_b(int fd);
extern int walkback(int fd);
extern int walkleft(int fd);
extern int walkright(int fd);

/* data pins to legs:
 * A1------=------B1
 *         =
 *         =
 * B2------=------A2
 *         =
 *         =
 * A3------=------B3
 *
 *
 * Pin to set A-legs to ground= AD
 * Pin to set B-legs to ground= BD
 *
 * parallel port    leg name
 * -------------------------
 * data 0           A1
 * data 1           A2
 * data 2           A3
 * data 3           AD
 * data 4           B1
 * data 5           B2
 * data 6           B3
 * data 7           BD
 */
#define LEGA1 1
#define LEGA2 2
#define LEGA3 4
#define LEGAD 8
#define LEGB1 16
#define LEGB2 32
#define LEGB3 64
#define LEGBD 128

#endif


��������� ���������� ��������� ppdev ���� ������ 2.4.� (��� ����� ���� ������ 2.3.� ��� 2.4.�, � ����� ������� ��� �� ����� ��������). ��� ������� � ������� ��������� ��� ��������� ���������������� ��������� ������������� �����. ��� ������������� ����� ������ ���� �� ���� �� ������ �������� ������ ���� ��� ������������ ������ �����, ������� �������� �� ���������� root ��� ������� ���������. ��������� ppdev ���������� ���� ���������� /dev/parport0 � ����� ��������� ��������� � ���� ������� �� ������ ��������������, ���� ��������� ������������ ���� ���������.

��� ���������� ppdev ��� ������ � ���� ��� ����� �������������� ������ PARPORT ������ � ����������� PPDEV. � ����� .config ��� ������ ��������� ��������� �������:

#
# Parallel port support
#
CONFIG_PARPORT=m
CONFIG_PARPORT_PC=m
CONFIG_PARPORT_PC_FIFO=y
# CONFIG_PARPORT_PC_SUPERIO is not set
# CONFIG_PARPORT_AMIGA is not set
# CONFIG_PARPORT_MFC3 is not set
# CONFIG_PARPORT_ATARI is not set
# CONFIG_PARPORT_SUNBPP is not set
CONFIG_PARPORT_OTHER=y
CONFIG_PARPORT_1284=y
#
# Character devices
#
CONFIG_PPDEV=m
#


� ������ ������� ��������� �������������� ������������ ���� �������� ioctl PPCLAIM. ����� ��� ������������� �������� � ����� non canonical. ��� ����� ��� ����, ����� �������� ���� �������� � ���������� ��� ������������� �������� Enter ����� ������� �����. ����� ��������� ������ � ����, ��� ������� ���������, �� ���� �� ����� ������ �������������, � ����� ��������� ������ ��������� � ������������ � ��������. ���� �� �� ����� ������, ��������� ������ ����� ���������� ��������� ��������� ��������� ������� (��������, ��������� �����).
������� ioctl(fd, PPWDATA, &bitpat); ������������ ��� ��������� �������� ����� �� ����� ������.

�������� ������ ������ ������ ���� ������������ � �������� ������ ����� ���������� ��������� �������:

����:
  A1------=------B1
          =
          =
  B2------=------A2
          =
          =
  A3------=------B3


  ������� ��� ����������� A-��� �� ������ = AD
  ������� ��� ����������� B-��� �� ������ = BD

������������ �������� ����� ����� ����������:
  data 0           A1
  data 1           A2
  data 2           A3
  data 3           AD
  data 4           B1
  data 5           B2
  data 6           B3
  data 7           BD

����� ������ "0" �������� ������� ����� ����������, ������� �������������� � ������������� ����� �� 2-� ������� (D0).

��� ��, ������ �����:
[yes, it walks]
�� ��������� ������� ������ �� ��������. �� ����� ���� ����� ������� ��������� ��-�� ������ ������� �� ����������, ������� ��������� ����������� ��������� ��� ����������� �� � �������������� �����.


�� ��������, ��� �� �������� ����� ������������, ������� ������. �������� ��� � ���, �������� ���� �� ����� ������ �����������!

 

������ ���������� � ������

 

�������� �������

� ������ ������� ���� �������� �������. �� ���� �������� �� ������ �������� ���� ����������� ��� ����������� ����������� ������ ���������.
 talkback page 

Webpages maintained by the LinuxFocus Editor team
© Katja and Guido Socher, FDL
LinuxFocus.org

Click here to report a fault or send a comment to LinuxFocus
Translation information:
en -> -- Katja and Guido Socher
en -> ru Ilya Palagin

2001-10-12, generated by lfparser version 2.17