Проблема связи processing и ардуино
- Войдите на сайт для отправки комментариев
Вс, 28/02/2016 - 09:47
Здравствуйте.
В одном скетчи есть две функции посылки команды в порт, для управления ардуино. Первая ручная, работает, ввожу например "а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 = ""; }}}
помогите разобраться, почему вторая функция не хочет вертеть камерой.
А тут форум что, не работает?
А тут форум что, не работает?
форум завален работой - не до тебя
помогите разобраться, почему вторая функция не хочет вертеть камерой.
Как именно она не вертит? Как должна вертеть?
ошибка
:)) Юмористы - форум завален, за 2 недели 2 записи, и то не по теме.
из скетча ардуины видно, что буквы-команды направления вращения, а цифры-значение, на которое надо повернуть. В ардуино скетч работает правильно, проверял с помощью терминала. Дабы выявить ошибку, поставил Franson GpsGate 2.6, чтоб посмотреть разницу между командами функций ручного режима и автомата, и ардуина заработала как надо. И вот тут я совсем завис, не понимаю, почему в одном случае работает, а в другом нет. Пробовал разные тайминги - не помогло. Пока настраиваю пид-регулятор управлением камерой, но потом всё-же придется решать проблему. Дайте хотя бы напрвление, в котором копать.
Цитирую: "Вторая функция автоматическая не работает. Всегда поворачивает на один шаг.". Смотрим текст, там поворот в двух направлениях по одному шагу. При этом написано "Всегда поворачивает на один шаг". Так как всё таки? Поворачивает или нет? Как именно "не работает"?
Поворот на один шаг это заметно? Может сделать на 10 шагов, например, или на те же 100?
Извените, действительно не поятно написал. Должна поворачивать на один шаг по горизонтали и на один шаг по вертикали, если соответствует условиям. Но не поворачивает вообще ни куда, без Franson GpsGate 2.6.
Первый и второй варианты различаются только количеством команд.
Сначала попробовать сделать второй вариант аналогично первому, т.е. поворот только в одной плоскости. Далее, если поворот делать в двух плоскостях, то увеличить задержку между отправкой второй команды до секунд. Но это вроде и так очевидно.
В скетче Ардуино сравнение некорректное, надо <= 122. Иначе команда 'z' не будет работать (не надо писать, что команда z тебе не нужна, мне пофиг)
Насчет больше или равно согласен, но только для тех, кто хочет использовать полный алфавит, но тогда можно переделать, чтобы команды были слова, а не последняя буква в строке. (это все отступления). Паузы между командами я менял до 2000 - ничего не меняется. У меня вообще уже идеи кончились. И похоже, дело вообще не в этих функциях, а в чем, даже предположить не могу. Сейчас проверяю, как данные обрабатываюся в порту. Ведь через виртуальный порт работает замечательно, а напрямую - ни в какую.
Насчет больше или равно согласен, но только для тех, кто хочет использовать полный алфавит, но тогда можно переделать, чтобы команды были слова, а не последняя буква в строке. (это все отступления).
Хочется ходить по граблям, не вопрос.
По поводу остального, кроме задержек у меня идей нет, увы. Там нужно копать на месте, издалека не видно.
Самый правильный вариант отладки в подобном случае, это ардуина читает все приходящее и отсылает обратно в порт. А вы уж в процессинге сравнивайте, от чего то, что хотели отправить не сошлось с тем, что реально прочитала ардуина. Кстати, последние версии процессинга(или явы) что то поменяли в работе со строками. Аналогично работавший когда то скетч руливший ардуиной внезапно при восстановлении проекта работать перестал (хотя конечно возможно и аффтор накосячил утеряв релизный скетч).
Такая проблемма, как можно вывести показания температуры и влажности с датчика dht11 в процессинг????
Кто-то сталкивался с такой работой? Нужен скетч, выводит только одно из двух, дипломная работа горит...
.