ch1 = getchar(); // получаем символ из потока ввода
if(ch1 == 'c' && len == 0){ len++; } if(ch1 == 'l' && len == 1){ len++; } if(ch1 == 's' && len == 2){ len++; } if(ch1 == 0x0D && len == 3){ // клавиша Enter len= 0; // выполнить очистку экрана ну или чего там надо } if(ch1 == 0x1B){ // клавиша Esc сброс счетчиак числа символов в команде len= 0; }
а чего по неугадыванию знака лен не сбрасываете? у вас он сработает и в том случае, если между знаками команды будут и другие буквы... например: coleso "enter" выполнит очистку
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
char len; //счетчик числа символов в команде char len_2;
ch1 = getchar(); // получаем символ из потока ввода len_2++;
if(ch1 == 'c' && len == 0 && len_2 == 1){ len++; } if(ch1 == 'l' && len == 1 && len_2 == 2){ len++; } if(ch1 == 's' && len == 2 && len_2 == 3){ len++; } if(ch1 == 0x0D && len == 3 && len_2 == 4){ // клавиша Enter // выполнить очистку len=0;len_2=0; } if(ch1 == 0x1B){ // клавиша Esc сброс счетчиак числа символов в команде len= 0; len_2=0; }
А теперь какова вероятность?А по идее, без всякого дополнительного кода, после cls должен быть отправлен "enter", тогда Бейсик выполнит команду очистки, он либо "enter" не жмет, либо...
Где логика в Вами написанной строке кода, в которой присутствует байт (ну или символ, иными словами) , в то время, когда в Вашем вопросе о нём и речи не было ?
Вам нужно сначала принять строку (ссылку на простой вариант для абдурины дали чуть выше), а потом уже её сравнивать.
spikepavel вам задание, создайте алгоритм: одно поле EditText, и два поля Label, в первом Label должены отображаться вводимые в EditText символы, а во втором Label отобразится только после комбинации символов CLS"enter". То ест вам нужно просто напросто написать свой алгоритм поля password.
ГЫММ... протокол обмена по RS232 хорош при межкомпьютерной связи... асинхронный радиоканал... оптика/ультразвук... А для внутрисхемных приложений (в пределах одной платы, между разными СБИС в пределах устройства) предпочтительно как минимум или SPI или I2C - и быстрее и возможность приостановки обмена в критических интервалах.
Последний раз редактировалось BOB51 Вт май 22, 2018 12:31:15, всего редактировалось 1 раз.
Заголовок сообщения: Re: Конвертация символов Ардуино.
Добавлено: Чт май 24, 2018 01:38:43
Модератор
Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4599 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Значит 2 страницы обсуждения, с кучей советов от пользователей - напрасны. Печалька... Мораль. Прежде, чем взяться за что-нибудь и пойти на форум с вопросами, стоит задаться вопросом - "А моё ли это ?". Дабы не тратить ни своего времени, ни чужого...
Да не, не напрасно. Данные мне тут "знания" уже пригодились в другом деле. А теперь снова по этой теме: Данные идут с первой платы по Serial.write(c) : size_t write(uint8_t); size_t write(const char *str); size_t write(const uint8_t *buffer, size_t size);
На второй плате они принимаются. Если я вставляю в код вот такую конструкцию от dimon456: char len; //счетчик числа символов в команде char len_2;
ch1 = getchar(); // получаем символ из потока ввода len_2++;
if(ch1 == 'c' && len == 0 && len_2 == 1){ len++; } if(ch1 == 'l' && len == 1 && len_2 == 2){ len++; } if(ch1 == 's' && len == 2 && len_2 == 3){ len++; } if(ch1 == 0x0D && len == 3 && len_2 == 4){ // клавиша Enter VGA.clear(); len=0;len_2=0; } if(ch1 == 0x1B){ // клавиша Esc сброс счетчиак числа символов в команде len= 0; len_2=0; }
То 2 варианта развития....вариант 1 он делает очистку бесконечно со старта в loop'e.....вариант 2 он никак не реагирует на CLS и следом нажатый интер.
Вот сам основной код. Может я не туда его вставляю. inByte заменяю в коде на ch1 : void setup() { Serial1.begin(9600); VGA.begin(320, 240, VGA_COLOUR); VGA.setInk(16); }
void loop() { if(Serial1.available()) { int inByte = Serial1.read();
Заголовок сообщения: Re: Конвертация символов Ардуино.
Добавлено: Чт май 24, 2018 07:36:19
Модератор
Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4599 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Заведите буфер и принимайте строку в него. По символу 0x0D (или '\n') заканчивайте приём строки и делайте сравнение. Всё просто, как 5 копеек. На другой вариант приёма сроки, который ещё проще (хотя куда уже ?!), давали ссылку чуть выше.
PS: Вы хоть читайте сообщения, что-ли. Да по ссылкам проходите, которые вам дают...
Если ему делать с буфером - то 1) этот буфер надо заполнять чтобы отделить "зерна от плевел" -> будут траблы при выводе текста 2) надо решить вопрос о длине буфера. лучше пусть посимвольно сравнивает (как тут уже предлагали - со счётчиками) раз ему прямой вывод текста важен. ПС: я бы делал конструкции со спецсимволом, с которого начинаются команды и не парился...
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Заголовок сообщения: Re: Конвертация символов Ардуино.
Добавлено: Чт май 24, 2018 09:50:12
Первый раз сказал Мяу!
Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Пт мар 07, 2014 18:37:20 Сообщений: 38 Откуда: Пермь
Рейтинг сообщения:0
подход какой-то не системный. Ну ладно CLS не работает, а другие операторы бейсика связанные с экраном работают? Например установить курсор в определенную позицию, нарисовать точку, линию, окружность?
Их нет в самом бейсике. Сигналы должна ловить вторая плата, на которой уже крутится VGA библиотека. Если реализовывать графику+звук+операционку на одной плате, то все работает норм, но скорость работы ужасно медленная. А вот если разнести, то уже нет. Нажатия 1 клавиши или отправку одного символа я ловлю. А если символов больше одного или клавиш, то никак. Я никак не могу понять как ловить нужные мне куски текста(команд) на другой плате. Люди помогают, спасибо им, но что делать я так и не понял в итоге. Как бы я не сравнивал, то запуск нужной мне функции не выходит. Будем копать дальше).
Добавлено after 39 seconds: Проблемы именно при попытке связать разные платы...
ПС: я бы делал конструкции со спецсимволом, с которого начинаются команды и не парился...
плата работает в обычном (твоем текстовом режиме) пока не поймает символ начала команды (этот символ не должен встречаться в обычном выводе текста), как поймала - вместо отправки на дисплей начинает складывать байты в буфер и складывает, пока или одна из команд не сойдётся или пока буфер не кончится (его длина должна быть равной длине самой длинной команды)... если буфер кончился, а команда ни одна не сошлась - вываливаем содержимое на дисплей как текст... вариант, конечно, не совсем, но, пожалуй, самый простой
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Проблема в этом. Если бейсик открытый и в нем есть возможность расширения, то Вам надо самому реализовать эти операторы , а какое у вас железо бейсику все равно, хоть графопостроитель. Какой протокол Вы выберете при обмене этих подпрограмм реализующих операторы зависит только от Вас. Можно использовать например команды ANSI терминала, можно что-нибудь свое.
Не пойму, почему Вы пытаетесь что-то поймать с ввода с клавиатуры. Представьте себе такую ситуацию, когда запущенная программа на бейсике крутится часами, что-то рисует на экране, очищает его, опять рисует. При этом никто ни какие кнопки на клавиатуре не нажимает и "CLS" не вводит.
Вот и "всплыла" необходимость в определении ПРОТОКОЛА ОБМЕНА ДАННЫМИ между двумя устройствами. А что принять за таковой - взять какой-нибудь стандартный или придумать свой вариант - это и есть ТВОРЧЕСКАЯ ЗАДАЧА, решаемая САМИМ автором конструкции.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения