elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Informática
| |-+  Electrónica
| | |-+  Arduino, C++ , Puerto Serial o USB y Linux
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Arduino, C++ , Puerto Serial o USB y Linux  (Leído 6,307 veces)
aecp95

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Arduino, C++ , Puerto Serial o USB y Linux
« en: 15 Agosto 2017, 02:22 am »

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!


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Arduino, C++ , Puerto Serial o USB y Linux
« Respuesta #1 en: 15 Agosto 2017, 02:39 am »

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


En línea

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

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Arduino, C++ , Puerto Serial o USB y Linux
« Respuesta #2 en: 15 Agosto 2017, 02:43 am »

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
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Arduino, C++ , Puerto Serial o USB y Linux
« Respuesta #3 en: 15 Agosto 2017, 03:06 am »

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

Código
  1. #include <errno.h>
  2. #include <fcntl.h>
  3. #include <string.h>
  4. #include <termios.h>
  5. #include <unistd.h>
  6.  
  7. int
  8. set_interface_attribs (int fd, int speed, int parity)
  9. {
  10.        struct termios tty;
  11.        memset (&tty, 0, sizeof tty);
  12.        if (tcgetattr (fd, &tty) != 0)
  13.        {
  14.                error_message ("error %d from tcgetattr", errno);
  15.                return -1;
  16.        }
  17.  
  18.        cfsetospeed (&tty, speed);
  19.        cfsetispeed (&tty, speed);
  20.  
  21.        tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8;     // 8-bit chars
  22.        // disable IGNBRK for mismatched speed tests; otherwise receive break
  23.        // as \000 chars
  24.        tty.c_iflag &= ~IGNBRK;         // disable break processing
  25.        tty.c_lflag = 0;                // no signaling chars, no echo,
  26.                                        // no canonical processing
  27.        tty.c_oflag = 0;                // no remapping, no delays
  28.        tty.c_cc[VMIN]  = 0;            // read doesn't block
  29.        tty.c_cc[VTIME] = 5;            // 0.5 seconds read timeout
  30.  
  31.        tty.c_iflag &= ~(IXON | IXOFF | IXANY); // shut off xon/xoff ctrl
  32.  
  33.        tty.c_cflag |= (CLOCAL | CREAD);// ignore modem controls,
  34.                                        // enable reading
  35.        tty.c_cflag &= ~(PARENB | PARODD);      // shut off parity
  36.        tty.c_cflag |= parity;
  37.        tty.c_cflag &= ~CSTOPB;
  38.        tty.c_cflag &= ~CRTSCTS;
  39.  
  40.        if (tcsetattr (fd, TCSANOW, &tty) != 0)
  41.        {
  42.                error_message ("error %d from tcsetattr", errno);
  43.                return -1;
  44.        }
  45.        return 0;
  46. }
  47.  
  48. void
  49. set_blocking (int fd, int should_block)
  50. {
  51.        struct termios tty;
  52.        memset (&tty, 0, sizeof tty);
  53.        if (tcgetattr (fd, &tty) != 0)
  54.        {
  55.                error_message ("error %d from tggetattr", errno);
  56.                return;
  57.        }
  58.  
  59.        tty.c_cc[VMIN]  = should_block ? 1 : 0;
  60.        tty.c_cc[VTIME] = 5;            // 0.5 seconds read timeout
  61.  
  62.        if (tcsetattr (fd, TCSANOW, &tty) != 0)
  63.                error_message ("error %d setting term attributes", errno);
  64. }

y para usarlo
Código
  1. char *portname = "/dev/ttyUSB1";
  2. int fd = open (portname, O_RDWR | O_NOCTTY | O_SYNC);
  3. if (fd < 0)
  4. {
  5.        error_message ("error %d opening %s: %s", errno, portname, strerror (errno));
  6.        return;
  7. }
  8.  
  9. set_interface_attribs (fd, B115200, 0);  // set speed to 115,200 bps, 8n1 (no parity)
  10. set_blocking (fd, 0);                // set no blocking
  11.  
  12. write (fd, "hello!\n", 7);           // send 7 character greeting
  13.  
  14. usleep ((7 + 25) * 100);             // sleep enough to transmit the 7 plus
  15.                                     // receive 25:  approx 100 uS per char transmit
  16. char buf [100];
  17. 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)


« Última modificación: 15 Agosto 2017, 03:12 am por engel lex » En línea

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


Desconectado Desconectado

Mensajes: 948



Ver Perfil
Re: Arduino, C++ , Puerto Serial o USB y Linux
« Respuesta #4 en: 15 Agosto 2017, 03:07 am »

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


En línea

"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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines