bash.im ithappens.me zadolba.li
5668

Java (не) рулит

Купили Lego Mindstorms. Конструктор такой, чтобы роботов мастерить: двигатели, датчики, контроллер на Атмеле. Есть программа стандартная, эдакий MS Robotics Studio для пятилетних. Всё бы ничего, но визуальное программирование — не для сложных алгоритмов. Давай копаться. Нашли в недрах паутины замечательную вещь — Java-платформу для этих самых контроллеров. Не прелесть ли? Жизнь, казалось бы, облегчилась в разы. Даже многопоточная обработка есть. Якобы. Тут-то веселье и началось.

Копнули документацию. Каждому типу датчика назначен родной порт по умолчанию. Касание — первый, свет — второй, звук — третий, расстояние — четвёртый. Как же так вышло, что именно на четвёртом порту под новой прошивкой все ультразвуковые датчики расстояния не работают? Может, я что-то делаю не так? Воткнул в четвёртый порт кнопку — работает. Воткнул ультразвуковой датчик — всё время расстояние 255 мм, и хоть убейся. Обидно, досадно, но ладно. Жить можно — едем дальше.

К слову, собирали мы с командой интеллектуальную машинку, способную проехать по трассе, не задевая бортики. Начали программировать движение. Я не зря боялся многопоточности! В основной поток я запихал рулевое управление с датчиками, в дополнительный — управление главным двигателем. Удивлению предела не было, когда первую секунду оно рулило, стоя на месте, вторую ехало вперёд, снося всё на своем пути, третью опять рулило, двигаясь по инерции. Меняешь приоритеты — или не едет, или не рулит. А казалось всё так безоблачно…

С тех пор я пишу на Java с оглядкой — вдруг что-нибудь переклинит?