¿Cómo enviar un byte o cadena de bytes en hexadecimal?

Hola de nuevo:

En C# puedo enviar un mensaje así:

byte[] mBuffer = Encoding.ASCII.GetBytes("Hola mundo.");

En Arduino basta así:

Serial.write("Hola mundo.");

En C# puedo enviar directamente un byte en hexadecimal así:

byte[] mBuffer = new byte[1];     
mBuffer[0] = 0x74; //ASCII letra "t".     
serialPort1.Write(mBuffer, 0, mBuffer.Length);

Si quiero enviar una cadena de bytes en hexadecimal en C# lo hago así:

byte[] mBuffer = new byte[5];     
mBuffer[0] = 0x74;     
mBuffer[1] = 0x75;     
mBuffer[2] = 0x89;     
mBuffer[3] = 0x20;     
mBuffer[4] = 0x6C;     
serialPort1.Write(mBuffer, 0, mBuffer.Length);

¿Cómo envío una cadena de byte en hexadecimal para el puerto serie en ARduino IDE 1.0.5?

Ver tabla ASCII aquí.

Saludo.

Hola.
Por ejemplo con un bucle que recorra el array e imprima cada byte con
Serial.print(byte,HEX)

Hola:

Lo hice así y me funciona de maravilla.

int E0 = 8; // interruptor conectado al pin 0


void setup()
{
   pinMode(E0, INPUT); // pin 0 como ENTRADA
   Serial.begin(9600);    // inicia el puerto serie a 600bps
}

void loop()
{
   if(digitalRead(E0) == HIGH) //si el interruptor esta en ON
   {
     byte arrayBytes [] = {0x41, 0x64, 0x69, 0xA2, 0x73, 0x20};
     Serial.write(arrayBytes, 6);    // envía 1 a Processing
   } 
   else 
   {
     Serial.print("ADIOS ");    // en caso contrario envía 0 a Processing
   }
   delay(100);     // espera 100ms
}

Si lo hago como dices así:

   byte arrayBytes2 [] = {"Hola "};
   Serial.print(arrayBytes2, HEX);

Sale este rror:

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.5 (Windows 7), Board: "Arduino Uno"
sketch_feb14a.ino: In function 'void loop()':
sketch_feb14a:19: error: call of overloaded 'print(byte [6], int)' is ambiguous
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:59: note: candidates are: size_t Print::print(unsigned char, int)
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:60: note: size_t Print::print(int, int)
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:61: note: size_t Print::print(unsigned int, int)
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:62: note: size_t Print::print(long int, int)
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:63: note: size_t Print::print(long unsigned int, int)

Saludo.

Perdón por ser tan escueto (estaba desde el teléfono móvil), pero no has puesto el for.
Lo que te proponía era:

   byte arrayBytes2 [] = {"Hola "};
   for (int a=0; a<sizeof(arrayBytes2); a++)
      Serial.print(arrayBytes2[a], HEX);

¿Con tu código te envía hexadecimal o caracteres ascii?

De todas formas, creo que no era eso lo que buscabas, sino sencillamente enviar unos bytes. Lo de hexadecimal me despistó, ya que un byte es un byte, y hexadecimal o decimal, binario o ascii son formas de representarlo (bueno, en la máquina están en binario :)).

Hola:

Quiern enviar hexadecimal para poder hacer cosas como.

Si envío ADIÓS con una tilde en la Ó, en le HyperTerminal de Windows salen caracteres raros. Las palabras enviándola normal si funconan.

También quiero enviar retorno de carro 0x13 y salto de linea 0x10 para que lo hagan el el HyperTermianl de Windows, Terra term Pro o otro similar.

Lo envío con Serial.write.

Lo he intentado con Serial.println ya que te viene lo digo pero no hace caso ni a la de trés.

Quiero enviar esta cadena de bytes por tramas, lo digo pro tramas porque s eenvía mejor, ya que en el futuro quiero comunicar como entrada y salida (Rx/Tx) para controlar el Arduino desde el PC y desde el PC Arduino. Por eso es importante envíar los bytes que salgan como quieres, no con carácteres raros que ni se entiende. Y eso que está configurado tal como es, incluido los 9600 baudios tanto en el terminal como en Arduino.

En este código me sale bien en aparaciencia, solo en aparaciencia de lo que quiero. Ya que no hay manera de soltar los un 0x13 ni 0x10. Retorno de carro y salto de línea.

int E0 = 8; // interruptor conectado al pin 0


void setup()
{
   pinMode(E0, INPUT); // pin 0 como ENTRADA
   Serial.begin(9600);    // inicia el puerto serie a 600bps
}

void loop()
{
   if(digitalRead(E0) == HIGH) //si el interruptor esta en ON
   {
     byte arrayBytes [] = {0x41, 0x64, 0x69, 0xA2, 0x73, 0x20};
     Serial.write(arrayBytes, 6);    // envía 1 a Processing
   } 
   else 
   {
     byte array_Dibujo [] = {0x13, 0x10, 0xC9, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 
   0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 
 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 
 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD,
 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 
 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xBB,
 0x13, 0x10};
     Serial.write(array_Dibujo, 82);

     byte array_Dibujo2 [] = {0x13, 0x10, 0xBA};
     Serial.write(array_Dibujo2, 3);
     
     Serial.write("                                  MEN");
     byte array_Dibujo3 [] = {0xE9};
     Serial.write(array_Dibujo3,1);
     Serial.write(" PRINCIPAL                              ");
     byte array_Dibujo4 [] = {0xBA};
     Serial.write(array_Dibujo4, 1);
     byte array_5 [] = {0xCC, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 
   0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 
 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 
 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 
 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 
 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD};
     Serial.write(array_5, 79);
     byte array_6 [] = {0xB9};
     Serial.write(array_6, 1);
     Serial.flush();
   }
   delay(100000);     // espera 100ms

Por aquí ver algo de experiemtneo que estoy haciendo, jejej.

Ver foto.

Saludo.
Un saludo.

Pues estoy casi seguro de que la parte de Arduino envía correctamente los códigos que le indicas. El problema va a estar en la interpretación que haga el terminal de ellos.

Hola:

Probadno otro código con el sensor ultrasonido HC-SR04 con HyperTerminal funciona bien.

/*
 Ejemplo de como funciona el sensor de distancia por ultrasonido
 Por la consola muestra la distancia y cuando esta llega a un 
 punto determinado se enciende un led.

 HC-SR04 conexiones:
  VCC al arduino 5v 
  GND al arduino GND
  Echo al Arduino pin 7 
  Trig al Arduino pin 6
 */

#define echoPin 7
#define trigPin 6
#define LEDPin 13
long duration, cm;

void setup(){
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(LEDPin, OUTPUT);
}

void loop(){
 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2); 
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(5); 
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);

 cm = microsecondsToCentimeters(duration);

 Serial.print ("Milisegundos: ");
 Serial.print(duration);
 Serial.print("  Distancia estimada: ");
 Serial.print(cm);
 Serial.println(" cm");

 delay(1000);
}

long microsecondsToCentimeters(long microseconds){
  // La velocidad del sonido a 20º de temperatura es 340 m/s o
  // 29 microsegundos por centrimetro.
  // La señal tiene que ir y volver por lo que la distancia a 
  // la que se encuentra el objeto es la mitad de la recorrida.
  return microseconds / 29 /2 ;
}

Una cosa que no tentiendo mucho lo que hace Arduino.

A veces funciona en el Terminal de ARduino IDE 1.0.5, luego al puerto serie físico. Ahora mismo acabo de comprobar que al mismo tiempo lelgan señales tanto del puerto serie físico que por USB.

¿Esto es normal?

Hablo del ejemplo de arriba. Si es normal, ahora me entero. Mejor, así hay posibilidad de usar DB9 o USB.

Saludo.