Kontrollera en Roomba robot med Arduino och Android (5 / 8 steg)
Steg 5: Vrida på lysdioder och Display
Vrida på lysdioderna
Som beskrivs i inledningen, har Roomba 5 lysdioder:
- Power/Clean (bi-color röd/grön och intensitet kontrolleras)
- Plats (grön, fast intensitet)
- Docka (grön, fast intensitet)
- Varning/Check (Orange, fast intensitet)
- Smuts/skräp (blå, fast intensitet)
Alla lysdioder kan ange att använda koden [139]
För att styra Power LED, måste du skicka två data-byte till Roomba: "färg" och "intensitet".
- Färg:
- Grön = 0
- Orange = 128
- röd = 255
- Intensitet:
- Låg = 0
- Max = 255
Den funktion setPowerLED (byte setColor, byte setIntensity) gör det:
void setDigitLEDs (byte digit1, byte digit2, byte digit3, byte digit4)
{
Roomba.write(163);
Roomba.write(digit1);
Roomba.write(digit2);
Roomba.write(digit3);
Roomba.write(digit4);
}
Exempelvis om du vill aktivera POWER-LED med orange färg på halva dess intensitet, kan du anropa funktionen som nedan:
setPowerLED (128, 128);
Till vända på de resterande 4 lysdioderna, skall funktionerna nedan användas:
setDebrisLED(ON);
setDockLED(ON);
setSpotLED(ON);
setWarningLED(ON);
Alla ovanstående funktioner har en kod som liknar denna:
void setDebrisLED(bool enable)
{
debrisLED = aktivera;
Roomba.write(139);
Roomba.write ((debrisLED? 1: 0) + (spotLED? 2: 0) + (dockLED? 4: 0) + (warningLED? 8: 0));
Roomba.write((byte)Color);
Roomba.write((byte)Intensity);
}
I princip kommer diference linjen:
debrisLED = aktivera;
som måste ändras så att var och en av andra lysdioder (spotLED, dockLED, warningLED).
Skicka meddelanden till Display
Roomba har fyra 7 Segment Display som du kan använda för att skicka meddelanden på två olika sätt::
- Kod [163]: Siffran lysdioder Raw (numerisk)
- Kod [164]: Siffran lysdioder ASCII (harmonisering av bokstäver och especial koder)
Om du vill visa tal är mycket enkel. Du måste skicka koden [163], efter de 4 digitas ska visas. Funktion: setDigitLEDs (byte digit1, byte digit2, byte digit3, byte digit4) gör detta för dig:
void setDigitLEDs (byte digit1, byte digit2, byte digit3, byte digit4)
{
Roomba.write(163);
Roomba.write(digit1);
Roomba.write(digit2);
Roomba.write(digit3);
Roomba.write(digit4);
}
Till exempel för att Visa "1, 2, 3, 4", måste du anropa funktionen:
setDigitLEDs (1, 2, 3, 4);
Med koden [164], är möjligt skickar tillnärmning av ASCII.
Funktion setDigitLEDFromASCII (byte siffror, char bokstav) gör detta till oss:
void setDigitLEDFromASCII (byte siffror, char bokstav)
{
Växla (digit) {
fall 1:
digit1 = bokstav;
bryta;
fall 2:
digit2 = bokstav;
bryta;
fall 3:
digit3 = bokstav;
bryta;
fall 4:
digit4 = bokstav;
bryta;
}
Roomba.write(164);
Roomba.write(digit1);
Roomba.write(digit2);
Roomba.write(digit3);
Roomba.write(digit4);
}
För att förenkla, skapar jag en ny funktion för att skicka de 4 siffrorna på samma gång:
void writeLEDs (char, char b, char c, char d).
{
setDigitLEDFromASCII(1, a);
setDigitLEDFromASCII (2, b).
setDigitLEDFromASCII (3, c).
setDigitLEDFromASCII (4, d).
}
Till exempel för att Visa "Stopp", måste du anropa funktionen:
writeLEDs ('s', t ', ' o ', 'p');