Introduction: ITTT Arduino Vulploeg Timer

In deze instructable leer je hoe je ene vulploeg timer kan maken om de tijden van vulploegers kan bijhouden. Het bestaat uit een keypad om gegeven in te voeren, een display om de gegeven te weergeven, 2 knoppen voor optellen en aftrekken en een RGB LED om duidelijker te maken wat je aan het doen bent. Door middel van de knoppen kun je heel makkelijk het aantal collie (=doosjes) tellen van de vulploegers en de tijd staren. Deze gegevens worden dan opgeslagen in een database. Als iemand klaar is met vullen stop je de tijd en zijn de resultaten te zien in een daarvoor ontwikkelde app.

Het apparaat dat ik hier maak staat ingesteld voor Kruidvat, maar het kan in principe ook voor ander bedrijven gebruikt worden.

Step 1: Benodigheden

Benodigdheden:

- 1x Arduino Uno

- 1x Wifi Shield (ESP8266)

- 1x 4x4 Keypad

- 1x 4 digit 7 segment display

- 2x Button

- 1x RGB LED

- 1x 9 Volt batterij

- 1x 9 Volt batterij adapter

- 1x Schakelaar

- 1x Speaker

- Jumper wires

- Draden met zachte kern

- Verschillende soorten weerstanden

- Krimpkous in verschillende maten

- Materiaal voor een behuizing

Het materiaal voor de behuizing kan van alles zijn. In mijn geval heb ik een pvc ventilatieschacht gebruikt.

Step 2: Bedrading

Nu is het tijd voor de bedrading.

RGB LED

Soldeer je RGB LED op een kleine printplaat met een weerstandje voor de 3 verschillende pootjes voor de kleuren. Maak aan het weerstandje een jumper wire vast om hem in je arduino te kunnen prikken. Aan de langste poot van het ledje maak je geen weerstandje vast alleen een jumper wire, deze gaat naar de GND op je arduino. De 3 verschillende inputs voor de kleuren gaan naar 3 analoge pinnen van je arduino. In mijn code heb ik gekozen voor rood = pin 5, groen = pin 11, blauw = pin 12.

9V Batterij

De 9V power supply heeft 2 draden een rode en een zwarte. De rode draad moet je in het midden doorknippen en de schakelaar er tussen solderen. Vervolgens kun je de stekker in je arduino steken en met de schakelaar je arduino aan of uit zetten.

WIFI Shield

Het Wifi Shield is net zo groot als je arduino. Je kunt hem gewoon boven op je arduino prikken.

Knoppen

Aan de 2 knoppen maak je 2 jumper wires vast. Links een die naar GND gaat en rechts 1 die naar een pin op je arduino gaat. In mijn code heb ik de plus knop verbonden aan pin 4 en de min knop aan pin 7

Speaker

Aan de speaker maak je aan 1 kant een jumper wire vast die naar GND gaat en de andere maak je van aan een analoge pin op je arduino. In mijn code heb ik gekozen voor pin 6

4 Digit 7 Segment Display

Je display heeft 4 verschillende pinnen; 5V, GND, DIO en CLK. Maak de 5v pin vast aan de 5V van je arduino. Maak de GND pin vast aan de GND van je arduino. De DIO en CLK moet je verbinden met 2 pinnen op je arduino. Ik heb gekozen voor CLK = pin 13 en DIO = pin 12.

Keypad

Het moeilijkste onderdeel is de 4x4 keypad. Deze kun je niet eenvoudig verbinden aan je arduino, je moet hier eerst een printplaat voor maken. De keypad heeft 8 verschillende output pinnen. Op de bovenstaande afbeelding kun je zien hoe je deze pinnen moet verbinden aan je printplaat De gele jumper wire onderaan het printbord steek je in de meest links output van je keypad, daarna komt oranje, wit, blauw, geel, oranje, wit en weer blauw. Als je dat gedaan hebt zitten alle 8 de output pinnen van je keypad vast aan je printplaat en steken er uit je printplaat 3 jumper wires. De rode is maak je vast aan de 5V van je arduino. De zwarte maak je vast aan de GND van je arduino en de groene maak je vast aan de A0 pin van je arduino.

Step 3: Arduino Code

De arduino heeft een stukje eigen code wat er voor zorgt dat de knoppen juist werken, het ledje gaat branden, de keypad werkt en het display de juiste getallen laat zien, maar er is ook een deel dat er voor moet zorgen dat dingen worden opgeslagen in een database. Deze code is niet in de arduino geprogrammeerd, maar in PHP bestanden die op een server staan. Dit deel van de code is puur het arduino gedeelte, de PHP code behandelen we in de volgende stap.

<p>#include "TM1637.h"<br>#include <softwareserial.h>
#include <sparkfunesp8266wifi.h></sparkfunesp8266wifi.h></softwareserial.h></p><p>#define CLK 12
#define DIO 13
#define TONE 6
#define R 5
#define G 10
#define B 11</p><p>const char mySSID[] = "..........."; //Je netwerk SSID
const char myPSK[] = "..........."; //Je netwerk password</p><p>ESP8266Server server = ESP8266Server(80);</p><p>const char destServer[] = "........."; //De server waar je PHP bestanden staan</p><p>TM1637 tm1637(CLK, DIO);
int8_t disp[] = {0x00, 0x00, 0x00, 0x00};
int VOLTAGES[16] = {288, 302, 316, 328, 360, 380, 403, 421, 474, 507, 549, 584, 702, 776, 879, 973};
String LETTERS = "ABCD";
char KEYS[16] = {
  '1', '2', '3', 'A',
  '4', '5', '6', 'B',
  '7', '8', '9', 'C',
  '*', '0', '#', 'D',
};</p><p>int previous;
int lastButtonState[2] = {HIGH, HIGH};
int buttons[2] = {7, 4};
int previousKeypad;</p><p>bool isEdit;
int editMode;
bool hasInternet;
String editValue;</p><p>int cr;
int cg;
int cb;</p><p>int id;
int values[4] = {0, 0, 0, 0};
int uuid[4] = {0, 0, 0, 0};
bool users[4] = {false, false, false, false};</p><p>//Zet alle variables naar de default waardes en initialize en connect het wifi shield.</p><p>void setup() {
  tm1637.init();
  tm1637.set(BRIGHT_DARKEST);</p><p>  pinMode(4, INPUT);
  pinMode(TONE, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(A0, INPUT);</p><p>  pinMode(R, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(B, OUTPUT);</p><p>  Serial.begin(9600);</p><p>  id = 0;
  editValue = "";
  editMode = 0;
  hasInternet = true;</p><p>  cr = 50;
  cg = 50;
  cb = 50;</p><p>  initializeESP8266();
  connectESP8266();
  displayConnectInfo();
}</p><p>void initializeESP8266() {
  // esp8266.begin() verifies that the ESP8266 is operational
  // and sets it up for the rest of the sketch.
  // It returns either true or false -- indicating whether
  // communication was successul or not.
  // true
  int t = esp8266.begin();
  if (t != true) {
    Serial.println(F("Error talking to ESP8266."));
    return;
  }
  Serial.println(F("ESP8266 Shield Present"));
}</p><p>void connectESP8266()
{
  // The ESP8266 can be set to one of three modes:
  //  1 - ESP8266_MODE_STA - Station only
  //  2 - ESP8266_MODE_AP - Access point only
  //  3 - ESP8266_MODE_STAAP - Station/AP combo
  // Use esp8266.getMode() to check which mode it's in:
  int retVal = esp8266.getMode();
  if (retVal != ESP8266_MODE_STA)
  { // If it's not in station mode.
    // Use esp8266.setMode([mode]) to set it to a specified
    // mode.
    retVal = esp8266.setMode(ESP8266_MODE_STA);
    if (retVal < 0)
    {
      Serial.println(F("Error setting mode."));
      //errorLoop(retVal);
    }
  }
  Serial.println(F("Mode set to station"));</p><p>  // esp8266.status() indicates the ESP8266's WiFi connect
  // status.
  // A return value of 1 indicates the device is already
  // connected. 0 indicates disconnected. (Negative values
  // equate to communication errors.)
  retVal = esp8266.status();
  if (retVal <= 0)
  {
    Serial.print(F("Connecting to "));
    Serial.println(mySSID);
    // esp8266.connect([ssid], [psk]) connects the ESP8266
    // to a network.
    // On success the connect function returns a value >0
    // On fail, the function will either return:
    //  -1: TIMEOUT - The library has a set 30s timeout
    //  -3: FAIL - Couldn't connect to network.
    retVal = esp8266.connect(mySSID, myPSK);
    if (retVal < 0)
    {
      Serial.println(F("Error connecting"));
      color(50, 0, 0);
      hasInternet = false;
      return;
    }</p><p>    hasInternet = true;
  }
}</p><p>void displayConnectInfo()
{
  char connectedSSID[24];
  memset(connectedSSID, 0, 24);
  // esp8266.getAP() can be used to check which AP the
  // ESP8266 is connected to. It returns an error code.
  // The connected AP is returned by reference as a parameter.
  int retVal = esp8266.getAP(connectedSSID);
  if (retVal > 0)
  {
    Serial.print(F("Connected to: "));
    Serial.println(connectedSSID);
  }</p><p>  // esp8266.localIP returns an IPAddress variable with the
  // ESP8266's current local IP address.
  IPAddress myIP = esp8266.localIP();
  Serial.print(F("My IP: ")); Serial.println(myIP);
}</p><p>

//Check elke keer in de loop of er op de knoppen of het keypad gedrukt wordt, display de getallen en laat het ledje branden</p><p>void loop() {
  loopButton();
  loopKeyPad();</p><p>  convertToDisplay();
  tm1637.display(disp);</p><p>  analogWrite(R, cr);
  analogWrite(G, cg);
  analogWrite(B, cb);</p><p>  delay(50);
}</p><p>

//Check of er toetsen worden ingedrukt op de keypad en kijk of er een bepaalde combinatie toetsen wordt ingedrukt.</p><p>//Bijvoorbeeld A > * > 4 > 1 > * > om de waarde van A op 44 te zetten</p><p>void loopKeyPad() {</p><p>  int value = analogRead(A0);
  Serial.println(value);
  for (int i = 0; i < 16; i++) {
    if (abs(value - VOLTAGES[i]) < 6) {
      if (abs(previous - value) > 6) {
        char key = KEYS[i];
        id = isLetter(key) >= 0 ? isLetter(key) : id;
        if (isLetter(key) >= 0) {
          tone(TONE, 150 * (id + 1), 40);
          previousKeypad = key;
          color(50, 50, 50);
          break;
        }</p><p>        if (isLetter(previousKeypad >= 0)) {
          if (key == '*' and !isEdit) {
            isEdit = true;
            editMode = 0;</p><p>            //Debug code
            Serial.print("Start edit (value) mode for user: ");
            Serial.println(id);</p><p>            //            Tone(array(1250, 1500), 50, 100);</p><p>            tone(TONE, 1250, 50);
            delay(100);
            tone(TONE, 1500, 50);</p><p>            previousKeypad = key;
            color(0, 50, 0);
            break;
            //Sound for enable edit value
          } else if (key == '#' and !isEdit) {
            isEdit = true;
            editMode = 1;</p><p>            //Debug code
            Serial.print("Start edit (id) mode for user: ");
            Serial.println(id);</p><p>            //            Tone(array(1500, 1250), 50, 100);</p><p>            tone(TONE, 1500, 50);
            delay(100);
            tone(TONE, 1250, 50);</p><p>            previousKeypad = key;
            color(0, 0, 50);
            break;
            //Sound for enable edit id
          }
        }</p><p>        if (isEdit) {
          if (isDigit(key)) {
            editValue += key;
            //            Tone({750}, 5, 0);
            tone(TONE, 750, 5);
            if (editMode == 0) {
              values[id] = editValue.toInt();
            }</p><p>            //Debug code
            Serial.print("editValue =  ");
            Serial.println(editValue);</p><p>          }</p><p>          if (isLetter(key) >= 0) {
            isEdit = false;
            editValue = "";</p><p>            color(50, 50, 50);</p><p>            //Debug code
            Serial.print("A letter has been pressed during edit mode, end edit mode!");</p><p>          }</p><p>          if (key == '*') {
            if (editMode == 0) {
              isEdit = false;
              values[id] = editValue.toInt();
              editValue = "";</p><p>              //              Tone(array(1500, 1750), 50, 100);</p><p>              tone(TONE, 1500, 50);
              delay(100);
              tone(TONE, 1750, 50);</p><p>              //##Debug Code
              Serial.print("The amount for the user has been changed to: ");
              Serial.println(values[id]);
            } else if (editMode == 1) {
              isEdit = false;
              editValue = "";
              stopTime();
              color(50, 50, 50);
            }
          }</p><p>          if (key == '#') {
            if (editMode == 0) {
              isEdit = false;
              editValue = "";
              startTime();
              color(50, 50, 50);
            } else if (editMode == 1) {
              isEdit = false;
              uuid[id] = editValue.toInt();
              editValue = "";</p><p>              //              Tone(array(1250, 1000), 50, 100);</p><p>              tone(TONE, 1250, 50);
              delay(100);
              tone(TONE, 1000, 50);</p><p>              //##Debug Code
              Serial.print("The id for the user has been changed to: ");
              Serial.println(uuid[id]);
            }
          }
        }
        previousKeypad = key;
        break;
      }
    }
  }</p><p>  previous = value;</p><p>}</p><p>

//Start de tijd door een GET request te sturen naar de server</p><p>void startTime() {</p><p>  tone(TONE, 1250, 50);
  delay(100);
  tone(TONE, 1500, 50);
  delay(100);
  tone(TONE, 1750, 50);</p><p>  ESP8266Client client;
  int retVal = client.connect(destServer, 80);
  if (retVal <= 0) {
    Serial.println(F("Failed to connect to server."));
    initializeESP8266();
    connectESP8266();
  }</p><p>  client.print("GET /kruidvat/arduino/arduino_start.php?id=");
  client.print(uuid[id]);
  client.print("&amount=");
  client.print(values[id]);
  client.println(" HTTP/1.1");
  client.print("HOST: ");
  client.println(destServer);
  client.println();</p><p>  while (client.available())
    Serial.write(client.read());</p><p>  if (client.connected())
    client.stop();</p><p>  //  Tone(array(1250, 1500, 1750), 50, 100);</p><p>  Serial.print("Starting the time for user ");
  Serial.print(id);
  Serial.print(" with the id ");
  Serial.print(uuid[id]);
  Serial.print(" with a total of ");
  Serial.println(values[id]);
}</p><p>//Stop de tijd door een GET request te sturen naar een PHP bestand op de server</p><p>void stopTime() {
  tone(TONE, 1750, 50);
  delay(100);
  tone(TONE, 1500, 50);
  delay(100);
  tone(TONE, 1250, 50);</p><p>  ESP8266Client client;
  int retVal = client.connect(destServer, 80);
  if (retVal <= 0) {
    Serial.println(F("Failed to connect to server."));
    initializeESP8266();
    connectESP8266();
  }
  client.print("GET /kruidvat/arduino/arduino_stop.php?id=");
  client.print(uuid[id]);
  client.println(" HTTP/1.1");
  client.print("HOST: ");
  client.println(destServer);
  client.println();</p><p>  while (client.available())
    Serial.write(client.read());</p><p>  if (client.connected())
    client.stop();</p><p>  //  Tone(array(1750, 1500, 1250), 50, 100);</p><p>  Serial.print("Stopping the time for user ");
  Serial.print(id);
  Serial.print(" with the id ");
  Serial.print(uuid[id]);
  Serial.print(" with a total of ");
  Serial.println(values[id]);
}</p><p>

//Kijk of een char een letter is door de index te vinden in de string "ABCD"</p><p>int isLetter(char c) {
  return LETTERS.indexOf(c);
}</p><p>

//Zet de 3 kleuren van het ledje naar een andere waarde</p><p>void color(int r, int g, int b) {</p><p>  cr = r;
  cg = g;
  cb = cb;
}</p><p>

//Check voor elke knop of de waarde anders is dan de vorige waarde, als dat het geval is wordt er op de knop gedrukt</p><p>void loopButton() {
  for (int i = 0; i < 2; i++) {
    digitalWrite(buttons[i], HIGH);
    int state = digitalRead(buttons[i]);
    if (lastButtonState[i] != state) {
      if (state == HIGH) {
        values[id] = values[id] += (1 - 2 * (i % 2));
        values[id] = constrain(values[id], 0, 9999);
        tone(TONE, 500, 5);
        Serial.print("Amount: ");
        Serial.println(values[id]);
      }
    }
    lastButtonState[i] = state;
  }
}</p><p>//Laat de juiste getallen zien op het display</p><p>void convertToDisplay() {
  int a = values[id];
  int8_t r[] = {0x00, 0x00, 0x00, 0x00};
  disp[0] = (a / 1000) % 10;
  disp[1] = (a / 100) % 10;
  disp[2] = (a / 10) % 10;
  disp[3] = a % 10;
}</p>

Step 4: PHP Code

Nu het arduino gedeelte van de code werkt is het tijd om het PHP gedeelte werkende te maken. Het PHP gedeelte bestaat uit allemaal losse bestandje die verschillende opdrachten uitvoert. De bestanden die de arduino gebruikt zijn arduino_start.php en arduino_stop.php Er zijn nog meer PHP bestanden die er voor zorgen dat de bijbehorende app de opgeslagen gegeven kan gebruiken. Hieronder staan de codes die er voor zorgen dat de arduino de gegevens kan opslaan in de database. In config.php maak je een verbinding aan met je database.

config.php

<p><?php<br-->    $db_host = 'localhost';
    $db_user = ''; //Naam van de gebruiker
    $db_password = ''; //Database wachtwoord
    $db_name = '';  //Naam van de database</p><p>    $connect = mysqli_connect($db_host, $db_user, $db_password) or die(mysqli_error($connect));
    mysqli_select_db($connect, $db_name) or die(mysqli_error($connect));  
    mysqli_query($connect, "set character_set_server='utf8'");
    mysqli_query($connect, "set names 'utf8'");
?></p>

arduino_start.php

<p><!--?php<br-->date_default_timezone_set('Europe/Amsterdam');
    include("config.php");</p><p>    $db = ""; //Naam van de database voor de gegevens</p><p>    $db_names = ""; //Naam van de database voor de namen
    if(isset($_GET['id']) && isset($_GET['amount'])){
        $id = intval($_GET['id']);
        $amount = intval($_GET['amount']);
        
        $date = date("Ymd");
        $start = date("His");
        
        if(!is_int($id) || !is_int($amount)){
            die("Security issue!");
        } else {
            $query = mysqli_query($connect, "SELECT name from " . $db_name . " WHERE id = '" . $id . "'");
            $getInfo = mysqli_fetch_array($query);
            $name = $getInfo['name'];
            if(strlen($name) < 1 || strlen($name) > 20){
                $name = "Naamloos";
            }
            
            $query = mysqli_query($connect, "SELECT * from " . $db . " WHERE id = " . $id . " AND date = " . $date . "");
            $getInfo = mysqli_fetch_array($query);
            if(mysqli_num_rows($query) < 1){
                $s = "INSERT INTO " . $db . " (date, id, name, start, amount) VALUES('" . $date . "','" . $id . "','" . $name . "','" . $start . "','" . $amount . "')";
                $query = mysqli_query($connect, $s);
                if($query){
                    echo "1";
                } else {
                    echo "2|" . $s . "!";
                }
            } else {
                $s = "UPDATE " . $db . " SET amount=" . $amount . ", start='" . $start . "' WHERE id=" . $id . " AND date='" . $date . "'";
                $query = mysqli_query($connect, $s);
                if($query){
                    echo "1";
                } else {
                    echo $s;
                }
            }
        }
        
    } else {
        die("Error, missing POST data!");
    }</p><p>?></p>

arduinio_stop.php

<p><!--?php<br-->date_default_timezone_set('Europe/Amsterdam');
    include("config.php");</p><p>    $db = ""; //Naam van de database</p><p>    if(isset($_GET['id'])){
        $id = intval($_GET['id']);        </p><p>        if(!is_int($id)){
            die("Security issue");
        } else {
            $date = date("Ymd");
            $stop = date("His");
            $query = mysqli_query($connect, "UPDATE " . $db . " SET stop = " . $stop . " WHERE id=" . $id . " AND date=" . $date . "");   
        }  
    } else {
        die("Error, missing POST data!");
    }</p><p>?></p>

Step 5: Behuizing

De behuizing kan van veel verschillende materialen gemaakt worden. Voor mijn behuizing heb ik gekozen voor een ventilatieschacht van pvc-achting materiaal materiaal behuizing. Het materiaal kan erg mooi bewerkt worden, maar kost heel veel tijd. Omdat het materiaal van nature hard is heb ik het moeten verwarmen en het vervolgens heel snel omvouwen en aandrukken. Dit heb ik heel vaak moeten herhalen tot er een mooi doosje ontstond. Vervolgens heb ik hetzelfde nog een keer moeten doen voor de deksel. Het makkelijkst is om een houten klosje te zagen in de maten van de behuizing. Je kan het materiaal er vervolgens omheen vouwen als de behuizing helemaal klopt het klosje er uit halen. Daarna heb ik gaten gemaakt in de behuizing voor de verschillende onderdelen. Op de bodem ligt een los grondplaatje met de arduino en batterijhouder er aan vast zodat ik die er altijd nog uit kan halen. In de hoeken zitten balkjes die dienen voor stevigheid en waar de deksel in vast kan worden geschroefd.

Step 6: App

Je arduino werkt nu, je gevens wordt correct opgeslagen in een database, nu kun je deze gegevens voor allemaal doeleinden gebruiken. Je kunt een app ontwikkelen om een overzicht te laten zien van de gegevens. Je kunt een script maken die de resultaten automatisch mailt naar iemand. Je kunt ook een web-interface maken om de gegevens te delen. De mogelijkheden zijn eindeloos. Ik heb er voor gekozen om een app te ontwikkelen. De code voor de app ga ik niet delen, maar ik heb nog een aantal PHP bestanden die je op weg kunnen helpen met wat je ook wil doen.

get_data.php

date_default_timezone_set('Europe/Amsterdam'); include("config.php");

$table = ""; //De naam van de table if(isset($_POST['date']) && isset($_POST['id'])){ $date = intval($_POST['date']); $id = intval($_POST['id']); if(!is_int($date) || !is_int($id)){ die("Security issue!"); } else { $query = mysqli_query($connect, "SELECT * FROM " . $table . " WHERE id = '" . $id . "' AND date = '" . $date . "'"); $getInfo = mysqli_fetch_array($query); $result = $getInfo['name'] . ", " . $getInfo['start'] . ", " . $getInfo['stop'] . ", " . $getInfo['amount'] . ", " . $getInfo['id']; echo $result; } } else { die("Error, missing POST data!"); } ?>

Dit PHP bestand kun je gebruiken om opgeslagen gegevens uit de database te halen. Je moet een POST request maken naar dit script met daarin een waarde voor 'id' en 'date'. Vervolgens krijg je gegevens terug in in het volgende format "{naam}, {start tijd}, {stop tijd}, {hoeveelheid}, {id}". Je kunt zelf de gegevens die je wil opvragen aanpassen door de waardes in $getInfo[''] aan te passen.

add_user.php

date_default_timezone_set('Europe/Amsterdam'); include("config.php");

$table = ""; //Naam van de table

$password = ""; //Zelf gekozen wachtwoord

if(isset($_POST['name']) && isset($_POST['password'])){ $name = $_POST['name']; $pass = $_POST['password']; if($pass != $password){ die("1|Wachtwoord onjuist!"); } else { $query = mysqli_query($connect, "INSERT INTO " . $table . " (name) VALUES ('" . $name . "')"); if($query){ echo("2|" . $name . " toegevoegd aan vulploegers"); } } } else { die("Error, missing POST data!"); } ?>

Dit PHP bestand kan je gebruiken om vulploegers toe te voegen aan je database. Je moet een POST request maken naar dit bestand met een waarde voor 'name' en 'password'. Vervolgens wordt er gekeken of het opgegeven wachtwoord klopt met jouw wachtwoord om misbruik te voorkomen. Als het wachtwoord klopt wordt er in de opgegeven database een nieuwe rij toegevoegd met een naam en id. Het id is automatisch 1 hoger dan het vorige id.

get_all_data.php

date_default_timezone_set('Europe/Amsterdam'); include("config.php");

$table = ""; //De naam van de table if(isset($_POST['date'])){ $date = intval($_POST['date']); if(!is_int($date)){ die("Security issue!"); } else { $query = mysqli_query($connect, "SELECT * FROM " . $table . " WHERE date = '" . $date . "'"); while ($data = mysqli_fetch_array($query)){ echo $data['name'] . "," . $data['amount'] . "," . $data['start'] . "," . $data['stop'] . "," . $data['id'] . "|"; } } } else { die("Error, missing POST data!"); } ?>

Dit PHP bestand doet bijna hetzelfde als get_data.php, maar i.p.v. 1 resultaat opalen door middel van een id en een datum heb je hier alleen een datum nodig en krijg je alle resultaten van die datum. Je krijgt de resultaten als 1 lange string met een '|' tussen verschillende resultaten.

Er zijn nog veel andere PHP bestanden die gebruikt worden in de app, maar deze 3 moeten een beetje een beeld geven van hoe het PHP gedeelte van de app er uit komt te zien. Hieronder laat ik zien hoe je een POST request kan sturen vanuit de app.

C# script in Unity dat zorgt voor het toevoegen van een nieuwe vulploeger

using System.Collections;
using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;

public class AddUser : MonoBehaviour {

public InputField input_name; public InputField input_password; public Text warning; private bool doAdd;

private void OnEnable() { warning.text = "Voer een naam en wachtwoord in!"; }

public void buttonPressed() { doAdd = true; if(input_name.text.Length < 1) { warning.text = "Voer een geldige naam in!"; doAdd = false; }

if(input_password.text.Length < 1) { warning.text = "Voer een geldig wachtwoord in!"; doAdd = false; }

if (doAdd) { StartCoroutine(Add()); } }

//Een POST request stop je altijd in een IEnumerator

public IEnumerator Add() {

//Maak een nieuw WWWForm aan een voeg POST data toe d.m.v. form.AddField(index, data) WWWForm form = new WWWForm(); form.AddField("name", input_name.text); form.AddField("password", input_password.text);

WWW query = new WWW("http://www.northseadevs.com/kruidvat/arduino/add_user.php", form); warning.text = "Gegevens verzenden!"; yield return query;

if(query.text.Length > 0) { string[] result = query.text.Split('|'); if(result[0] == "1") { warning.text = result[1]; } else if(result[0] == "2") { warning.text = result[1]; input_name.text = ""; input_password.text = ""; } }

} }

?>