Отладка алгоритма и кода
Добавлено: Пт авг 12, 2016 09:20:02
Добрый день, уважаемые коты.
Возник маленький ньюанс, что запутался в логике работы программы для ардуино.
Необходимо создать 2 программных СОМ порта, которые будут пропускать через себя все данные, эдакий буффер.
Но, в тот-же момент искать в потоке определённый пакет данных, и по обнаружению выполнять последовательность действий, которая заключается в отправке 6 раз двух пакетов, и по окончанию отправки отправить ещё 2 пакета данных.
Будьте добры, просмотрите что не так и где выползут косяки.
Возник маленький ньюанс, что запутался в логике работы программы для ардуино.
Необходимо создать 2 программных СОМ порта, которые будут пропускать через себя все данные, эдакий буффер.
Но, в тот-же момент искать в потоке определённый пакет данных, и по обнаружению выполнять последовательность действий, которая заключается в отправке 6 раз двух пакетов, и по окончанию отправки отправить ещё 2 пакета данных.
Код: Выделить всё
#include <SoftwareSerial.h>
SoftwareSerial rxSerial(12, 13); // Установка пинов программного порта приема (RX, TX)
SoftwareSerial txSerial(0,1); // Установка пинов программного порта передачи (RX, TX)
void setup() {
Serial.begin(115200); // Запуск аппаратного порта ,115200
rxSerial.begin(115200); // Запуск программного порта, 115200
txSerial.begin(115200); // Запуск программного порта, 115200
}
void loop() { // Главный цикл
if (rxSerial.available()) { // буфферный режим передачи из SOFTSerial в HWSerial
txSerial.write(rxSerial.read());
}
if (txSerial.available()) { // буфферный режим передачи из HWSerial в SOFTSerial
rxSerial.write(txSerial.read());
}
int buffInLoad[]={0xAA,0x00,0x4F,0x4B,0x5F,0x56,0x36,0x2E,0x38,0x03,0x07,0x08,0x00,0x00,0xCC,0x33,0xC3,0x3C,'\0'}; // Исходный пакет готовности аппарата
int buffOut[]={0xAA,0x73,0x01,0x92,0x01,0x6C,0xCC,0x33,0xC3,0x3C,'\0'}; // Первый пакет данных 0
int buffOut1[]={0xAA,0x72,0x01,0x92,0x01,0x6C,0xCC,0x33,0xC3,0x3C,'\0'}; // Второй пакет данных 0
int buffOk[]={0xAA,0x73,0x01,0xE5,0x01,0xAF,0xCC,0x33,0xC3,0x3C,'\0'}; // Первый пакет данных 1
int buffOk1[]={0xAA,0x72,0x01,0xE5,0x01,0xAF,0xCC,0x33,0xC3,0x3C,'\0'}; // Второй пакет данных 1
int var[17]={}; // Буфферный масив
bool key = false; // Булевый ключ
int flag =0; // Флаг передачи пароля
int j,i;
if (rxSerial.available()){ // Если порт доступен, то побайтно забиваем массив var байтами из него
while (rxSerial.available()&& i<18){
var[i++] = rxSerial.read();
if (buffInLoad[i]= var[i]){ // Если принятые значения не равны исходным в массиве то
delay(10000); // задержка для загрузки
for (int i=0; i<6; i++){ // отправка пакета 0 , 6 раз
for (int j=0; j<10; j++){ // побайтная отправка первого пакета 0
Serial.write(buffOut[j]);
}
delay(85); //задержка 85 мс
for (int j=0; j<10; j++){ // побайтная отправка второго пакета 0
Serial.write(buffOut1[j]);
}
flag = flag++;
}
//bool key = true; // устанавливаем ключ в положение false
}
}
var[i++] = '\0';
}
if (Serial.available(), key !=false){ //проверка на начало загрузки, с помощью доступности порта и значения ключа
if (flag = 6){ // проверка, если пакет отправлен 6 раз, то отправка 2-х пакетов
for (int j=0; j<10; j++);{
Serial.write(buffOk[j]); // побайтная отправка 1 пакета 1
}
delay(85);
for (int j=0; j<10; j++);{
Serial.write(buffOk1[j]); // побайтная отправка 2 пакета 1
}
}
}
}