Вебморда фактически состоит из двух файлов - скрипт, который зажигает светодиоды в зависимости от аргумента и HTML страница.
При нажатии на кнопку вебморды запускается скрипт с нужным параметром, а при отпускании - скрипт с аргументом 'stop'
Скрипт сделан для роутера TP-Link 3040
Для того чтобы отключить штатные триггеры диодов (на данном роутере) надо выгрузить и обратно загрузить модуль leds-gpio:
rmmod leds-gpio insmod leds-gpio
Для других контроллеров GPIO надо заменить команды :)
вот скрипт /www/cgi-bin/ctrl_led:
а вот вебстраница /www/edem.html:
<!DOCTYPE html> <html> <head> <title>Relay control</title> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <script type="text/javascript"> function command(action) { url="/cgi-bin/ctrl_led?command="+action; url=url+"&fuie=" + Math.random(); var xmlhttp=new XMLHttpRequest(); xmlhttp.open("GET",url,false); xmlhttp.send(); } function Init () { var left_button = document.getElementById ("left"); if (left_button.addEventListener) { // all browsers except IE before version 9 left_button.addEventListener ("mousedown", function () {command ('left')}, false); left_button.addEventListener ("mouseup", function () {command ('stop')}, false); } else { if (left_button.attachEvent) { // IE before version 9 left_button.attachEvent ("onmousedown", function () {command ('left')}); left_button.attachEvent ("onmouseup", function () {command ('stop')}); } } var right_button = document.getElementById ("right"); if (right_button.addEventListener) { // all browsers except IE before version 9 right_button.addEventListener ("mousedown", function () {command ('right')}, false); right_button.addEventListener ("mouseup", function () {command ('stop')}, false); } else { if (right_button.attachEvent) { // IE before version 9 right_button.attachEvent ("onmousedown", function () {command ('right')}); right_button.attachEvent ("onmouseup", function () {command ('stop')}); } } var forward_button = document.getElementById ("forward"); if (forward_button.addEventListener) { // all browsers except IE before version 9 forward_button.addEventListener ("mousedown", function () {command ('forward')}, false); forward_button.addEventListener ("mouseup", function () {command ('stop')}, false); } else { if (forward_button.attachEvent) { // IE before version 9 forward_button.attachEvent ("onmousedown", function () {command ('forward')}); forward_button.attachEvent ("onmouseup", function () {command ('stop')}); } } } </script> </head> <body onload="Init()"> <button id="left" type="button">Left</button> <button id="right" type="button">Right</button> <button id="forward" type="button">Forward</button> </body> </html>
Схема подключения моторов:
http://farm5.static.flickr.com/4026/4321991080_867e7afb5f_o.jpg
Ссылки:
http://habrahabr.ru/post/151982/
http://habrahabr.ru/post/76128/ - тут делают робота на базе атмега… нас интересует схема подключения драйверов мотора L293D