Arduino bluetooth HC 06

Kaisarali Kadyrzhan
Offline
Зарегистрирован: 13.12.2020

Доброго времени суток.
Есть такой вопрос.
Как можно разделить данные приходящие с android устройства через HC06 на arduino, например 124 127 100 125.
124 это номер ячейки массива в 127 это знак. Данные приходят пачкой, надо их разделить.

b707
Онлайн
Зарегистрирован: 26.05.2017

придумать протокол с началом и концом пакета данных

Kaisarali Kadyrzhan
Offline
Зарегистрирован: 13.12.2020

Пример приведите пожалуйста, если несложно.

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Проще Вам написать, как Вы делаете, а мы посмотрим и, возможно, что-нибудь посоветуем.

rkit
Offline
Зарегистрирован: 23.11.2016

Например, два нуля подряд это разделитель.

Kaisarali Kadyrzhan
Offline
Зарегистрирован: 13.12.2020

Дело в том, что данные на Arduino отправляются пачками, при приёме, serial.read принимает первую или последнюю.

b707
Онлайн
Зарегистрирован: 26.05.2017

Kaisarali Kadyrzhan пишет:
Дело в том, что данные на Arduino отправляются пачками, при приёме, serial.read принимает первую или последнюю.

что значит "отправляются" ? кто их отправляет, не Вы?

Kaisarali Kadyrzhan
Offline
Зарегистрирован: 13.12.2020
#include <FastLED.h>
#define LED_PIN     6
#define NUM_LEDS    100
CRGB leds[NUM_LEDS];
const unsigned int DIM1 = 123;
const unsigned int DIM2 = 1;
const unsigned int DIM3 = 3;
int ary[DIM1][DIM2][DIM3];
void setup() {
 
  Serial.begin(9600);
   FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}
 
void loop() {
if(Serial.available()){
int  val=Serial.read();
    delay(800);
    int chess=val;
  if(Serial.available()){int color=Serial.read(); 
  if(color>0){
    if(color==124){ ary[chess][1][1]=0;    ary[chess][1][2]=255; ary[chess][1][3]=0; 
    
          leds[chess]=CRGB(ary[chess][1][1],ary[chess][1][2],ary[chess][1][3]);
          FastLED.show();
      
  }
    if(color==125){ ary[chess][1][1]=255;  ary[chess][1][2]=0;   ary[chess][1][3]=0;
    
     
          leds[chess]=CRGB(ary[chess][1][1],ary[chess][1][2],ary[chess][1][3]);
          FastLED.show();
      
  }}}
  
  
 }
 
}
Kaisarali Kadyrzhan
Offline
Зарегистрирован: 13.12.2020
#include <FastLED.h>
#define LED_PIN     6
#define NUM_LEDS    100
CRGB leds[NUM_LEDS];
const unsigned int DIM1 = 123;
const unsigned int DIM2 = 1;
const unsigned int DIM3 = 3;
int ary[DIM1][DIM2][DIM3];
void setup() {
 
  Serial.begin(9600);
   FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}
 
void loop() {
if(Serial.available()){
int  val=Serial.read();
    delay(800);
    int chess=val; //переменная для номера светодиода
  if(Serial.available()){int color=Serial.read(); //переменная для цвета светодиода
  if(color>0){
    if(color==124){ ary[chess][1][1]=0;    ary[chess][1][2]=255; ary[chess][1][3]=0; 
    
          leds[chess]=CRGB(ary[chess][1][1],ary[chess][1][2],ary[chess][1][3]);
          FastLED.show();
      
  }
    if(color==125){ ary[chess][1][1]=255;  ary[chess][1][2]=0;   ary[chess][1][3]=0;
    
     
          leds[chess]=CRGB(ary[chess][1][1],ary[chess][1][2],ary[chess][1][3]);
          FastLED.show();
      
  }}}
  
  
 }
 
}
b707
Онлайн
Зарегистрирован: 26.05.2017

вставьте код по правилам форума

Kaisarali Kadyrzhan
Offline
Зарегистрирован: 13.12.2020
#include <FastLED.h>
#define LED_PIN     6
#define NUM_LEDS    100
CRGB leds[NUM_LEDS];
const unsigned int DIM1 = 123;
const unsigned int DIM2 = 1;
const unsigned int DIM3 = 3;
int ary[DIM1][DIM2][DIM3];
void setup() {

  Serial.begin(9600);
   FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}

void loop() {
if(Serial.available()){
int  val=Serial.read();
    delay(800);
    int chess=val; //переменная для номера светодиода
  if(Serial.available()){int color=Serial.read(); //переменная для цвета светодиода
  if(color>0){
    if(color==124){ ary[chess][1][1]=0;    ary[chess][1][2]=255; ary[chess][1][3]=0; 
    
          leds[chess]=CRGB(ary[chess][1][1],ary[chess][1][2],ary[chess][1][3]);
          FastLED.show();
      
  }
    if(color==125){ ary[chess][1][1]=255;  ary[chess][1][2]=0;   ary[chess][1][3]=0;
    
     
          leds[chess]=CRGB(ary[chess][1][1],ary[chess][1][2],ary[chess][1][3]);
          FastLED.show();
      
  }}}
  
  
 }
 
}

 

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Kaisarali Kadyrzhan пишет:
Дело в том, что данные на Arduino отправляются пачками, при приёме, serial.read принимает первую или последнюю.

При приеме Serial.read() принимает все, что ему приходит.

Kaisarali Kadyrzhan
Offline
Зарегистрирован: 13.12.2020

Есть ли функция которая считывает каждый отдельный байт?

Feofan
Offline
Зарегистрирован: 28.05.2017
b707
Онлайн
Зарегистрирован: 26.05.2017

Kaisarali Kadyrzhan пишет:

Есть ли функция которая считывает каждый отдельный байт?


serial.read()

попробуйте внятно ответить, нафига у вас в середине кода делей аж на 800 мс?
800 мс - по меркам компьютера просто вечность, за это время у вас все остальные данные успевают протухнуть, поэтому у вас принимается только один пакет.

Но это не все. Когда вы решите проблему с задержкой, вылезет главный затык - то что у вас нет признака начала данных и невозможно отличить, где конец одного пакета и начало другого