Go Down

Topic: (SOLUCIONADO)Enviar dato hexadecimal por el puerto serie (Read 4271 times) previous topic - next topic

tablet

Jun 04, 2012, 02:49 pm Last Edit: Aug 21, 2012, 10:17 pm by tablet Reason: 1
Hola quiero enviar #define ID 0x00A1 por el puerto serie pero no soy capaz de que me pinte eso, lo que consigo pintar es A1 mediante Serial.print(ID,HEX), los ceros no aparecen, ¿como puedo hacer que pinte 00A1? Gracias

jorgepl

Necesitas convertirlo primero en cadena de texto:

Code: [Select]

#include <stdio.h>

#define ID 0x00A1

void setup()
{
  int variable = ID;
  char texto[16];

  Serial.begin(9600);
 
  sprintf(texto, "%04X", variable);
  Serial.println(texto);
}

void loop()
{
}

tablet

Muchas gracias me fue de lujo. Saludos.

jorgepl

De nada,
Jorge

PD: Modifica el título a (SOLUCIONADO)

nekonos

Hola compañeros.

Acabo de registrarme hace unos dias que intento ir aprendiendo programacion y electronica en arduino  XD

El caso es que tengo un problema parecido. La solucion que has jorgepl no entiendo ni papa jeje.

Bien el caso es que quiero controlar un equipo por entrada rs232. Tengo un conversor ttl a rs232 con el max232 sus condensadores y demás.

Estos son los comandos basicos que quiero mandar.
                        ascci                      hex
Power On        ~ P N CR                7Eh 50h 4Eh 0Dh
Power Off       ~ P F CR                 7Eh 50h 46h 0Dh

Este es el codigo que he intentado hacer manda comando power on espera 1 min y apaga luego vuelve a esperar 3 min para encender.

Si conecto el usb con el pc con el serial monitor todo bien aparece ~PN cambio de linea ~PN

En cambio el dispositivo no responde

Code: [Select]
int led = 13;

void setup()
{
pinMode(led, OUTPUT);     
Serial.begin(9600);    // configura el puerto serie a 9600bps
}
void loop()
{
Serial.println("~PN");
digitalWrite(led, HIGH);   
delay(1000);
Serial.println("~PN"); //power on

digitalWrite(led, LOW);
delay(1000);
digitalWrite(led, HIGH);   
delay(60000); //espera 1 min
digitalWrite(led, LOW);
Serial.println("~PF"); //Power off
delay(180000); //espera 3 min para volver a encender.
}


Si podeis aclararme si hay algun fallo de programa o me pongo a mirar hard  en principio pin rx y tx estan bien conectados .
El pinaje del dispositivo no esta claro si pin2-pin3 es rx o tx he probado intercambiandolos.

Gracias por vuestro tiempo

Saludos

jorgepl


El caso es que tengo un problema parecido.


La verdad es que yo no le veo mucho parecido  :)

En cuanto al código, no hace exactamente lo que dices, de hecho, manda 2 veces el comando "Power on" con 1 segundo de tiempo entre ambos comandos. Por lo demás, debe funcionar según tus especificaciones

Como no dices que es lo que intentas controlar por puerto serie, no podemos saber si has conectado bien o no, ni por qué no te funciona.

nekonos

Hola jorge
Gracias por tu rapida respuesta.
Mira si soy novato que pense que tenia relacion.

Efectivamente manda 2 veces power on, me exprese mal.

Estoy haciendo pruebas con un proyector usa pin 2 rx 3 tx y 5 gnd.  aqui el protocolo no es el mismo modelo pero los comandos son iguales.

El conversor que tengo es como este la version 5v

Conecto pin 0 rx a rx0
           pin 1 tx a tx0

alientacion +vcc a 5v ( da suficiente amperaje)
               gnd con gnd


Salidas conectadas al rs2320 ahi tengo una duda porque hay un +vcc que no conecto no se si hace falta.

En principio en serial monitor funciona ok ¿puede ser algun tema del comando que se mande en ascci o hex?

Por cierto uso placa arduino uno.

Saludos

jorgepl


En principio en serial monitor funciona ok ¿puede ser algun tema del comando que se mande en ascci o hex?


ASCII es la representación en forma de carácter del valor hexadecimal que estás mandando, es decir, que cuando mandas 'P', lo que realmente estás mandando es 0x50.

Supongo que antes de ponerte con el arduino, has probado la conexión por hyperterminal que ponen en el documento del protocolo para verificar que funciona desde el PC, ¿verdad? Así te aseguras que la conexión por RS232 del proyector funciona y además verás como son los comandos que hay que enviar y la respuesta que da el proyector por puerto serie.

¿Cómo conectas el driver 232 al proyector? ¿Has cruzado Rx y Tx? También estaría bien que comprobases que el driver funciona correctamente: puenteando Rx y Tx en el conector RS232-0 y mediante otro programa en arduino (utilizando softserial.h) en el que envías datos y compruebas que recibes lo mismo que envías (has puenteado Rx y Tx).

Cheyenne

#8
Jun 21, 2012, 06:03 pm Last Edit: Jun 21, 2012, 06:08 pm by Cheyenne Reason: 1
En el código no estás enviando el caracter CR. En el monitor cambia de línea porque la propia consola le tienes dicho que ponga una nueva línea.
Edito: error mío, sí lo estás enviando puesto que usas la instrucción println()
http://cuadricopterodiyarduino.blogspot.com/

nekonos

Solucionado.

Error de pinaje y configuracion del proyector resulta que estaba configurado para recibir comandos por ethernet en vez de rs232.

A veces lo mas elemental no te das cuenta.

Gracias  :smiley-mr-green:

Go Up