Stap 8: De kern
Laten we eens samenvatten: we hebben onze database met de locatiegegevens voor iedere gebruiker opgevuld, we hebben gemaakt de knooppunt-rood-werkstromen die reageert op elke nieuwe positie die zij ontvangt. Wij ook de LEDs hebt aangesloten en shift registreert tot de kern van de Spark, zodat ze kunnen worden gecontroleerd door het, en hebben we alles in een multiplex-structuur die binnen de klok worden zal. Niet slecht hè?
Nu vrijwel alles klaar is, is het tijd code toevoegen aan de kern!
Code toe te voegen aan de kern
De kern van de vonk kan worden gebruikt als elke andere Arduino-achtige Raad (behalve het maakt gebruik van een web IDE standaard). In ons geval moeten we echter profiteren van een specifiek kenmerk van de kern: API-aanroepen. In een paar woorden hierdoor aan Core "bloot" de methoden die zij wil, wat betekent dat ze kunnen worden aangeroepen met behulp van de Spark REST API.
Ga naar http://www.spark.io en volg de instructies om uw Core setup voor de eerste keer. Zodra u klaar bent, moet u zitten kundig voor toegang tot de IDE (screenshot genomen van de vonk documentatie website)
Je zou kunnen herinneren de Token en Core-ID hebben we over eerder gesproken: nu is het moment om van onze Spark account ophalen en ze invoeren in de Spark functie knooppunt-rood module. We hadden besloten om onze "led" functie aanroepen, dus hier de corresponderende code op de kern is:
void setup() { //Register our Spark function here<br> Spark.function("led", ledControl);<br> // Configure the pins to be outputs pinMode(SER_Pin, OUTPUT); pinMode(RCLK_Pin, OUTPUT); pinMode(SRCLK_Pin, OUTPUT);<br> cycle()<br>}
Dit vertelt de kern dat wanneer iemand het een aanroep naar de "led" functie stuurt, het moet het uitvoeren van de functie "ledControl".
De functie van de lus is leeg.
We moeten ook toevoegen van de code waarmee de verschuiving registreert. Dit was sterk geïnspireerd door de eerder genoemde bildr-artikel
void clearRegisters(){ for(int i = numOfRegisterPins - 1; i >= 0; i--){ registers[i] = 0; }} void writeRegisters(){ digitalWrite(RCLK_Pin, LOW); for(int i = numOfRegisterPins - 1; i >= 0; i--) { digitalWrite(SRCLK_Pin, 0); int val = registers[i]; digitalWrite(SER_Pin, val); digitalWrite(SRCLK_Pin, 1); } digitalWrite(RCLK_Pin, HIGH);}
//set an individual pin HIGH or LOW void setRegisterPin(int index, int value){ registers[index] = value; }
void cycle(){ for(int i = 0 ; i < 30 ; i ++) { clearRegisters(); setRegisterPin(i, 1); writeRegisters(); delay(500); } }
Tot slot, hier is de code voor de functie ledControl
int ledControl(String command){ Serial.println(command) ;int pinNumber = 0 ; int pers = 1 ;int offset = 0 ;clearRegisters();String personne = command.substring(0,command.indexOf(',')); String lieu = command.substring(command.indexOf(',')+1,command.length());if(lieu == "maison") {offset = 0 ; }else if(lieu == "work") { offset = 5 ; }else if(lieu == "friend"){ offset = 10 ;}else if(lieu == "mosk"){ offset = 15 ;}else if(lieu == "restaurant"){ offset = 20 ;}else if(lieu == "doctor"){ offset = 25 ;}else if(lieu == "shopping"){ offset = 30 ;}else if(lieu == "family"){ offset = 35 ;}else if(lieu == "doctor"){ offset = 40 ;}else if(lieu == "city"){ offset = 45 ;}else if(lieu == "abroad"){ offset = 50 ;}else if(lieu == "unknown"){offset = 55 ;}if(personne=="Alya"){pers = 1 ; }else if(personne == "Assya"){pers = 2 ; }else if(personne == "Nabila"){ pers = 3 ;}else if(personne == "Firdos"){pers = 4 ; }else if(personne == "Minaz"){pers = 5 ; }pinNumber = offset + pers ;setRegisterPin(pinNumber, 1);writeRegisters();return 1;}