Перейти к содержанию

Вопрос По Синтаксису


Рекомендуемые сообщения

Друзья, помогите с проблемой. Ничего не шарю в языках программирования, пишу скетч для ардуино методом тыка (а точнее изменяю уже готовы). Вобщем есть строка case 0x81: Serial.write(0x97); break; - то есть устройство дает сигнал 0x81, а ардуино ему отвечает 0x97 , но задача усложняется тем, что устройство потом подает серию сигналов 0x4C 0x33 0x46 0x0D , а МК должен ответить ему тоже серией 0x51 0x32 0x0D, а я не знаю как добавить в case серию сигналов (какие знаки препинания ставить между сигналами), зная принцип у меня все получится, просто не знаю синтаксиса.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Обычный синтаксис выглядит так

switch(<переменная>){
 case <значение1>: <код1>; break;
 case <значение2>: case <значение3>: <код2>; break;
 default: <код3>;
}

но в данном случае это вряд ли поможет, вам ведь нужно реагировать на данные не по отдельности, а именно на последовательность. Например, можно завести флаговую переменную

char flag=false;
if(cmd == CMD1)flag=true; else
 if(cmd == CMD2){if(flag){<код>} } //срабатывает, если принято сначала CMD1, а потом CMD2
 else flag=false; // если же пришло что-то постороннее - сбрасываем флаг обратно в 0

Можно использовать переменную не только ради 1 бита, а обрабатывать большее число состояний, но без четкого алгоритма (лучше всего в виде блок-схемы) помочь сложно.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Можно использовать переменную не только ради 1 бита, а обрабатывать большее число состояний, но без четкого алгоритма (лучше всего в виде блок-схемы) помочь сложно.

Это я делаю эмулятор балласта лампы проектора для запуска без балласта (установка мощного светодиода вместо лампы). В более простой модели проектора все получилось, там был один запрос от материнки и 1 ответ от балласта, я составил таблицу запросов и ответов и все заработало, а теперь попался более навороченный проектор, с помощью логического анализатора я определил частоту 9600 EVEN и выписал данные запросов материнки и ответ балласта и получается такая картина от момента включения проектора и где-то минута работы до полного разогрева лампы:

Мать:4D 0D

Балласт: 4D 47 59 0D

Мать:53 0D

Балласт: 53 30 45 0D

Мать: 51 0D

Балласт: 51 32 0D

Мать: 4C 33 46 0D

Балласт: 41 0D

Мать: 51 0D

Балласт: 51 32 0D

Мать: 54 0D

Балласт: 54 31 46 0D

Потом 2 последних чередуются , идет постепенный разогрев лампы и некоторые данные ответа балласта меняются (видимо указывают матери температуру и еще что-то, но как показала практика с переделкой прошлого проектора, то можно матери выдавать одинаковые значения

Ну и потом идет такое

Мать: 4C 32 46 0D

Балласт: 41 0D

Мать: 44 0D

Балласт: 44 32 45 0D

Ну и снова каждую секунду чередуются

Мать: 51 0D

Балласт: 51 32 0D

Мать: 54 0D

Балласт: 54 32 33 0D

А вот скетч от первого преоктора, правда там реализованы переключатели режимов в зависимости от запросов матери

int data;
int StatusLamp;
#define  INIT1  1
#define  INIT2  2
#define  WORK1  3
#define  WORK2  4
void setup() {
 StatusLamp = INIT1;
 Serial.begin(9600, SERIAL_8E1);
}
void loop() {
}

void func_unique_request( int data )
{
switch ( data )
{
 case 0x00:  Serial.write(0x4E); break;
 default:   Serial.write(0x00); break;
}
}
void func_INIT1( int data )
{
switch ( data )
{
 case 0x53:  Serial.write(0x53); break;
 case 0x51:  Serial.write(0x51); break;
 case 0x4C:  Serial.write(0x41); break;
 case 0x32:  Serial.write(0x32); break;
 case 0x84:  Serial.write(0x02); break;
 case 0x83:  Serial.write(0x64); break;
 case 0x81:  Serial.write(0x17); break;
 default  :  func_unique_request(data); break; 
}
// code change status lamp to step2 ( example 0x81 )
if ( data ==  0x81 )   StatusLamp = INIT2;
}

void func_INIT2( int data )
{
switch ( data )
{
 case 0x81:  Serial.write(0x97); break;
 case 0x40:  Serial.write(0x40); break;
 case 0x34:  Serial.write(0x34); break;
 case 0x84:  Serial.write(0x04); break;
 case 0x83:  Serial.write(0x46); break;

 default  :  func_unique_request(data); break;  
}
// code change status lamp to step2 ( example 0x81 )
if ( data ==  0x83 )   StatusLamp = WORK1;
}

void func_WORK1( int data )
{
switch ( data )
{
 case 0x81:  Serial.write(0x98); break;
 case 0x92:  Serial.write(0x1B); break;
 case 0x40:  Serial.write(0x40); break;
 case 0x30:  Serial.write(0x30); break;
 case 0x84:  Serial.write(0x00); break;
 case 0x83:  Serial.write(0x42); break;
 default  : func_unique_request(data); break;
}
// code change status lamp to step2 ( example 0x81 )
if ( data ==  0x83 ) StatusLamp = WORK2;
}

void func_WORK2( int data )
{
switch ( data )
{
 case 0x81:  Serial.write(0xB6); break;
 case 0x92:  Serial.write(0x2A); break;
 case 0x40:  Serial.write(0x40); break;
 case 0x34:  Serial.write(0x34); break;
 case 0x84:  Serial.write(0x04); break;
 case 0x83:  Serial.write(0x46); break;
 default  : func_unique_request(data); 
}
if ( data ==  0x83 )   StatusLamp = WORK1;
}

void serialEvent()
{
 data = Serial.read();
switch ( StatusLamp )
{
case INIT1: func_INIT1(data); break;
case INIT2: func_INIT2(data); break;
case WORK1: func_WORK1 (data); break;
case WORK2: func_WORK2 (data); break;
}
}

Изменено пользователем martinways
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Ничего не шарю в языках программирования

пишу скетч

Нет слов... :)

Может, для начала, прошариться в проганье, а потом уже писать программу ? Если Вы, конечно, не чукча, который делает всё наоборот...

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Ничего не шарю в языках программирования

пишу скетч

Нет слов... :)

Может, для начала, прошариться в проганье, а потом уже писать программу ? Если Вы, конечно, не чукча, который делает всё наоборот...

Буфер? Парсить? Для меня это абсолютно загадочные термины)))) Я нихрена не шарю в php и javascript , но делаю сайты, интернет-магазины и правлю php код)) C++ для меня это буква "С" и два плюса))) Но тем не менее изменил чужой скетч и запустил первый проектор. А вот в этом проекторе уже сложнее из-за общения материнки и балласта группами сигналов. Может укажите пример как прописать условие если материнка дает запрос

51 0D , а балласт ей дает ответ 51 32 0D , на основе него сделаю по другим командам и надеюсь должно получиться)) Помогите плииииз))

P.S. А пока Вы отвечаете, пойду оленей покормлю :crazy:

Изменено пользователем martinways
Ссылка на комментарий
Поделиться на другие сайты

Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

if(data[0]==0x51 && data[1]==0x0D){buf[0]=0x51; buf[1]=0x32; buf[2]=0x0D;}

Понятия не имею, чем вам поможет "пример", если не знаете основ вроде буферизованного приема или передачи.

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

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

if(data[0]==0x51 && data[1]==0x0D){buf[0]=0x51; buf[1]=0x32; buf[2]=0x0D;}

Понятия не имею, чем вам поможет "пример", если не знаете основ вроде буферизованного приема или передачи.

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

Тогда прошу помочь за деньги, у меня к сожалению нет времени изучать все программирование ради единственной возможности эти знания проявить/использовать. Сколько будет стоить написание скетча по моим данным?

Изменено пользователем martinways
Ссылка на комментарий
Поделиться на другие сайты

Создайте массив и, по приёму каждого байта, укладывайте их в него. Маркером окончания пакета будет байт 0x0D. Как он пришёл - начинаем разбирать пакет на части.

Вот и всё...

Кстати, вот тут :

Мать: 4C 32 46 0D

Балласт: 41 0D

не ошиблись ?

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...