1

I am trying use a HMI display. If I want to send a data, for example I want to write "TOPWAY" to 0x00000080 address it should like that:

 Serial.write(0xaa); // packet head
 Serial.write(0x42); // VP_N16 string write command
 Serial.write(0x00); // VP_N16 address
 Serial.write(0x00);
 Serial.write(0x00); 
 Serial.write(0x80); 
 Serial.write(0x54); //T
 Serial.write(0x4f); //O
 Serial.write(0x50); //P
 Serial.write(0x57); //W
 Serial.write(0x41); //A
 Serial.write(0x59); //Y
 Serial.write(0x00); //string end with "0円" 
 Serial.write(0xcc); // packet tail
 Serial.write(0x33); // packet tail
 Serial.write(0xc3); // packet tail
 Serial.write(0x3c); // packet tail

I want to make a method like SendString(String abc) to send that like above. I need convert string a hex array and call in Serial.write(array[i]). Can you hep me?

asked Jul 28, 2021 at 7:16
4
  • 2
    There is no such thing as a hex array. Everything is all just numbers. Even letters are numbers. Your string is already an array. Commented Jul 28, 2021 at 7:30
  • 2
    Serial.print("TOPWAY"); should do it Commented Jul 28, 2021 at 8:18
  • @Juraj you mean like that for total query like above: Serial.write(0xaa); Serial.write(0x42); Serial.write(0x00); Serial.write(0x00); Serial.write(0x00); Serial.write(0x80); Serial.print("TOPWAY"); Serial.write(0x00); //string end with "0円" Serial.write(0xcc); Serial.write(0x33); Serial.write(0xc3); Serial.write(0x3c); . if Not? please show me as answer not in comment. Commented Jul 28, 2021 at 14:37
  • the answer is below Commented Jul 28, 2021 at 14:44

1 Answer 1

5

I don't know anything about the particular display, but based on the information provided I hope this is at least shows the foundation of one way you could approach a final solution.

Update:

  • Incorporated great improvements and a fix from Edgar in the comments.
  • String overload.
  • Display baud rate suggested by mehmet
#define DISPLAY_DEVICE Serial
#define DISPLAY_DEVICE_BAUD 9600
static uint8_t displayPktStart[] = {
 0xaa, // packet headchar
 0x42, // VP_N16 string write command
 0x00, // VP_N16 address
 0x00, // ...Fill
 0x00,
 0x80
 };
static uint8_t displayPktEnd[] = {
 0x00, // End of text
 0xcc, // packet tail
 0x33, // packet tail
 0xc3, // packet tail
 0x3c // packet tail
 };
void writeDisplay(const char* text)
{
 // Write packet headers
 DISPLAY_DEVICE.write(displayPktStart, sizeof displayPktStart);
 // Send text
 DISPLAY_DEVICE.print(text);
 // Write packet tail
 DISPLAY_DEVICE.write(displayPktEnd, sizeof displayPktEnd); 
}
void writeDisplay(const String& text)
{
 writeDisplay(text.c_str());
}
void setup()
{
 DISPLAY_DEVICE.begin(DISPLAY_DEVICE_BAUD);
}
void loop() 
{
 String msg = "TOPWAY";
 writeDisplay(msg);
 delay(2000);
 writeDisplay("Peanuts taste like chicken");
 delay(500);
 writeDisplay("");
 delay(1000);
 writeDisplay("No. Seriously");
 delay(2000);
}
answered Jul 28, 2021 at 9:22
6
  • 3
    1. Instead of writing a loop, you can DISPLAY_DEVICE.write(displayPktStart, sizeof displayPktStart);, and likewise for displayPktEnd. 2. You mean DISPLAY_DEVICE.print(text);, not println(). 3. Serial.print() will not send the terminating 0円, you may want to add that to displayPktEnd. Commented Jul 28, 2021 at 9:39
  • @EdgarBonet Thanks. Updated. Commented Jul 28, 2021 at 10:04
  • Thanks A lot. I've added DISPLAY_DEVICE.begin(9600); in setup Commented Jul 28, 2021 at 14:51
  • 1
    @mehmet I hope my update matches your expectations. Commented Jul 28, 2021 at 15:29
  • @voidPointer well, I don't want to bother you too much, but I have one more question. if I want to use dynamic address, such as "000080" instead of Serial.write(0x00); Serial.write(0x00); Serial.write(0x80); how to add this method, like writeDisplay(msg, "000080"); Commented Jul 28, 2021 at 19:51

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.