FTDI к основному программированию на C

В настоящее время я программирую 8-канальное USB-реле на Ubuntu 12.04, используя C.
Я уже создал простую программу, которая будет писать в порт, но реле не отвечает.
Это программа, которую я использовал для отправки команды на реле.

#include <stdio.h>
#include <stdlib.h>

#include <errno.h>
#include <termios.h>

//serial
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
    int con;
    char *portname = "/dev/ttyUSB0";

    con = open(portname, O_RDWR | O_NOCTTY | O_SYNC);
    if(con < 0) {
            printf("[ERROR] %d opening %s: %s", errno, portname, strerror (errno));
            return -1;
    }

    int speed;
    int baudrate = 9600;
    int parity   = 0;

    switch(baudrate)
    {
    case 0:
    case 9600:
        speed = B9600;
        break;
    case 1:
    case 19200:
        speed = B19200;
        break;
    case 2:
    case 38400:
        speed = B38400;
        break;
    case 3:
    case 57600:
        speed = B57600;
        break;
    case 4:
    case 115200:
        speed = B115200;
        break;
    default:
        printf("Baud rate out of range");
        return -1;
    }

    struct termios tty;
    memset (&tty, 0, sizeof tty);
    if (tcgetattr (con, &tty) != 0)
    {
            return -1;
    }

    cfsetospeed (&tty, speed);
    cfsetispeed (&tty, speed);

    tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8;     // 8-bit chars
    // disable IGNBRK for mismatched speed tests; otherwise receive break
    // as \000 chars

    tty.c_iflag &= ~IGNBRK;         // disable break processing
    tty.c_lflag = 0;                // no signaling chars, no echo,
                                    // no canonical processing
    tty.c_oflag = 0;                // no remapping, no delays

    tty.c_cc[VMIN]  = 100;                  // read doesn't block
    tty.c_cc[VTIME] = 5;                 // 0.5 seconds read timeout

    tty.c_iflag &= ~(IXON | IXOFF | IXANY); // shut off xon/xoff ctrl

    tty.c_cflag |= (CLOCAL | CREAD);        // ignore modem controls,
                                            // enable reading
    tty.c_cflag &= ~(PARENB | PARODD);      // shut off parity
    tty.c_cflag |= parity;
    tty.c_cflag &= ~CSTOPB;
    tty.c_cflag &= ~CRTSCTS;

    if (tcsetattr (con, TCSANOW, &tty) != 0)
    {
            printf("error %d from tcsetattr", errno);
            return -1;
    }

    unsigned char wbuf[1] = {0x01};

    int w = write(con, wbuf, 1);
    if(w < 0) {
        printf("error %d: %s", errno, strerror (errno));
        return -1;
    } else {
        printf("%d\n", w);
    }

    close(con);
    return 0;
}

Команда, которую я использовал в write() это открыть первое реле света. Код возврата write() равно 1, но реле не имеет ответа в коде, что означает, что свет не включился.
У меня вопрос, возможно ли взаимодействовать с реле без использования библиотек ftdi?

0 ответов

Другие вопросы по тегам