Autor
|
Tema: Arduino, C++ , Puerto Serial o USB y Linux (Leído 6,372 veces)
|
aecp95
Desconectado
Mensajes: 2
|
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
|
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
Mensajes: 2
|
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
|
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; 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; 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.cppun 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
Mensajes: 948
|
|
|
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
conectar impresora fiscal de puerto serial a placa sin puerto serial
Hardware
|
rub'n
|
3
|
5,560
|
30 Mayo 2013, 22:45 pm
por rub'n
|
|
|
Controlar Arduino con Lenguaje C (Puerto Serial)
Programación C/C++
|
krlosexe
|
1
|
6,672
|
27 Enero 2015, 04:15 am
por 43H4FH44H45H4CH49H56H45H
|
|
|
Arduino uno abir puerto serial con java o vb para botones games
Programación General
|
cael1011
|
3
|
2,759
|
29 Diciembre 2015, 13:03 pm
por Meta
|
|
|
Arduino + Comunicación serial + C#
Electrónica
|
Mr.Blue
|
3
|
9,803
|
5 Marzo 2016, 08:31 am
por Meta
|
|
|
Comunicación a Arduino mediante lenguaje en c (puerto Serial)
Programación C/C++
|
Emily
|
2
|
2,706
|
12 Junio 2017, 09:46 am
por Emily
|
|