Potrzebowałem zobaczyć, jak skomplikowane jest komunikowanie się aplikacji uruchomionej na komputerze z Arduino. Oczywiście wybór padł na złącze szeregowe :/
Pytanie, czym sterować, żeby się nie narobić... Albo serwo, a może jakaś dioda? A może dioda RGB? Akurat miałem pod ręką małe trójkolowe coś w wersji smd, więc...
Najpierw mała aplikacja w Processingu, ot trzy suwaki...
Każdy z "suwaków" aktualizuje poszczególne składowe, które następnie są łączone w jeden łańcuch i wysyłane przez port szeregowy do Arduino:
float mr = map(r, 0, 255, 0, 255);
float mg = map(g, 0, 255, 0, 255);
float mb = map(b, 0, 255, 0, 255);
String rgbString = str((int)mr) + " " + str((int)mg) + " " + str((int)mb) + "\n";
print("rgbString:"); println(rgbString);
port.write(rgbString);
Arduino zaś odbiera łańcuch i parsuje poszczególne składowe:
if (Serial.available() > 0) {
redValue = Serial.parseInt();
greenValue = Serial.parseInt();
blueValue = Serial.parseInt();
if (Serial.read() == '\n') {
redValue = constrain(redValue, 0, 255);
greenValue = constrain(greenValue, 0, 255);
blueValue = constrain(blueValue, 0, 255);
analogWrite(redPin, redValue);
analogWrite(greenPin,greenValue);
analogWrite(bluePin, blueValue);
}
}
Próby wysyłania poszczególnych składowych osobno, jako sekwencja bajtów, się nie sprawdziła, więc póki co pozostaje tworzenie łańcucha znaków...
A działa to mniej więcej tak:
Kody źródłowe:


Brak komentarzy:
Prześlij komentarz