An Android app for controlling OTTO, a robot by ROBBO via Bluetooth.
Control panel | LED color picker |
---|---|
Sound picker | Dot display |
---|---|
- Kotlin
- AndroidX libraries:
- Navigation component
- Lifecycle (LiveData, ViewModel)
- ColorPicker
To define what data will be sent to the robot, edit data/Action.kt
. Action
class defines how the actions received
from the user would be converted into bytes to be sent to the robot. The following example shows how the text may be
converted into a byte sequence.
class ShowText(private val text: String) : Action() {
override fun toBytes(): ByteArray {
val header: Byte = 0b01011010
return byteArrayOf(header) + text.toByteArray()
}
}
In order to get data back to the robot, you have to subscribe to viewmodel/ViewModels.kt
ByteArray Observable (or any data class you define, check it out for more info). ViewModels
object receives updates from the model and passes them to all its observers. (viewmodel/ViewModels.kt
probably will be
moved to the data/Repository.kt
or something like that in later releases, so be careful.)
There is the example of getting data with the ViewModel at examples/ViewModelWithRobotCallback.kt
After creating your own control panel and linking it with the ViewModel, you should define your own Action
subclasses
to represent actions your panel allows performing. Then call ActionRepository.sendAction(Action)
from your ViewModel.
See examples in view/options/text/TextFragment.kt
and view/options/text/TextViewModel.kt
or
view/controlpanel/OttoControllerFragment.kt
and view/controlpanel/OttoControllerViewModel.kt
.