====== Datenempfang mit der Library ArduPar (von Github) ====== Falls Ihr verschiedene unterschiedliche Werte und Kommandos übertragen wollt, die Ihr in eurem Arduinoprogramm auseinander halten müsst, dann bietet sich die Verwendung der Library ArduPar an, die Felix zu diesem Zweck geschrieben hat. Die Library hat auch noch besonders cooles Feature: Sie unterstützt neben der Seriellen Schnittstelle auch WLAN - dazu später mehr. ==== Installation ==== * Ladet zunächst auf [[https://github.com/Zapalot/ArduPar]] die Library als .zip-Datei herunter. (Link rechts unten) * Entpackt den Inhalt der .zip-Datei in euer Dokumente/Arduino/libraries Verzeichnis. * Weil GitHub an den Verzeichnisnamen immer noch ein "-master" anhängt, müsst ihr das Verzeichnis danach noch in "ArduPar" (ohne "-master") umbenennen. * Schließt euer Arduino IDE und startet es erneut, damit es die neue Library erkennt. Wenn alles geklappt hat, sollte bei den Beispielen die neue Kategorie **//ArduPar//** auftauchen. ==== Auf dem Arduino ==== Schaut euch mal das Beispiel //**ArduPar/simpleIntSetting**// an, um zu sehen, wie es funktioniert. ArduPar basiert auf der Idee von einstellbaren "Parametern". Jeder Parameter hat: * einen aktuellen Wert (also z.B. "2") * einen Namen, unter dem man ihn erreichen kann (also z.B. ''someInt'') * einen Wertebereich (also z.B. Minimalwert von 0 und Maximalwert von 10) Um einen Parameter zu erstellen und zu benutzen müsst ihr: - Den Parameter deklarieren (so wie jede andere Variable auch): Im Beispiel: ''IntArduPar someIntSetting;'' - Den Parameter initialisieren (im Setup): Im Beispiel: someIntSetting.setup( F("someInt"), // Der Parameternamen muss in einem F("") eingeschlossen werden. 0, // Der Minimalwert 10 // Der Maximalwert ); - Daten von der Seriellen Schnittstelle empfangen. Das Kommando ''updateParametersFromStream(&Serial,10);'' aus dem Beispiel wartet 10ms lang auf neue Kommandos und bringt die aktuellen Werte der Parameter auf den neuesten Stand. - Den aktuellen Wert des Parameters auslesen und etwas damit machen. Der aktuelle Wert steht im ''.value'' Feld des Parameters. Im Beispiel gibt die Zeile ''Serial.println(someIntSetting.value);'' den aktuellen Wert aus. ==== Auf dem Computer (Serial Monitor)==== Als ersten Test könnt Ihr mal den Serial Monitor aufmachen. Wenn Ihr in das kleine Feld ganz oben etwas eintragt und "senden" drückt, geht dieser Text an den Arduino. Die Library erwartet Kommandos im Format ''Parametername Wert''. Gebt also z.B. ''someInt 5'' ein, um den Wert von ''someInt'' auf 5 zu setzen. ==== Auf dem Computer (Processing)==== Die gleichen Kommandos, die ihr über den Serial Monitor eingegeben habt, könnt ihr auch aus Processing verschicken. Dieses Beispielprogramm verschickt z.B. Zahlen von 0-255 an den Arduino. /** * SendSomeInt * * Send command for setting an ArduPar parameter to a Serial Port * This example is in the public domain. */ import processing.serial.*; Serial myPort; // Create object from Serial class int curNumber=0; // The Number we will send to the Arduino void setup() { // I know that the last port in the serial list on my PC // is always my FTDI adaptor, so I open Serial.list()[Serial.list().length-1]. // If the whole thing does not work, try a different port... // you can also just directly use the port name as a parameter: // (i.e. type '"COM18"' instead of 'Serial.list()[Serial.list().length-1]') // Open whatever port is the one you're using. String portName = Serial.list()[Serial.list().length-1]; myPort = new Serial(this, portName, 115200); //open a connection with 115200Baud - this has to match the Baudrate in your Arduino sketch! frameRate(10); //the draw() function will run 10 times a second } void draw() { myPort.write("someInt "+curNumber+"\n"); //send a line containing the name and value separated by a space to the Serial. curNumber++; // count on... if (curNumber>255)curNumber=0; // start over at zero once we have reached 255... }