Estimados, necesito enviar a un dispositivo por el puerto ttyS0 (com1) una secuencia de caracteres determinada, sin ningún carácter de control creo que es raw, en la notebook con windows XP el dispositivo responde sin ningún problema, cuando lo quiero hacer bajo ubuntu, ejecutando un bash el dispositivo ni se entera. El seteo del puerto serie es: 9600, sin paridad, 8 bits de dato y uno de stop.
Este es el bash:
#!/bin/bash -x
data="153 245 000 000 000 000 000 151 072 079 076 065 229 241"
sudo chmod 777 /dev/ttyS0
sudo stty 9600 cs8 -parenb -crtscts -echo -F /dev/ttyS0
echo $data > /dev/ttyS0
Eso es todo. pero que esta mal ? Alguin me podra dar una mano, gracias !!!
PD: como verán no soy muy entendido en ubuntu ... pero le estoy tomando el gustito !!!

Mi sugerencia ...
... instala cutecom
Su man page informa
Saludos.
Equipo de Ubuntu-es
logre la conexion ...
Gracias Gabriel_M, logre conectarme con el dispositivo, siguiendo la sugerencia, solo que no se por que si mando el 153 en lugar de recibir 153, recibo 049 053 051, debe ser algo que me falta configurar del comando echo, que puede ser ?
Gracias por responder !!
Mira aqui:
http://ascii.cl/es/conversion.htm
Puede que sea lo que necesitas.
Saludos.
Equipo de Ubuntu-es
si pero no es eso
Gracias nuevamente, si conozco la tabla ascii, el tema es que le con el comando echo envío un 153 y recibo en el dispositivo 049 053 051 y no el 153, que es lo que necesito recibir en el dispositivo, no se que como enviar con el comando echo o mejor dicho, por que me cambia lo que envío.
Problemas con puerto ttyS0
/**
* Ante todo, no se si esto te valdra.
* Quizas podrias probar esto:
* Guarda este comentario completo como un archivo de código c, por ejemplo raw.c
* compilalo con gcc -o raw raw.c
* A continuación ejecuta lo siguiente:
* raw 153 245 000 000 000 000 000 151 072 079 076 065 229 241 > archivo
* El contenido del archivo sera aproximadamente
* @Yu@@@@@WHOLAeq
* Si esto es lo que quieres mandar a ttyS0 cambia > archivo por > /dev/ttyS0
*/
#include
#include
main(int argc, char *argv[])
{
int i;
if(argc==1){
return 1;
}
i=0;
while(argv[i]!=NULL){
if(atoi(argv[i])>=0){
/* manda el código como un carácter */
printf("%c", atoi(argv[i]));
}
i++;
}
Problemas con puerto ttyS0
/**
* En el anterior comentario no se incluia un return 0; al final del archivo,
* este si esta correcto.
*
* Ante todo, no se si esto te valdra.
* Quizas podrias probar esto:
* Guarda este comentario completo como un archivo de código c, por ejemplo raw.c
* compilalo con gcc -o raw raw.c
* A continuación ejecuta lo siguiente:
* raw 153 245 000 000 000 000 000 151 072 079 076 065 229 241 > archivo
* El contenido del archivo sera aproximadamente
* @Yu@@@@@WHOLAeq
* Si esto es lo que quieres mandar a ttyS0 cambia > archivo por > /dev/ttyS0
*/
#include
#include
main(int argc, char *argv[])
{
int i;
if(argc==1){
return 1;
}
i=0;
while(argv[i]!=NULL){
if(atoi(argv[i])>=0){
/* manda el código como un carácter */
printf("%c", atoi(argv[i]));
}
i++;
}
return 0;
}
error al compilar
Estimado Javier cuando compilo me tira estos error, y el c no es mi fuerte, podras sugerirme que hacer, gracias
raw.c:12:9: error: #include espera "NOMBRE_ARCHIVO" ó
raw.c:13:9: error: #include espera "NOMBRE_ARCHIVO" ó
raw.c: En la función ‘main’:
raw.c:25:16: error: ‘NULL’ no se declaró aquí (primer uso en esta función)
raw.c:25:16: nota: cada identificador sin declarar se reporta sólo una vez para cada función en el que aparece
raw.c:28:1: aviso: declaración implícita incompatible de la función interna ‘printf’ [activado por defecto]
raw.c:31:1: error: expected declaration or statement at end of input
Imagen de xunet +1 0 -1 error al compilar
El error es por mi culpa, en los los include son como sigue, los signos menor que y mayor que no los puse en el comentario porque use copiar y pegar y habia que formatearlos:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Los distintos errores eran por:
Faltaban los signos menor que y mayor que
------------------------------------
raw.c:12:9: error: #include espera "NOMBRE_ARCHIVO" ó
raw.c:13:9: error: #include espera "NOMBRE_ARCHIVO" ó
Al no haber podido incluir el archivo de cabecera se producen estos:
---------------------------------------------------------
raw.c: En la función ‘main’:
raw.c:25:16: error: ‘NULL’ no se declaró aquí (primer uso en esta función)
raw.c:25:16: nota: cada identificador sin declarar se reporta sólo una vez para cada función en el que aparece
raw.c:28:1: aviso: declaración implícita incompatible de la función interna ‘printf’ [activado por defecto]
Este se produce por la falta del return final y el parentesis, ahora voy a mandar el código corrrecto en otro comentario
raw.c:31:1: error: expected declaration or statement at end of input
Imagen de xunet +1 0 -1 error al compilar
/**
* Aqui he colocado los signos mayor que y menor que que en el comentario que mande no
* estaban
*
* En el anterior comentario no se incluia un return 0; al final del archivo,
* este si esta correcto.
*
* Ante todo, no se si esto te valdra.
* Quizas podrias probar esto:
* Guarda este comentario completo como un archivo de código c, por ejemplo raw.c
* compilalo con gcc -o raw raw.c
* A continuación ejecuta lo siguiente:
* raw 153 245 000 000 000 000 000 151 072 079 076 065 229 241 > archivo
* El contenido del archivo sera aproximadamente
* @Yu@@@@@WHOLAeq
* Si esto es lo que quieres mandar a ttyS0 cambia > archivo por > /dev/ttyS0
*/
#include <stdio.h>
#include <string.h>
#include <stdlig.h>
main(int argc, char *argv[])
{
int i;
if(argc==1){
return 1;
}
i=0;
while(argv[i]!=NULL){
if(atoi(argv[i])>=0){
/* manda el código como un carácter */
printf("%c", atoi(argv[i]));
}
i++;
}
return 0;
}
Problemas con puerto ttyS0
Otra opción para mandar códigos de carácteres a /dev/ttyS0 puede ser
la de utilizar un editor llamado joe, este editor permite entrar códigos
directamente en el archivo que se esta editángo pulsando la tecla
alt izquierda a la vez que el signo ?, en la parte inferior del
terminal aparece los siguiente:
Ctrl- (or 0-9 for dec. ascii, x for hex, or o for octal)
Pulsando lo adecuado se pueden entrar números decimales, hexadecimales u
octales y el resultado es de un carácter cada vez, por ejemplo si se pulsa
0, aparece la siguiente entrada igualmente en la parte inferior, el usuario
entra por ejemplo 27 (Código del carácter escape) y el carácter se inserta
en el editor
ASCII 0--
Si se quisiera entrar el código 233, en vez de pulsar 0 habria que pulsar el
2 y lo que apareceria seria lo siguiente, permitiendo entrar el 33
ASCII 2--
Una vez guardados los códigos en un archivo se puede utilizar cat para mandar
el archivo a /dev/ttyS0
Para instalar joe utilizar
sudo apt-get install joe
Problemas con puerto ttyS0
Ulilizando joe en el terminal el archiv guardado tendria para los códigos siguientes:
153 245 000 000 000 000 000 151 072 079 076 065 229 241
El siguiente contenido
<99>õ@@@@@<97>HOLAåñ
#include %lt;stdlib.h%gt;
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
/**
* Compilar con : gcc -o raw raw.c
* Crear un archivo con números de códigos, ej.
* 33
* 0
* 4
* 120
* La salida seria: !@Dx
* cat archivo | raw > /dev/ttyS0
*/
int main ()
{
FILE *Entrada;
char Cadena[8];
Entrada = stdin;
while(!feof(Entrada)){
fgets(Cadena, 10, Entrada);
if(!feof(Entrada)){
printf("%c", atoi(Cadena));
}
}
return 0;
}
En el comantario anterior los
En el comantario anterior los include están incorrectos por mi culpa, en vez de formatear el texto con < lo he hecho con %lt;, substituir lo erróneo por los signos menor que y mayor que. El programa funciona mejor que lo que mande antes.
Resuelto !
Gracias Javier con todo lo que me escribiste pude, creo que en forma limitada reemplazar, el comando echo con este prog en c. Gracias nuevamente !!
#include <stdlib.h> #include <string.h> #include <stdio.h> main(int argc, char *argv[]) { int i; if(argc==1){ return 1; } i=1; while(argv[i]!=NULL){ if(atoi(argv[i])>=0){ /* manda el código como un carácter */ printf("%c", atoi(argv[i])); } i++; } return 0; }