Serial.read() -> Array[8][8].

VoViK
Offline
Зарегистрирован: 31.05.2012

Здравствуйте.

Помогите, пожалуйста, сделать чтение данных с COM порта в двумерный массив.

Данные отправляются php скриптом. В итоге должн получится массив  8x8 каждый элемент которого состоит из 8 бит. Массив должен получится в виде: http://paste.org/49921

Задача срочна, работа будет оплачена.

Спасибо.

leshak
Offline
Зарегистрирован: 29.09.2011

 Что "получится должно" - понятно. А вот в каком виде данные приходят - не очень. В бинарном или текстовом, с разделителями или без? "Всем пакетом сразу" или "в час по чайной ложке"?

>Задача срочна, работа будет оплачена.

Ну, если срочная, то может стоило свои контакты оставить? Напрямую вся-ко быстрее мелочи выяснять.

 

leshak
Offline
Зарегистрирован: 29.09.2011

 Ладно, предположим у вас идет бинарный поток. Все принятые байты - данные.

ТОгда код будет выглядеть примерно так

#define MAX_X 8 // размер по X
#define MAX_Y 8 // размер по Y


// координаты текущей ячейки, в нее будет записан пришедший байт
byte x=0; 
byte y=0;


bool arrayIsFull=false; // флаг указывающий

byte data[MAX_X][MAX_Y]; // собственно сам массив данных

void setup(){
   Serial.begin(9600);
}


void loop(){
  if(!arrayIsFull &&  Serial.available()){ // что-то пришло и массив еще не полностью заполнен
  
     data[x][y]=Serial.read();// заполнили ячейку
     
     y++; // перешли к следующему столбцу
     if(y==MAX_Y){ // строка закончилась
       x++;// переходим на следующую строку
       y=0;// и возвращаемся к первому столбцу
       
        if(x==MAX_X){ // а строки уже тоже закончились, больше писать некуда 
          arrayIsFull=true;// запоминаем это
          
          // ****************
          //  тут можно написать логику которая должна сработать, когда массив полностью заполнился
          // ****************
        }
     }
  }
}