Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
skript:kommunikation [2018/05/15 11:43] d.golovko [2. Mehrere Informationen zusammen von Processing an den Arduino schicken] |
skript:kommunikation [2018/11/21 16:23] (aktuell) d.golovko |
||
---|---|---|---|
Zeile 61: | Zeile 61: | ||
void loop() { | void loop() { | ||
- | while (Serial.available()) { // Wenn Daten verfügbar, | + | if (Serial.available()) { // Wenn Daten verfügbar, |
char val = Serial.read(); // lesen und in var ablegen | char val = Serial.read(); // lesen und in var ablegen | ||
if (val == 'H') { // Wenn 'H' geschickt, | if (val == 'H') { // Wenn 'H' geschickt, | ||
Zeile 71: | Zeile 71: | ||
} | } | ||
</code> | </code> | ||
+ | |||
====2. Mehrere Informationen zusammen von Processing an den Arduino schicken==== | ====2. Mehrere Informationen zusammen von Processing an den Arduino schicken==== | ||
Zeile 78: | Zeile 79: | ||
* "120;0\n" => Servowindel 120°, LED aus usw. | * "120;0\n" => Servowindel 120°, LED aus usw. | ||
- | Die Winkelwerte müssen wir vor dem Verschicken in Processing von ''int'' zu einem ''String'' umwandeln: | + | Diesen ''String'' stellen wir dann so zusammen: |
<code java> | <code java> | ||
- | int angle = (int)(mouseX / 600.0 * 120 + 30); | + | int angle = round(mouseX / 600.0 * 120 + 30); // den float-Wert aufrunden |
//120, weil 150 Grad - 30 Grad = 120 Grad (kleinster und höchster einstellbarer Winkel bei unseren Servos) | //120, weil 150 Grad - 30 Grad = 120 Grad (kleinster und höchster einstellbarer Winkel bei unseren Servos) | ||
- | myPort.write(new Integer(angle).toString() + ";1\n"); | + | myPort.write(angle + ";1\n"); |
</code> | </code> | ||
Zeile 101: | Zeile 102: | ||
void draw() { | void draw() { | ||
- | int angle = (int)(mouseX / 600.0 * 120 + 30); // Servowinkel anhand der x-Koordinate berechnen | + | int angle = round(mouseX / 600.0 * 120 + 30); // Servowinkel anhand der x-Koordinate berechnen |
if (mouseY < 200) { // wenn der Mauszeiger in der oberen Hälfte ist | if (mouseY < 200) { // wenn der Mauszeiger in der oberen Hälfte ist | ||
- | myPort.write(new Integer(angle).toString() + ";1\n"); | + | myPort.write(angle + ";1\n"); |
} else { // wenn der Mauszeiger in der unteren Hälfte ist | } else { // wenn der Mauszeiger in der unteren Hälfte ist | ||
- | myPort.write(new Integer(angle).toString() + ";0\n"); | + | myPort.write(angle + ";0\n"); |
} | } | ||
delay(100); // warte, bevor die nächste Nachricht verschickt wird | delay(100); // warte, bevor die nächste Nachricht verschickt wird | ||
Zeile 127: | Zeile 128: | ||
String message = Serial.readStringUntil('\n'); // Bis zum Zeilenumbruch lesen | String message = Serial.readStringUntil('\n'); // Bis zum Zeilenumbruch lesen | ||
int semicolonIndex = message.indexOf(';'); // Position des Semikolons im String | int semicolonIndex = message.indexOf(';'); // Position des Semikolons im String | ||
- | String angle = message.substring(0, semicolonIndex); // Lese den Winkelwert aus | + | int angle = message.substring(0, semicolonIndex).toInt(); // Lese den Winkelwert aus |
- | String led = message.substring(semicolonIndex+1, semicolonIndex + 2); // Lese den LED-Wert aus | + | int led = message.substring(semicolonIndex+1, semicolonIndex + 2).toInt(); // Lese den LED-Wert aus |
- | motor.write(angle.toInt()); // Der Winkel muss vorher zum int umgewandelt werden | + | motor.write(angle); // Der Winkel muss vorher zum int umgewandelt werden |
- | digitalWrite(LED_BUILTIN, led.toInt()); // Mach die LED an oder aus (1=HIGH, 0=LOW) | + | digitalWrite(LED_BUILTIN, led); // Mach die LED an oder aus (1=HIGH, 0=LOW) |
} | } | ||
} | } |