входящие данные ИЛИ волшебники страны консольные OS

fotorobot
Offline
Зарегистрирован: 07.11.2016

Всем доброго дня, недавно я с этой ардуинкой знаком и собственно вопрос следующий:

Как научить ардуино понимать входящие данные??? 

Сам хочу сдклать из ардуино подобие консольной операционной систем аля dos...в том планечто вводишь комманду (по последовательному порту, воздуху или еще как) она ее принемает и делает что просят.

Тут вопрос в понимании... НЕ могу заставиьт ее понимать комманды, с символами все просто ввел и вуаля, а вот с коммандами разобраться не выходит... вроде бы все просто - засунь все в массив и готово, но вот засунуть данные из буфера в массив не могу (знаний не хватает).

подскажите как это реальзовать?как сделать чтобы Ардовина отличала комманды? 

Lictor
Offline
Зарегистрирован: 01.10.2015

Прописываешь команды в массив, после получения пакета перебором (whie) ищешь совпадение с принятой командой и взводишь соответствующий флаг. Затем в зависимости от флага выполняешь команду. Я бы так сделал.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

fotorobot пишет:

подскажите как это реальзовать?как сделать чтобы Ардовина отличала комманды? 

Делай интерпретатор , но для одной команды. Не знаешь как делать интерпретатор? Гугл в помощь.  

 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

fotorobot пишет:

Тут вопрос в понимании... НЕ могу заставиьт ее понимать комманды, с символами все просто ввел и вуаля, а вот с коммандами разобраться не выходит...

публикуй код, где у тебя что-то получается и что-то не получается.

fotorobot
Offline
Зарегистрирован: 07.11.2016
void setup() {
Serial.begin(9600);
  
}
void loop() {
 
if (Serial.available()>0)
  {
    String data= Serial.readString();
  Serial.println(data);
  
 switch (data)
 {
  case "re":
  Serial.println("sds");
  case "er":
  Serial.println('w');
 }
  }
 
не выхожит почитать "data", матюкается...
Клапауций 234
Offline
Зарегистрирован: 24.10.2016

ну, не получается - попробуй иначе


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

void loop() {

if (Serial.available()) {
String data = Serial.readString();
Serial.println(data);
if (data == "re") {Serial.println("sds");}
if (data == "er") {Serial.println('w');}
}
}

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014
Клапауций 234
Offline
Зарегистрирован: 24.10.2016

не обязательно далеко ходить #76

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

fotorobot, основой операционной системы (OS) является файловая система (FS). Если Вы не планируете делать FS, то и речи об OS быть не может.

Вы проясните, что Вам нужно: OS или процессор консольных команд (CCP).

fotorobot
Offline
Зарегистрирован: 07.11.2016

мне нужно, что бы ардуино выполняла определенные функциии после получеия комманд по средствам каналов передачи данных

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Так а в чем пгоблема-то? Принимаете код команды, проверяете и выполняете команду. Усё. :)

Принимать, что символ, что команду - пофиг. Байт - он и в африке байт. Проверить не можете? Так Клапауций за вас это уже сделал .. или не знаете как команду выполнить? Вызовите как процедуру или функцию типа void .. делов -то.

fotorobot
Offline
Зарегистрирован: 07.11.2016

Дел в том что скетч Калапуция не работает... я побовал так...

fotorobot
Offline
Зарегистрирован: 07.11.2016

Разобрался... Спасибо)

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

fotorobot пишет:

Дел в том что скетч Калапуция не работает... я побовал так...

ок. 

это #5 - твой скетч, который компилится.

это #76 - мой скетч, который работает.

fotorobot
Offline
Зарегистрирован: 07.11.2016

Спасибо за помощь)))

fotorobot
Offline
Зарегистрирован: 07.11.2016

Разобрался в чем была проблема, но теперь у меня другой вопрос - Почему вся эта лабуда перестает работать как только я выношу функции сравнения за "if(serial.available > 0)???

fotorobot
Offline
Зарегистрирован: 07.11.2016

Короче ребята опять все сдохло... ничего не понимаю(((, что не так то?

void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()) { 
String Data = Serial.readString(); 
Serial.println(Data);

if (Data == "er") {Serial.println ("10");}
if (Data == "re") {Serial.println ("20");} 
}
} 

уже и так побовал 

String Data = String(Serial.readString());

толку 0(((

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

fotorobot пишет:

Короче ребята опять все сдохло... ничего не понимаю(((, что не так то?

у меня всё работает. что не так то, ёпте?

fotorobot
Offline
Зарегистрирован: 07.11.2016

он даннные в порт передает,а сравнение почему то не проходит...

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

fotorobot пишет:

он даннные в порт передает,а сравнение почему то не проходит...

ты смотрел мой код, как я делаю, что бы работало?

fotorobot
Offline
Зарегистрирован: 07.11.2016

твой код напмсан под  DIGIUSB... а под Сериалом он не поет...

 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

fotorobot пишет:

твой код напмсан под  DIGIUSB... а под Сериалом он не поет...

и, что, заменить дидиюсб, на сериал религия запрещает заменить?

fotorobot
Offline
Зарегистрирован: 07.11.2016

ну начнем с того что замена под Srial нчегоне дала... и к ттому же очень грамостко получилось...

Я решил прибегнуть к помощи класса String...

Собственнно была моя ошибка...

Прекратив как сумасшедший искать помощи из вне я решил открыть по шире глаза и проанализировать данные из терминала и увидел что после "эха" отправленных данных у меня всегда пропускается две строки ( как я Б***Ь сразу внимания не оратил)... вобщем пошурстив по функциям класса я наткнулся на trim()  которая подчищает все пробелы в String  и вуалявсе работает))) Всем спасибо... простие новичка есль достал кого))) но я ведь не со зла)))

А вот и рабочий код)))

void setup(){
  Serial.begin(9600);
}
void loop(){
String data;
if (Serial.available()>0)
  {
    data = Serial.readString();
    data.trim();
    Serial.println(data);
    if (data == "23"){Serial.println("Vasabi");}
  }
}

P.S.Может кто подскажет откуда лишние данные взялись? хотя я пологаю что это  setTimeout();

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

fotorobot пишет:

P.S.Может кто подскажет откуда лишние данные взялись? хотя я пологаю что это  setTimeout();

ты их туда(в сериал) отправил

fotorobot
Offline
Зарегистрирован: 07.11.2016

не... у меня в потоке "данные" а в приемник приходит что то наверно такое "данные   "  и я не могу понять до конца откуда лишнее бедется... вот и подумал что после передачи данных до таймаута он всю "тишину" записывает в буфер... надо попробовать сосчитать за сколько по времени заполнится буфер в 64кб на скорости 9600 и вбить в таймаут, может чего и выйдет)))

fotorobot
Offline
Зарегистрирован: 07.11.2016

попробовал Serial.setTimeout(ms); вещь хороша только от проблемы не избавляет)))