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