Конвертация символов Ардуино.

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 73
Зарегистрирован: Пт апр 08, 2016 10:09:03

Сообщение spikepavel »

СпойлерvideocardCLS:17: error: stray '#' in program

if((inByte == 'c'||inByte == 'C') && len == 0 && len_2 == 1){

^

videocardCLS:17: error: stray '#' in program

if((inByte == 'c'||inByte == 'C') && len == 0 && len_2 == 1){

^

videocardCLS:17: error: stray '#' in program

if((inByte == 'c'||inByte == 'C') && len == 0 && len_2 == 1){

^

videocardCLS:17: error: stray '#' in program

if((inByte == 'c'||inByte == 'C') && len == 0 && len_2 == 1){

^

videocardCLS:20: error: stray '#' in program

if((inByte == 'l'||inByte == 'L') && len == 1 && len_2 == 2){

^

videocardCLS:20: error: stray '#' in program

if((inByte == 'l'||inByte == 'L') && len == 1 && len_2 == 2){

^

videocardCLS:20: error: stray '#' in program

if((inByte == 'l'||inByte == 'L') && len == 1 && len_2 == 2){

^

videocardCLS:20: error: stray '#' in program

if((inByte == 'l'||inByte == 'L') && len == 1 && len_2 == 2){

^

videocardCLS:23: error: stray '#' in program

if((inByte == 's'||inByte == 'S') && len == 2 && len_2 == 3){

^

videocardCLS:23: error: stray '#' in program

if((inByte == 's'||inByte == 'S') && len == 2 && len_2 == 3){

^

videocardCLS:23: error: stray '#' in program

if((inByte == 's'||inByte == 'S') && len == 2 && len_2 == 3){

^

videocardCLS:23: error: stray '#' in program

if((inByte == 's'||inByte == 'S') && len == 2 && len_2 == 3){

^

C:\Users\Pavel\Desktop\videocardCLS\videocardCLS.ino: In function 'void loop()':

videocardCLS:17: error: lvalue required as unary '&' operand

if((inByte == 'c'||inByte == 'C') && len == 0 && len_2 == 1){

^

videocardCLS:17: error: expected ')' before ';' token

if((inByte == 'c'||inByte == 'C') && len == 0 && len_2 == 1){

^

videocardCLS:17: error: expected ')' before ';' token

videocardCLS:17: error: 'c' was not declared in this scope

if((inByte == 'c'||inByte == 'C') && len == 0 && len_2 == 1){

^

videocardCLS:17: error: expected primary-expression before '||' token

if((inByte == 'c'||inByte == 'C') && len == 0 && len_2 == 1){

^

videocardCLS:17: error: lvalue required as unary '&' operand

if((inByte == 'c'||inByte == 'C') && len == 0 && len_2 == 1){

^

videocardCLS:17: error: 'C' was not declared in this scope

if((inByte == 'c'||inByte == 'C') && len == 0 && len_2 == 1){

^

videocardCLS:17: error: expected primary-expression before ')' token

if((inByte == 'c'||inByte == 'C') && len == 0 && len_2 == 1){

^

videocardCLS:17: error: expected ';' before ')' token

videocardCLS:20: error: lvalue required as unary '&' operand

if((inByte == 'l'||inByte == 'L') && len == 1 && len_2 == 2){

^

videocardCLS:20: error: expected ')' before ';' token

if((inByte == 'l'||inByte == 'L') && len == 1 && len_2 == 2){

^

videocardCLS:20: error: expected ')' before ';' token

videocardCLS:20: error: 'l' was not declared in this scope

if((inByte == 'l'||inByte == 'L') && len == 1 && len_2 == 2){

^

videocardCLS:20: error: expected primary-expression before '||' token

if((inByte == 'l'||inByte == 'L') && len == 1 && len_2 == 2){

^

videocardCLS:20: error: lvalue required as unary '&' operand

if((inByte == 'l'||inByte == 'L') && len == 1 && len_2 == 2){

^

videocardCLS:20: error: 'L' was not declared in this scope

if((inByte == 'l'||inByte == 'L') && len == 1 && len_2 == 2){

^

videocardCLS:20: error: expected primary-expression before ')' token

if((inByte == 'l'||inByte == 'L') && len == 1 && len_2 == 2){

^

videocardCLS:20: error: expected ';' before ')' token

videocardCLS:23: error: lvalue required as unary '&' operand

if((inByte == 's'||inByte == 'S') && len == 2 && len_2 == 3){

^

videocardCLS:23: error: expected ')' before ';' token

if((inByte == 's'||inByte == 'S') && len == 2 && len_2 == 3){

^

videocardCLS:23: error: expected ')' before ';' token

videocardCLS:23: error: 's' was not declared in this scope

if((inByte == 's'||inByte == 'S') && len == 2 && len_2 == 3){

^

videocardCLS:23: error: expected primary-expression before '||' token

if((inByte == 's'||inByte == 'S') && len == 2 && len_2 == 3){

^

videocardCLS:23: error: lvalue required as unary '&' operand

if((inByte == 's'||inByte == 'S') && len == 2 && len_2 == 3){

^

videocardCLS:23: error: 'S' was not declared in this scope

if((inByte == 's'||inByte == 'S') && len == 2 && len_2 == 3){

^

videocardCLS:23: error: expected primary-expression before ')' token

if((inByte == 's'||inByte == 'S') && len == 2 && len_2 == 3){

^

videocardCLS:23: error: expected ';' before ')' token

exit status 1
stray '#' in program
Добавлено after 2 minutes 6 seconds:
Димон спасибо Вам за помощь еще раз!!! При попытке залить ругается вот этим. Может у меня компилятор кривой???
Реклама
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

Да это редактор что-то не то выдал
Спойлер

Код: Выделить всё

char len; //счетчик числа символов в команде
char len_2;

void setup() {
Serial1.begin(9600);
VGA.begin(320, 240, VGA_COLOUR);
VGA.setInk(16);
}

void loop() {
if(Serial1.available()) {
int inByte = Serial1.read();

len_2++;

if((inByte == 'c' ||inByte == 'C') && len == 0 && len_2 == 1){
len++;
}
if((inByte == 'l' ||inByte == 'L') && len == 1 && len_2 == 2){
len++;
}
if((inByte == 's' ||inByte == 'S') && len == 2 && len_2 == 3){
len++;
}
if(inByte == 13 && len == 3 && len_2 == 4){ // клавиша Enter
VGA.clear(); VGA.moveCursor(0,0);
len=0;len_2=0;
}
if(inByte == 13 || inByte == 27){ // клавиша Enter или клавиша Esc сброс счетчика числа символов в команде
len= 0; len_2=0;
}
if(inByte==27){ // клавиша ESC
VGA.clear();
VGA.moveCursor(0, 0);
}

VGA.write(inByte); }
}
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Кошмар... И это только для одной команды.
А если их будет 20 ? Простыню на 100500 строк городить ? :facepalm:
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

я так и не понял, о чем тут идет спор...
если достаточно ресурсов (а я догадываюсь, их достаточно), то что может быть проще ранее рекомендованного strcmp?

Код: Выделить всё

if(strcmp(command, "CLR") == 0){
   // обработка команды CLR
} else if(strcmp(command, "PRINT") == 0{
   // обработка команды PRINT
} else if .......
для avr-gcc рекомендую strcmp_P - меньше ресурсов flash тратится.

Добавлено after 3 minutes 12 seconds:
можно, конечно, и красивее сделать - перебор структур из массива... но это на любителя, так тоже просто и удобно.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Массив структур, в виде строки-команды и указателя на функцию-обработчик, как выше уже сказали - самое простое и красивое решение.
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Пт мар 07, 2014 18:37:20
Откуда: Пермь

Сообщение emax »

[uquote="Аlex",url="/forum/viewtopic.php?p=3385105#p3385105"]Массив структур, в виде строки-команды и указателя на функцию-обработчик, как выше уже сказали - самое простое и красивое решение.[/uquote]
Да весь этот механизм в интерпретаторе бейсика уже есть и если проект открыт, то должно быть внятное описание как добавлять свои операторы.
Только от ТС так и не узнали, что это за проект, на чем он написан, чем компилить.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Аlex писал(а):Массив структур, в виде строки-команды и указателя на функцию-обработчик
ну я об этом и написал в дополнении... хотя не факт, что этот вариант будет компактнее и быстрее. я сталкивался с большим геморроем, когда реализовывал этот подход при помощи WinAVR, который данные во flash поддерживает не наивно для Си, а только путем работы с функциями чтения... такое не стану советовать.
avr-gcc с версии, кажется, 4 уже поддерживает пространство памяти __flash, что позволяет реализовать описанный подход на самом деле элегантно.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15600
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Мое видение ситуёвины...
:roll:
Человек хочет организовать внутреннюю шину данных для обмена между самостоятельными блоками единого устройства.
Это городушка вроде северна/южна моста в ПК (ибо устройство по сути и есть самодельный эквивалент ПК).
Ранее в пределах одного модуля (а за основу взят АРМ из группы ардуиновых) у него задачка решалась.
Однако, поскольку использованы библиотеки-копипасты, а не самостоятельная разработка быстродействие результирующего устройства автора не устроило и он разделил его на самостоятельные функциональные блоки.
А воть тут-то и вылезло... проблемо место...
Ему бы не RS232 с асинхронным обменом делать, а позаботится хотя-бы об аппаратном варианте синхронизации обмена "запрос-ответ" да шину данных по-другому организовать. Ан нет - уперся в тот АППАРАТНЫЙ serial поскольку ИНЫХ ГОТОВЫХ БИБЛИОТЕК НЕТ.
Ежли уж говорить о отловле команд по асинхроннику...
Каждый модуль занят своей задачей. Отлов наличия каких-либо данных в буфере приемопередатчика производится в произвольное время (а сколько за тот промежуток времени туда нападало данных - это тоже вопрос). Ардуина готовность данных прерыванием (как в случае работы непосредственно с МК) не обозначает - гонит поток всего, что принимает через буфер (можно конечно и посложнее прожку соорудить - но то уже задача посильная ЗНАТОКУ, а не НАЧИНАЮЩЕМУ и выходит за рамки "стандартных"средств IDE). Посему ставится периодический контроль содержимого того буфера (что жреть время и ресурс). Сразу всплывает вопрос о обрамлении данных синхросимволами, дабы отличить случайно совпавшую комбинацию данных от команды. Да и ответ "соседнему" блоку о том, что данные обработаны, а не потеряны...
Вобщем КАША...
:(
Открыл глаза
Сообщения: 73
Зарегистрирован: Пт апр 08, 2016 10:09:03

Сообщение spikepavel »

Всем спасибо за помощь. Связать платы так и не получилось как следует. Пока ограничился постановкой команд на не используемый ряд верхних клавиш (F1-F12). Из плюсов - уяснил для себя много нового.
Не в курсе сколько будет стоить подобная работа по "связке плат", если заказать это?
Ответить

Вернуться в «AVR»