Update on the Open Source Bluetooth Watch Initiative

It has been more than month since Open Source Bluetooth Watch Initiative first announced.There has been some improvements.Hardware side of the project completed.But there is a lot to do on the software side to make it a nice developer-friendly watch.So i started programming an API for the watch.But this last month has been very very busy for me.But still there has been somethings done.

Hardware Updates :
5 pushbuttons added for navigation.
Tilt-Sensor added.

It has been over a month since the launch of the Open Source Bluetooth Watch Initiative. I’m pleased to report significant progress, particularly on the hardware front. However, there remains substantial work to be done on the software side to ensure a developer-friendly experience. Despite a particularly busy schedule, I’ve made strides in developing an API for the watch.

Hardware Updates

  • Navigation Buttons: Five pushbuttons have been integrated to facilitate easier navigation.
  • Tilt Sensor: Added for enhanced user interaction based on device orientation.

Software Updates

  • UI Design: The user interface is being designed with vertical screens referred to as Widgets. These Widgets include buttons, labels, and other interactive elements.

There are still some issues and gaps that need addressing. Once I find some additional time, I will continue working on these issues and release the source code along with Android and Maemo apps to interface with the watch. I welcome any feedback or suggestions you may have about the code or the project as a whole. Please do not hesitate to comment or reach out.

Class Structure Overview

Below is a schematic representation of the class structure used in the project:

  • – LCD
    • – Widget
      • – Label
      • – Input
      • – UI

Example Arduino Code :

#include "LCD.h"
#include "ui.h"

LCD lcd;

Widget Multimedia("Multimedia");
Widget Alerts("Alerts");

Label play("Play / Pause",false,"1");
Label stop1("Stop",false,"2");
Label prev("Prev",false,"3");
Label next("Next",false,"4");
Label mcalls("Missed Calls",false);
Label messages("Messages",false);
Label mail("Mail",false);
Label update("Update",false,"5");

Input in(0,1);

UI Screen(&lcd);

void setup() {
DDRD |= B01111100;   // Set SPI pins as output
PORTD |= B01111100;  // Set SPI pins HIGH Serial.begin(115200); lcd.init(); delay(500); lcd.SetRect(0,0,131,131,FILL,WHITE);

Multimedia.addLabel(&play); Multimedia.addLabel(&stop1); Multimedia.addLabel(&prev); Multimedia.addLabel(&next); Screen.addHorizontal(&Multimedia);

Alerts.addLabel(&mcalls);
Alerts.addLabel(&messages);
Alerts.addLabel(&mail);
Alerts.addLabel(&update);

Screen.addHorizontal(&Alerts);
}


void loop() {
in.checkInput();
switch(in.label)
{
case 0:
SerialSender("0");
break;
case 1:
Screen.vCursor-=1;
Screen.redraw=true;
break;
case 2:
Screen.vCursor+=1;
Screen.redraw=true;
break;
case 3:
Screen.hCursor-=1;
Screen.redraw=true;
break;
case 4:
Screen.activeLabel->Click();
break;
case 5:
Screen.hCursor+=1;
Screen.redraw=true;
break;
}
Screen.vCursor=max(0,min(3,Screen.vCursor)); Screen.hCursor=max(-1,min(1,Screen.hCursor)); Screen.draw();
delay(100);
}

Leave a Reply

Your email address will not be published. Required fields are marked *