Вебморда фактически состоит из двух файлов - скрипт, который зажигает светодиоды в зависимости от аргумента и 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