Arduino, C++ , Puerto Serial o USB y Linux

Iniciado por aecp95, 15 Agosto 2017, 02:22 AM

0 Miembros y 1 Visitante están viendo este tema.

aecp95

Buenas noches, estoy trabajando en un trabajo final para el cole y estamos viendo c++ y linux y tengo que presentar algo para fin de año que se maneje por el serial, USB o Paralelo, queria saber como puedo hacer para controlar el arduino con alguno de esos puertos, quisiera leer una temperatura desde un lm35 y accionar un led dependiendo de la temperatura. Dispongo de una arduino 1, estuve buscando algo relacionado en la red pero no encuentro mucho. Muchas gracias y disculpen las molestias!

engel lex

si tienes un arduino uno, el ya tiene conexión usb, y por medio de el se comunica en protocolo serial... con buscar en google "ejemplos arduino serial" tienes bastante para probar...

sobre el led con el lm35, es simplemente un analogRead a tu respectivo puerto conectado y comparar con tu umbral, si es mayor cambias el puerto del led a encendido

lee el material sobre lo basico de arduino, esto que propones es literalmente explicación de entrada... y si te trancas en algo o tienes una duda puntual, hazla en este mismo tema
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

aecp95

pero el proyecto tiene que ser implementando c/c++, si entiendo lo de los umbrales, lo único que no entiendo es como enviar datos y recibir por c/c++ desde el puerto serial de linux.
Lo que me gustaría es que me facilitaran algún ejemplo o libreria para comenzar a trabajar desde linux.

P/D: No puedo utilizar el terminal de linux

engel lex

#3
ahh perfecto, eso está mas claro!


el leer serial te puede dar algunos dolores de cabeza al principio porque es una conexión en stream

fijate este tema... es en C

el auto usa esto

#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>

int
set_interface_attribs (int fd, int speed, int parity)
{
       struct termios tty;
       memset (&tty, 0, sizeof tty);
       if (tcgetattr (fd, &tty) != 0)
       {
               error_message ("error %d from tcgetattr", errno);
               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]  = 0;            // 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 (fd, TCSANOW, &tty) != 0)
       {
               error_message ("error %d from tcsetattr", errno);
               return -1;
       }
       return 0;
}

void
set_blocking (int fd, int should_block)
{
       struct termios tty;
       memset (&tty, 0, sizeof tty);
       if (tcgetattr (fd, &tty) != 0)
       {
               error_message ("error %d from tggetattr", errno);
               return;
       }

       tty.c_cc[VMIN]  = should_block ? 1 : 0;
       tty.c_cc[VTIME] = 5;            // 0.5 seconds read timeout

       if (tcsetattr (fd, TCSANOW, &tty) != 0)
               error_message ("error %d setting term attributes", errno);
}


y para usarlo char *portname = "/dev/ttyUSB1";
int fd = open (portname, O_RDWR | O_NOCTTY | O_SYNC);
if (fd < 0)
{
       error_message ("error %d opening %s: %s", errno, portname, strerror (errno));
       return;
}

set_interface_attribs (fd, B115200, 0);  // set speed to 115,200 bps, 8n1 (no parity)
set_blocking (fd, 0);                // set no blocking

write (fd, "hello!\n", 7);           // send 7 character greeting

usleep ((7 + 25) * 100);             // sleep enough to transmit the 7 plus
                                    // receive 25:  approx 100 uS per char transmit
char buf [100];
int n = read (fd, buf, sizeof buf);  // read up to 100 characters if ready to read






aquí hay otra solución... una librería en C++ para leer serial

http://libserial.sourceforge.net/


aquí un ejemplo de uso en
lectura
https://github.com/crayzeewulf/libserial/blob/master/examples/read_port.cpp
un ejemplo de uso de escritura
https://github.com/crayzeewulf/libserial/blob/master/examples/write_port.cpp













asegurate de tener permisos de lectura y escritura agregando tu usuario al respectivo grupo del puerto serial usb (usualmente dialout)


El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

PalitroqueZ

documentación y proyectos sobre arduino hay por cantidades industriales en la red.

te pongo algunos:

http://www.internetdelascosas.cl/2012/05/04/midiendo-temperatura-con-arduino-y-lm35/
http://www.enerzuul.es/?p=459
https://www.arduino.cc/en/Tutorial/TemperatureWebPanel
https://www.luisllamas.es/medir-temperatura-con-arduino-y-sensor-lm35/

el usb lo puedes manejar mediante un puerto serial virtual (clase CDC) que ya viene resuelto en el Arduino IDE


"La Economía planificada lleva de un modo gradual pero seguro a la economía dirigida, a la economía autoritaria y al totalitarismo" Ludwig Erhard