Weasley klockan (8 / 9 steg)
Steg 8: Kärnan
Låt oss sammanfatta: vi har fyllt upp vår databas med lokaliseringsuppgifter för varje användare, har vi skapat den nod-röd arbetsflöden som reagerar på varje ny plats den tar emot. Vi har även trådbundna lysdioderna och SKIFT register till Spark kärnan så att de kan styras av det, och vi har lagt allt i en plywood som kommer att vara inne klockan. Inte dåligt va?
Nu när i stort sett allt är redo, är det dags att lägga till kod i kärnan!
Lägga till koder i kärnan
Spark kärnan kan användas som alla andra Arduino-liknande styrelse (förutom att den använder en webb IDE som standard). I vårt fall men vi måste dra nytta av en specifik funktion i kärnan: API-anrop. I några ord kan detta Core att "avslöja" de metoder som man vill, vilket innebär att de kan anropas med Spark REST API.
Gå till http://www.spark.io och följ instruktionerna för att installera din kärna för första gången. När du är klar, bör du kunna komma åt IDE (skärmdump från webbplatsen gnista dokumentation)
Ni kanske minns den Token och Core ID vi talat om tidigare: nu är det dags att hämta dem från vår gnista konto och ange dem i modulen Spark funktion nod-röd. Vi hade beslutat att kalla vår funktion "ledde" så här är motsvarande kod på kärnan:
void setup()
{//Register vår gnista fungera här < br > Spark.function ("ledde", ledControl); < br > / / Configure stiften för att vara utgångar
pinMode (SER_Pin, OUTPUT);
pinMode (RCLK_Pin, OUTPUT);
pinMode (SRCLK_Pin, utdata). < br > < br > cycle()}
Detta säger kärnan att när någon skickar det ett anrop till funktionen "led", den bör utföra funktionen "ledControl".
Loop funktion är tom.
Vi måste också lägga till koden för att kontrollera skiftet register. Detta blev mycket inspirerad från bildr artikeln nämnde tidigare
void clearRegisters() {
för (int jag = numOfRegisterPins - 1; i > = 0; i--) {
register [i] = 0;
}
}
void writeRegisters() {
digitalWrite (RCLK_Pin, låg);
för (int jag = numOfRegisterPins - 1; i > = 0; i--)
{
digitalWrite (SRCLK_Pin, 0);
int val = register [i];
digitalWrite (SER_Pin, val);
digitalWrite (SRCLK_Pin, 1);
}
digitalWrite (RCLK_Pin, hög);
}
ställa in en individuell pin högt eller lågt
void setRegisterPin (heltal index, int värde) {
register [index] = värde;
}
void cycle() {
för (int jag = 0; jag < 30; i ++)
{
clearRegisters();
setRegisterPin (i, 1);
writeRegisters();
Delay(500);
}
}
Slutligen, här är koden för funktionen ledControl
int ledControl (String kommando)
{
Serial.println(Command); int pinNumber = 0;
int pers = 1;
int offset = 0;
clearRegisters();
Sträng personne = command.substring(0,command.indexOf(','));
Sträng lieu = command.substring(command.indexOf(',')+1,command.length());
om (lieu == "maison")
{
offset = 0;
}
annars om (lieu == "arbete")
{
offset = 5;
}
annars om (lieu == "vän")
{
offset = 10;
}
annars om (lieu == "mosk")
{
offset = 15.
}
annars om (lieu == "restaurant")
{
offset = 20;
}
annars om (lieu == "läkare")
{
offset = 25;
}
annars om (lieu == "shopping")
{
offset = 30.
}
annars om (lieu == "familj")
{
offset = 35.
}
annars om (lieu == "läkare")
{
offset = 40;
}
annars om (lieu == "stad")
{
offset = 45;
}
annars om (lieu == "utomlands")
{
offset = 50;
}
annars om (lieu == "okänt")
{
offset = 55.
}
IF(personne=="Alya")
{
Pers = 1;
}
annars om (personne == "Assya")
{
pers = 2;
}
annars om (personne == "Nabila")
{
Pers = 3;
}
annars om (personne == "Kira")
{
Pers = 4;
}
annars om (personne == "Minaz")
{
Pers = 5;
}
pinNumber = offset + personer;
setRegisterPin (pinNumber, 1);
writeRegisters();
tillbaka 1.
}