Paso 1: Código para la plataforma
node.js en el Edison
Usé una aplicación simple de node.js para el programa. No muy sofisticado; Lo escribí todo en línea, pero hizo todo lo que queríamos que. El código inicialmente encendido de un LED azul para mostrar el sistema estaba trabajando, a continuación, configura un servidor web que sirve la página html básico. Esta página abre una conexión de socket de la web al servidor y fue capaz de enviar algunos comandos al sistema.
La página web fue sólo para probar, así que no muy sofisticado. Tenía tres botones para cada uno de los comandos y sería registrar las respuestas que igual eran comandos recuperados. El Edison debe conectarse a la Wi-Fi disponible. Esto fue hecha usando el ssh conexión en el XDK. Esto es bastante fácil y sólo debe hacerse una vez; recordará la conexión. Si el sistema es apagado y reiniciar la aplicación automáticamente pondrá en marcha otra vez. Una vez iniciado, varias personas pueden conectar con el navegador de su teléfono inteligente y envíe un mensaje para girar la placa giratoria. Versión parcial de programa simple pero agradable.
Es fácil abrir un servidor web utilizando el módulo de 'http'; no necesita ninguna instalación de enrutamiento, como que estábamos sirviendo a una sola página. Esa página fue cargada en una cadena, 'Página principal' y regresó cuando el navegador se dirige a la url 'localhost:1337'. Si se necesitan otras bibliotecas, que se agregan al archivo de configuración y el XDK descarga a la Edison antes de ejecutar el programa, haciendo un 'MNP instalar'.
Servicio web de inicio
http var = require('http');
aplicación del var = http.createServer ({función (req, res)
'usar terminante';
res.writeHead (200, {'Content-Type': ' texto/html '});
res.end(mainPage);
.listen(1337)});
Console.log ("Web escucha en el puerto 1337");
La web utiliza código para recoger los tres mensajes diferentes. Los comandos 'a' y 'b' fueron utilizado para encender los motores, 'c' fue utilizado para poner el sistema en modo de 'centro de ajuste'. Utilicé la biblioteca 'socket.io' para abrir un agente de escucha de web Sockets.
Crear servidor de socket.io
var io = require('socket.io')(app);
Console.log ("socket.io Simple mensajería...");
Adjuntar un controlador de eventos de 'connection' para el servidor
IO.on ('conexión', {} de la función (zócalo)
'usar terminante';
Console.log ('un usuario conectado');
Emite un evento junto con un mensaje
Socket.Emit ('conectado', 'Bienvenido');
Asociar un 'mensaje' controlador de eventos a la toma / / a y los comandos b vendrá con un parámetro de número de la rotación
Socket.on ('mensaje', función (msg) {}
Console.log ('mensaje-->' + msg);
args var = msg.split("");
delta de var = parseInt(args[1]);
Console.log ("valor:" + delta);
Si (delta! = 0) {}
{Switch(args[0])}
caso "a":
Rotate(motora, Delta);
rotura;
caso "b":
Rotate(MotorB, Delta);
rotura;
caso "c":
Centre();
rotura;
por defecto:
por defecto el código del bloque, no
}
}
Socket.Emit ('mensaje', msg);
});
Los motores están configurados con este código para configurar la conexión y velocidad; Esto fija los pines que está conectado el motor y la velocidad de movimiento. Los números son las patillas en la tarjeta de expansión.
var Uln200xa_lib = require('jsupm_uln200xa');
Crear una instancia de un motor de pasos en un controlador de Motor de Darlington ULN200XA
Esto fue probado con el Grove orientado paso Motor con controlador
Crear instancias de un objetos de paso a paso ULN2003XA
motorA de var = nuevo Uln200xa_lib. ULN200XA (4096, 8, 9, 10, 11);
motorB var = nuevo Uln200xa_lib. ULN200XA (4096, 4, 3, 5, 6);
motorA.angle = 0;
motorB.angle = 0;
setSpeed var = {} de la función (velocidad del motor,)
motor.setSpeed(speed); 5 RPM
}
Cuando los comandos 'a' y 'b' llegar utilizan el parámetro para establecer cuánto de un ángulo a; ángulo negativo delta se utiliza para invertir la dirección. Esta función se llama desde el código de toma de la web cuando llega un mensaje. El motor paso a paso toma un valor de 4096 para una rotación completa. Que probablemente sea más lógico giro en un ángulo en grados.
Gire el var = {} de la función (motor, delta)
Si (delta > 0) {}
motor.setDirection (Uln200xa_lib. ULN200XA. DIR_CW);
} else {}
motor.setDirection (Uln200xa_lib. ULN200XA. DIR_CCW);
}
motor.stepperSteps(Math.abs(delta));
motor.Angle += delta;
}
Cuando llegó el comando 'c', pongo el sistema en un modo de ajuste del centro, donde podía usar el joystick para mover la que posición de arranque de dos motores a un conjunto. Los movimientos X e Y corresponden a cada motor. Un simple botón se utiliza para volver al modo normal.
El código de día hack es en mis páginas de GitHub. No puede estar en un estado especialmente ordenado, pero puede ser útil para ver toda la cosa. https://github.com/happyt/Edison-Platform