всем привет. значит есть проблема, и похоже она связана с autoreset, но я еще начинаю грешить на Troyka Shield потому что больше ничего не могу придумать ) итак. скетч загруженный в мою arduino uno rev3 принимает параметры и в зависимости от них крутит пару сервов как нужно. на arduino сверху прикреплена Troyka Shield и к ней подключены сервы. arduino подключен USB кабелем в роутер TP-link MR3020 который прошит OpenWRT. после установки драйвера она там определяется как /dev/ttyACM0 по идее отправить команду так: # echo y > /dev/ttyACM0 она должна нормально отработать и один серв сделать свою работу. но не работает пока в отдельном ssh окне не сделать вот так: # cat /dev/ttyACM0 то есть попросту открыть порт. после этого все сразу начинает работать.. об эту проблему уже много копий сломано и есть разные варианты решений http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection - резистор припаять или кондер, в случае Uno и прочие изуверства над какимито дорожками на плате.. есть и софтовые решения. например можно проинициализировать порт с помощью команды # stty -F /dev/ttyACM0 raw speed 115200 многие пишут что это им помогает. но не мне я перепробовал разные варианты ключей и так и не нашел нужного, который бы работал.. видимо поэтому мой php код (используется библиотека отсюда http://www.phpclasses.org/browse/file/17926.html) Код (Text): # cat 2.php <?php include "php_serial.class.php"; $serial = new phpSerial; $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(115200); $serial->deviceOpen(); $serial->sendMessage("y"); sleep(1); $read = $serial->readPort(); print $read; $serial->deviceClose(); ?> тоже работaет только тогда когда в другом окне открыт порт с помощью cat может чтото подскажете ?
сударь, если бы такая была, я бы ничего сюда и не написал я вот что нашел еще: http://www.eevblog.com/forum/beginners/arduino-uno-as-isp/
Просто вы написали, что у вас Uno Rev.3, а на этой ревизии перемычка должна быть. У вас точно такая плата? Если не такая, то можете прислать фото платы?
простите, невнимательно читал. вот такое может и есть. где их искать и что с ними потом делать ? резать дорожки не хочу.. но отдельно джампера точно нету. тем более сверху Тройка Шилд - он наверняка свои 5 коп. добавляет..
Да, вы верно поняли. Хотя надо бы еще посмотреть с какой стороны от этой перемычки кнопка сброса и разъем ICSP.
ну все точно как на фотке, которую вы добавили выше.. ну с железным решением я понял, должно работать.. но почему не работает софтовое решение.. например: это проблема rev3 или Uno или мне так повезло ?
ооо вот что я нашел ! http://chiolina.wordpress.com/2012/11/23/51/ чуть изменил свой код php - 2 сек вместой 1 - чтобы наверняка с 1 почемуто не работает Код (Text): <?php include "php_serial.class.php"; $serial = new phpSerial; $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(115200); $serial->deviceOpen(); sleep(2); $serial->sendMessage("y"); $read = $serial->readPort(); print $read; $serial->deviceClose(); ?> код работает. только предварительно надо проинициализировать порт: #stty -F /dev/ttyACM0 raw speed 115200 потом запускаю сам скрипт: # php-cgi 2.php X-Powered-By: PHP/5.4.5 Content-type: text/html yn ver 0.15 Yes! 0 и тут есть небольшой глюк. в самом скрипте в порт ПЕРЕДАЕТСЯ символ y - на него реагирует один серв и отвечает Yes ! Код (Text): case 'y': ////////////////////////////////////////////////////////////////// Serial.print("Yes! "); Serial.println(ang); v_servo.write(60); delay(500); v_servo.write(20); delay(500); v_servo.write(60); readString = ""; ang = 0; c = '0'; delay(1000); break; это видно при выводе работы php скрипта, но выше есть строчка: yn ver 0.15 это отсюда: Код (Text): void setup() { h_servo.attach(9); v_servo.attach(10); //h_servo.write(80); //v_servo.write(45); Serial.begin(115200); Serial.println("yn ver 0.15"); это такую строчку выводит мой скетч при запуске - показывает версию скрипта ) но я специально добавил туда два символа - yn на y и на n регируют мои сервы. и получается что при выполнении скрипта 2.php он какимто образом ловит эти команды ! непонятно почему при чтении ИЗ порта происходит запись этих данных В этот же порт ? или как это еще можно объяснить.. UPD я хотел сказать, что при запуске скрипта серв выполняет сначала команды y и n - они есть в ВЫВОДЕ который скетч выводит. а потом выполняет команду y которая в самом скрипте. вот и вопрос - почему выполняются первые y и n ?
я не знаю как это назвать, но по поведению сервов - они реагируют на символы y и n, хотя эти символы ВЫВОДЯТСЯ на консоль, то есть СЧИТЫВАЮТСЯ из порта. я проверял - можно добавить несколько разный команд в Serial.println и они выполнятся ! непонятно почему так..