Stap 1: Code voor de platform
node.js op de Edison
Ik gebruikte een eenvoudige node.js toepassing voor het programma. Niet zeer geavanceerde; Ik schreef het al in-lijn, maar het deed alles wat we wilden. De code is in eerste instantie ingeschakeld van een blauwe LED zodat het systeem werkte en opzetten van een webserver die de basis HTML-pagina voorgeschoteld. Deze pagina geopend een socketverbinding web naar de server en was in staat sommige opdrachten naar het systeem verzenden.
De webpagina werd net voor het testen, dus was niet erg verfijnd. Het had drie knoppen voor elk van de opdrachten en de antwoorden die net opdrachten teruggestuurd waren zou melden. De Edison moet worden aangesloten op de wifi beschikbaar. Dit werd gedaan met behulp van de ssh-verbinding in de XDK. Dit is heel makkelijk en moet alleen worden gedaan eenmaal; het zal het herinneren van de verbinding. Als het systeem is uitgeschakeld en opnieuw opgestart, zal de toepassing automatisch opstarten weer. Zodra gestart, konden verschillende mensen verbinden met hun smartphone browser en stuur een bericht naar het draaien van de draaitafel. Eenvoudig maar aangenaam demo.
Het is gemakkelijk om het openen van een webserver met behulp van de module 'http'; het hoefde niet elke routering faciliteit, zoals we waren net een enkele pagina serveren. Die pagina is geladen in een tekenreeks, 'mainPage', en geretourneerd wanneer de browser wordt geleid naar de url, 'localhost:1337'. Als andere bibliotheken nodig zijn, worden deze toegevoegd aan het configuratiebestand en de XDK naar de Edison downloaden zal voordat het programma wordt uitgevoerd, doet een 'npm install'.
Webservice starten
var http = require('http');
var app = http.createServer (function (req, res) {}
'Gebruik streng';
res.writeHead (200, {'Content-Type': ' text/html "});
res.End(mainPage);
}) .listen(1337);
console.log ("Web luistert op poort 1337");
De web-aansluiting gebruikte code op te halen van de drie verschillende berichten. De commando's 'a' en 'b' werden gebruikt om te schakelen van de motoren, 'c' gewend was zet het systeem in de modus 'Centreren aanpassing'. Ik gebruikte de 'socket.io'-bibliotheek te openen van een web-listener socket.
Socket.io server maken
var io = require('socket.io')(app);
console.log ("eenvoudige socket.io berichten...");
Een gebeurtenis-handler 'verbinding' sluit aan op de server
io.on ('verbinding', functie (aansluiting) {}
'Gebruik streng';
console.log ('een gebruiker verbonden');
Straalt een evenement samen met een bericht
socket.emit verbonden (' ', 'Welkom');
Een gebeurtenis-handler 'bericht' sluit aan op de aansluiting / / a en b opdrachten zal komen met een numeriek parameter voor de rotatie
socket.on ('message', functie (msg) {}
console.log ('bericht-->' + msg);
var args = msg.split("");
var delta = parseInt(args[1]);
console.log ("waarde:" + delta);
Als (delta! = 0) {}
switch(args[0]) {}
Case "a":
Rotate(motorA, Delta);
breken;
Case "b":
Rotate(motorB, Delta);
breken;
Case "c":
Centre();
breken;
standaard:
standaard code blok, niets doen
}
}
socket.emit ('message', msg);
});
De motoren zijn ingesteld met deze code voor het instellen van de verbinding en de snelheid; Hiermee worden de pinnen die de motor is verbonden met en de snelheid van de beweging. De nummers zijn de pinnen getoond op het bord van de uitbreiding.
var Uln200xa_lib = require('jsupm_uln200xa');
Instantiëren van een stappenmotor op een ULN200XA Darlington Motor Driver
Dit werd getest met de Grove gericht stap Motor met chauffeur
Maak een ULN2003XA stepper objecten
var motorA = nieuwe Uln200xa_lib. ULN200XA (4096, 8, 9, 10, 11);
var motorB = nieuwe Uln200xa_lib. ULN200XA (4096 4, 3, 5, 6);
motorA.angle = 0;
motorB.angle = 0;
var setSpeed = functie (motor, snelheid) {}
motor.setSpeed(speed); 5 rPMs
}
Wanneer de opdrachten 'a' en 'b' komen ze gebruiken de parameter in te stellen hoeveel van een hoek om te zetten; negatieve delta hoek wordt gebruikt om de richting omkeren. Deze functie wordt aangeroepen vanuit de web-socket code wanneer een bericht binnenkomt. De stappenmotor neemt een waarde van 4096 te schakelen één volledige omwenteling. Het zou waarschijnlijk dit logischer beurt worden in een hoek in graden.
var draaien = functie (motor, delta) {}
Als (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;
}
Toen de 'c' opdracht aankwam, zet ik het systeem in een instelfunctie center, waar ik kon gebruiken de joystick te bewegen dat de twee motoren aan een set beginpositie. De X- en Y-bewegingen komen overeen met elke motor. Een eenvoudige druk op de knop werd gebruikt om terug te keren naar de normale modus.
De houwer dag code is op mijn GitHub pagina's. Het kan niet in een bijzonder nette staat, maar nuttig kan zijn voor het bekijken van het hele ding. https://github.com/happyt/Edison-platform