Проблема связи processing и ардуино

Dmt
Offline
Зарегистрирован: 14.02.2016

Здравствуйте.

В одном скетчи есть две функции посылки команды в порт, для управления ардуино. Первая ручная, работает, ввожу например "а100", шаговик1 поворачивает камеру на 100 шагов.

  whichKey = key;
  comand += (char)whichKey; 
  text("comand: " + whichKey, 10, 190);
  if (whichKey == '\n') {
    myPort.write(comand);
    comand = "";
  }

Вторая функция автоматическая не работает. Всегда поворачивает на один шаг.

int up    = 119; int down = 115;
int right = 100; int left = 97;
String value;

value = "1" + '\n';
myPort.clear();
if(x>322){comand = (char)left;}
if(x<318){comand = (char)right;}
myPort.write(comand + value);
delay(2);
if(y>122){comand = (char)up;}
if(y<118){comand = (char)down;}
myPort.write(comand + value);
delay(2);

а это в ардуино принемет команды

void loop() {
 while (Serial.available() > 0) {
   inChar = Serial.read();
    if (isDigit(inChar)) {
      value += (char)inChar;
    }
    if(inChar > 64 && inChar < 122)comand += (char)inChar;
 
    if (inChar == '\n') {
      Serial.print("Value:");
      Serial.println(value.toInt());
      Serial.print("comand: ");
      Serial.println(comand);

for (int i=1; i <= value; i++){
          if(comand == "w") stepper.step (1, FORWARD,  DOUBLE);
          if(comand == "s") stepper.step (1, BACKWARD, DOUBLE);
          if(comand == "a") stepper2.step(1, FORWARD,  DOUBLE);
          if(comand == "d") stepper2.step(1, BACKWARD, DOUBLE);
}
      comand = value = "";
}}}  

помогите разобраться, почему вторая функция не хочет вертеть камерой.

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

А тут форум что, не работает?

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

Dmti пишет:

А тут форум что, не работает?

форум завален работой - не до тебя

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Dmt пишет:

помогите разобраться, почему вторая функция не хочет вертеть камерой.

Как именно она не вертит? Как должна вертеть?

 

Dmt
Offline
Зарегистрирован: 14.02.2016

ошибка

 

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

:)) Юмористы - форум завален, за 2 недели 2 записи, и то не по теме.

Как именно она не вертит? Как должна вертеть?

из скетча ардуины видно, что буквы-команды направления вращения, а цифры-значение, на которое надо повернуть. В ардуино скетч работает правильно, проверял с помощью терминала. Дабы выявить ошибку, поставил Franson GpsGate 2.6, чтоб посмотреть разницу между командами функций ручного режима и автомата, и ардуина заработала как надо. И вот тут я совсем завис, не понимаю, почему в одном случае работает, а в другом нет. Пробовал разные тайминги - не помогло. Пока настраиваю пид-регулятор управлением камерой, но потом всё-же придется решать проблему. Дайте хотя бы напрвление, в котором копать.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Цитирую: "Вторая функция автоматическая не работает. Всегда поворачивает на один шаг.". Смотрим текст, там поворот в двух направлениях по одному шагу. При этом написано "Всегда поворачивает на один шаг". Так как всё таки? Поворачивает или нет? Как именно "не работает"?

Поворот на один шаг это заметно? Может сделать на 10 шагов, например, или на те же 100?

 

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

Извените, действительно не поятно написал. Должна поворачивать на один шаг по горизонтали и на один шаг по вертикали, если соответствует условиям. Но не поворачивает вообще ни куда, без Franson GpsGate 2.6.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Первый и второй варианты различаются только количеством команд.
Сначала попробовать сделать второй вариант аналогично первому, т.е. поворот только в одной плоскости. Далее, если поворот делать в двух плоскостях, то увеличить задержку между отправкой второй команды до секунд. Но это вроде и так очевидно.
В скетче Ардуино сравнение некорректное, надо <= 122. Иначе команда 'z' не будет работать (не надо писать, что команда z тебе не нужна, мне пофиг)

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

Насчет больше или равно согласен, но только для тех, кто хочет использовать полный алфавит, но тогда можно переделать, чтобы команды были слова, а не последняя буква в строке. (это все отступления). Паузы между командами я менял до 2000 - ничего не меняется. У меня вообще уже идеи кончились. И похоже, дело вообще не в этих функциях, а в чем, даже предположить не могу. Сейчас проверяю, как данные обрабатываюся в порту. Ведь через виртуальный порт работает замечательно, а напрямую - ни в какую.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Dmti пишет:

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

Хочется ходить по граблям, не вопрос.

По поводу остального, кроме задержек у меня идей нет, увы. Там нужно копать на месте, издалека не видно.

ourlive
Offline
Зарегистрирован: 26.05.2012

Самый правильный вариант отладки в подобном случае, это ардуина читает все приходящее и отсылает обратно в порт. А вы уж в процессинге сравнивайте, от чего то, что хотели отправить не сошлось с тем, что реально прочитала ардуина. Кстати, последние версии процессинга(или явы) что то поменяли в работе со строками. Аналогично работавший когда то скетч руливший ардуиной внезапно при восстановлении проекта работать перестал (хотя конечно возможно и аффтор накосячил утеряв релизный скетч).

Sudsudo
Offline
Зарегистрирован: 10.10.2017

Такая проблемма, как можно вывести показания температуры и влажности с датчика dht11 в процессинг???? 

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

strarbit
Offline
Зарегистрирован: 12.06.2016

.