• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z payloadem z brokera mqtt
#1
Cześć,
mam następujący problem. Z brokera mqtt dostaję payload w postaci: A8,43,00,00,00,00,26,1E są to symbole Ascii reperezentujące bajty w Hex. Potrzebuję te dane wysłać przez software serial do urządzenia. Przerabiam payload kodem:

Kod:
char myChars[] = {"A8,43,00,00,00,00,26,1E"};
  char *ptr;
  unsigned char result[8];
  char temp[2];
  int count = 0;
  ptr = strtok(myChars, ",");
  while (*ptr)
  {
    strcpy(temp, ptr);
    result[count] = (unsigned char)strtoul(temp, 0, 16);
    count++;
    ptr = strtok(NULL, ",");
  }
  for (unsigned int i = 0; i <= 7; i++)
  {
    Serial.print((char)result[i]);
  }
Dlaczego ten kod nie działa?

00,00,26,1EA8,43,00,00,00,00,26,1E
 
Odpowiedź
#2
Napisz komentarze do każdej linijki kodu. Opisz co dana instrukcja robi, oraz co chciałbyś aby robiła.
Czemu to piszę? Ano dla tego, że ten kod działa, tylko pewnie nie tak, jak byś sobie tego życzył.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#3
(10-07-2019, 00:02)Robson Kerman napisał(a): ten kod działa, tylko pewnie nie tak, jak byś sobie tego życzył.
KAŻDY kod działa, tak jak go napisano ale niekoniecznie tak, jak by chciał jego autor.
 
Odpowiedź
#4
Komentarze niedługo napiszę.
Przede wszystkim kod powinien do software serial wysyłać postać binarną.
Payload z brokera mqtt ma postać i jest to Ascii:
A8,43,00,00,00,00,26,1E
co w decimalach jest:
168 67 0 0 0 0 38 30
ale generalnie chodzi o to żeby przez software serial wysłać
10101000 01000011 00000000 00000000 00000000 00000000 00100110 00011110
Pomoże ktoś?
 
Odpowiedź
#5
No to zainteresuj sie z funkcja Serial.write().
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#6
(10-07-2019, 18:54)gibzwein napisał(a): Przede wszystkim kod powinien do software serial wysyłać postać binarną.

A uważasz, że w jakiej postaci są wysyłane dane? Mi się wydaje, że interfejs cyfrowy wysyła dane cyfrowe. Czyli te zera i jedynki, binarnie znaczy się. No ale może się mylę i Twoje Arduino wysyła coś innego.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości