Instructables
loading
loading
Picture of Make your own smart watch

This document is also translated in Polish(by Sebastian), Korean language.

Most IT companies participate in the race to grab people’s wrist. A smart watch becomes the most significant item in a wearable device category. You can easily find this mood in this link, there are tons of smart watches.

But here is a simple way to evaluate smart watch’s future on your own. Make it! With Arduino micro-processor and Android, I made a simple smart watch and named it “Retro Watch“. You can do this too!

Retro Watch is an open source project to let you make a smart watch based on Arduino and Android. This text explains about modules, blueprints, how to install and use the Arduino and the Android source codes step by step.

Release note
Updated (2015.01.12) : RetroWatch supports u8glib. Now you can use various kind of OLED(or else) as you want and it consumes less memory(RAM). Instead it’s liitle slow at screen refresh. You can find updated sources at GitHub.

 
Remove these adsRemove these ads by Signing Up

Step 1: Overall Structure

Picture of Overall Structure

RetroWatch is a simple system that is used a hardware platform called Arduino, which is intended for artists, designers, and hobbyst, and an Android app. The overall structure is in the picture above.

Imagine a very small computer that you can wear on your wrist. Arduino board is a micro-processor and a storage, and there’s only one input method : a button. Bluetooth is to communicate with other devices, and the battery would be necessary for power. I’ll install an Android app for collecting or editing various RSS and system information and for notification on the Android device.

Step 2: Preparing for RetroWatch

Picture of Preparing for RetroWatch

You need to prepare modules as small as possible to wear the watch on your wrist. There may be tons of variations, but I chose parts that are commonly used and inexpensive.

.

Hardware parts for smart watch

Arduino micro-controller

I chose the smallest Arduino, Pro mini. Arduino Pro mini is a light version of UNO R3. It doesn’t have a USB interface chip in order to reduce the price and the size. There are two version depending on the operating voltage(3.3v/5v). And I used a 3.3v version, because the bluetooth and display that are connected with the board support 3.3v and the board goes well with the 3.7v LiPo battery. It runs at 8MHz and a 5v version at 16MHz, but 8MHz is enough. Overall, all you need to prepare are Arduino Pro Mini 3.3v and USB to UART module.

The main chip of the board, ATmega328, has only 2KBytes RAM, but ATmega128 has just 1KBytes, which is very limited to run my system. Most boards have ATmega328, but you have to make sure.

Bluetooth

One of most common bluetooth modules that you can get are HC-06 main module and the one with interface base board. The latter one has a reset button, the status LED, and it supports both operation voltage(3,3v/5v), so this one is more convenient but the size is rather big, the LED, which is not quite necessary drains the battery and a little more expensive. So I used a HC-06 without the interface board.

Display
To make a SMART WATCH, it would be necessary to find a small, low-power display. I’d given lots of thoughts, then I chose -.96’’ OLED Display. There are various sizes of the displays(0.96’’, 1.3’’, etc), it works on low-power, English font and the image out available, and it supports I2C, SPI, which makes easy to connect with Arduino.

<strong>Be careful at selecting a display!!</strong> I used an 128×64 OLED which is using I2C and SSD1306 driver chip. If you are using different one, you may need to use different graphic libraries and modify arduino source code.

Updated (2015.01.12) : RetroWatch supports u8glib. Now you can use various kind of OLED(or else). Check supported devices at this link.


Battery
I use LiPo(Lithum-Polymer) battery in this project. 1-cell LiPo battery flows out current in 3.7v, which works perfectly with Arduino Pro mini, and there are many kind of batteries in terms of the size and the capacity. The most ideal battery depends on what size of watch you want to make. I recommend the battery with protection circuit(overcharging, over-discharging safe), and it’s better if it has a removable socket. It might helpful for you if you get a female socket and USB or DC adaptor recharger.

Etc.
You need wires, soldering iron, a switch and 10K ohm resistance(for a button), and a batter jack. It would be helpful for you to prepare the assembly manual.


Preparing for Android
Android v.4.3 supports the service that is used to get notification information from an app. So RetroWatch app is based on Android v.4.3 to enable notification service. For users who don’t use Android v.4.3 yet, the app without this function is released also. You can download the sources at GitHub, or download the app from Google Play Store. (Search with “RetroWatch” or “RetroWatch LE“)

Step 3: Assembling the watch

Picture of Assembling the watch
circuit_button.png
RetroWatch_circuit_all.jpg

Folks who are accustomed to handling Arduino or physical computing would proceed this procedure, but I recommend the others not to assemble Arduino Pro mini board first, but try to make the watch with the board that is easy to connect and use like UNO board. The assembly structure for RetroWatch is here.

# Bluetooth-> Arduino :

  • VCC -> 3.3V
  • GND -> GND
  • TX -> D2
  • RX -> D3

# OLED -> Arduino :

  • GND -> GND
  • VCC -> VCC
  • SDA -> A4(the analog 4th pin)
  • SCL -> A5(the analog 5th pin),

If your display has SPI interface, refer to the link. In case of 7pin SPI OLED, connect like below.

  • D1 : MOSI - Arduino D11 (MOSI)
  • D2 : MISO - Arduino D12 (MISO) : this pin is optional.
  • D0 : CLK - Arduino D13 (SCK)
  • DC : DC (Data Command) - Arduino D8 (or else)
  • CS : CS (Chip select) - Arduino D10 (SS)
  • RES : RESET - Arduino D9 (or else)

# Button :

You may connect with a button which is small enough for the smart watch and a 10k-ohm resistance. Refer to the picture attached.

# Battery : You can simply connect battery by connecting (+) -> RAW, GND -> GND. You need to put (+) line to RAW pin in case you use any sort of external power supply, such as an external battery, on Arduino Pro mini board. Otherwise, it can damage the board.

# USB to UART module -> Arduino :

  • 3.3V -> VCC
  • TXD -> RXD
  • RXD -> TXD
  • GND -> GND

Step 4: Compile Arduino source for watch and upload.

Picture of Compile Arduino source for watch and upload.

You can download RetroWatch Arduino source on the source tab on the GitHub.

GitHub – RetroWatch project page

And you need to do something before you complie the source code.

.

# Install graphics driver
You need a graphic library to draw images, shapes, fonts on the OLED. In order to use it, you must install Adafruit_SSD1306, Adafruit-GFX-Library.

(According to your development environment, Adafruit library conflicts with Robot_xxx library. In this case, backup and delete Robot_xxx libraries from arduino library folder.)

WARNING: If you are using an OLED with SH1106 driver, use Adafruit_SH1106 driver at below link. Korean user Wonho made this based on Adafruit_SSD1306 driver. https://github.com/wonho-maker/Adafruit_SH1106

In this case you must modify codes like below.

#include <Adafruit_SH1106.h>

SoftwareSerial BTSerial(9, 8); // Bluetooth TX, RX connection
int buttonPin = 5;  // Button pin 
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // OLED I2C address. Use your own settings


Updated (2015.01.12) : RetroWatch supports u8glib. If you wish to use various display, use u8glib instead. U8glib is more easy to use, consumes less memory(RAM) and supports various display. In this case download and install u8glib at official homepage.


# Copying the bitmap image header

You must copy the header file that contains bitmap images to load and use them. You should copy bitmap.h in RetroWatchArduino folder to /Arduino install folder/Arduino/hardware/libraries/RetroWatch. If there’s no such folder, simply make it.

# Modifying the source

Open Arduino IDE and load RetroWtchArduino.ino. Next, set pin numbers that you used when you connect the watch. It’s not necessary to modify if you use Arduino pins that are used in this instruction. But if you didn’t, you need to modify the source codes below.

SoftwareSerialBTSerial(2,3); // Input your TX, RX pin numbers

int buttonPin = 5; // Input your button pin number

display.begin(SSD1306_SWITCHCAPVCC, 0x3D); // Replace Ox3D with your I2C address

Updated (2015.01.12) : If you are using u8glib, load RetroWatchArduino_u8glib.ino file. And check below codes.

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // change this line according to your display
SoftwareSerialBTSerial(2,3); // Input your TX, RX pin numbers

int buttonPin = 5; // Input your button pin number

Updated (2015.01.22) : RetroWatch supports SPI OLED. I've updated at GitHub.

# Compile / Upload

If you follow the instruction well, you need to compile the source code. If this procedure fails, you have to check the error message and what went wrong so far.

If upload is completed, the RetroWatch Arduino logo and the Adafruit logo(the OLED manufacturer) have to be display on the OLED. After the logo phase passes and time shows up “00:00″, the initialization perfectly succeeds.

Now, it’s time to check the Bluetooth. Turn on the Bluetooth on your phone(Setting > Bluetooth). Your phone starts to search Bluetooth devices nearby, and the Bluetooth module should show. Once the Bluetooth module shows, you may proceed the pairing phase, and the two devices connect after putting 4-digit password (in my case, default 1234).

Step 5: Android app install & source download

Picture of Android app install & source download
arduino_mode.jpg
parts_work_well.jpg

It’s too big to demostrate how to compile and modify the android source. FYI, check /RetroWatch_Android/RetroWatch folder in the source downloaded from GitHub. I registered this app to Play Store, so go download it(search ‘RetroWatch’ or 'RetroWatch LE').

Follow the instruction as below and check the operation of RetroWatch.

If you install the app, turn on the bluetooth first(Setting > Bluetooth) and pair with the module. Next, start RetroWatch app. Choose the second menu(Notification access) on the top and grant RetroWatch the authorization for Notification. Choose the first menu(Choose the device) in the action bar and select the Arduino board that is already paired. If you can’t find it, check the power and the bluetooth module. Or choose ‘device scan’ menu to scan manually.

If the connection is succeeded, you may see “Connected” in connectivity display area at the bottom. Touch the action bar menu(…) and choose ‘Data transfer to Watch’. This menu transfer the data to display time and messages by Bluetooth. If the Bluetooth module works fine with the Arduino board, time information changes to current time. The Bluetooth connection is OK, but time doesn’t display, check the connection between TX, RX. Now, it’s time to have fun with MY OWN SMART WATCH!!! Pictures show the progress so far.

Step 6: RetroWatch Arduino

Picture of RetroWatch Arduino

RetroWatch changes mode in a circle as below.

Initial display:
The phase which the logo shows up when the watch boots.

Clock display:
The basic display which tells you time. You can change the style of the clock in the Android app. Analog, Digital, Mixed styles are supported so far. If you push the button, the display changes to the Emergency message display. It changes to the idle mode in case there’s no data update for 10 minutes.

Emergency message display:
The display that shows when users push the button in the watch display or a new emergency message is updated. If users push the button again or 10 seconds passes, the next message is shown. The display changes to a the normal message display after every emergency message shows.

Normal message display:
The display that shows after emergency message ends or users push the button. The next message shows up when users push the botton or after 5 seconds. The display changes to the clock when the last message shows.

Idle display:
The display that is shown if there’s no data push during 10 minutes. It displays Indicator and time(hh:mm) the display update interval changes to run at minimum power consumption. If you push the button or get a new message, the display changes to the clock display.


RetroWatch module has these features.


Three emergency messages can be stored. The message that the watch is already received is deleted if the messages are over 3. It can’t store lots of data due to memory shortage(2KB RAM).


Normal message stores up to 7. Like emergency messages, the first messages are deleted when the received messages reach to the maximum.


You can change the clock style as you want. Or you can even make your own clock style by altering the source code.


There are 65 icons so the Android app can use them. You can also add your own icons.(need to compile Arduino code)


You can choose whether the indicator would be shown or not in the app.


The internal battery is 140mAh, so the battery time is about 7 hrs at a normal status. I guess the battery time would be longer if I fix the source code for battery save.

Step 7: RetroWatch Android app.

Picture of RetroWatch Android app.

The performance of RetroWatch itself is limited, but I prepared some features to show various of data. The biggest feature is filtering messages sent to the watch. And I put an RSS feed feature to use data from different kind of areas. Try each feature by switching 4 tabs.

Message list tab :

Messages are the information collected from the app. Every message is inactivated except for emergency messages. Inactivated messages are not sent. You can change the status by filtering. By touching each message, you can enable each message or messages from same package.

Filter setting tab:

The RetroWatch app controls every single information by filtering. You can add, fix, and delete filters in this tab. You can change strings of messages(ex. change language Korean -> English since it supports English only), delete messages not to show, or just activate them without a string modification.

RSS tab:

You can register and monitor RSS feeds. The watch can show lots of information by RSS feeds. For instance, if you add a weather RSS and modify strings to filter, you can receive the weather alarm from the watch!!! You can easily search RSS feeds from the web site which I made and add them to the app.(Sorry, it's written in Korean now)

Watch control tab:

You are able to alter styles of the app and watch. If you put your Gmail account here, unread messages are registered in a message list. You can change the clock style and time display indicator to show(Display interval is already set because of power saving, the change applies at interval).

__

.

The RetroWatch app collects three kinds of data.

Notification:

A notification that is registered in the Andriod indicator bar. App uses the Notification service to collect notifications, only over Android 4.3 supports this feature. Please download RetroWatch LE app for other android version. LE app doesn’t have the notification collection feature.

System info:

The system info of the phone such as battery status, RF(LTE, 3G) connection status, WiFi status, recharging progress is collected in the watch. In addition, if you register a Gmail account, it counts unread e-mails.

RSS feed:

If you set RSS title and URL, it periodically read RSS data.

.

Here are the other minor features.

Messages are sent in two kinds – emergency message, normal message. But users cannot modify them. You can set icon that shows on the watch when it filters messages. You can use 65 icons. All information is updated to the watch every 30 minutes.The RetroWatch service runs in background even if you shut the app.

Need more details about how to use app? See this link: Retro Watch app quick guide.

Step 8: Packaging

Picture of Packaging
arduSwatch_small.jpg
F74PQL3HRPNAC2H.LARGE.jpg

RetroWatch Android, Arduino module is done, and if there’s no problem to operate, you need to pack the watch. Make a package as you want.

RetroWatch Specifications:

  • Processor : ATmega328 – 3.3v(8MHz)
  • 32KB Flash (2KB is shared for Bootloader)
  • 2KB RAM
  • 1KB EEPROM
  • Size : Width x Height x Depth = 34mm x 32mm x 12mm (Not packaged)
  • Battery : LiPo 140mAh (idle time 6-7hrs, 1-2hrs for recharging)
  • Connecting with Android app
  • Supports notification, system info, RSS feed
  • Message filtering
  • Open source
  • Hard-case file for 3D printer -> Download here!!

Step 9: Working demo and epilogue

Picture of Working demo and epilogue

You can feel how fascinating and powerful the open source and the open hardware are through this project. The idea comes true even though you are not professional because hardware is getting inexpensive and numbers of people shares source codes and know-how. Let’s try!!!

You can see the working demo at: YouTube link.

More specific how-to document at : RetroWatch project

Download sources at : GitHub RetroWatch page

Retro Watch app quick guide

Hard-case file for 3D printer, awesome case Designed by Wonho (See the Step9 title picture)

RetroWatch Android is based on Apache license, RetroWatch Arduino follows GPL v3.0.

Special thanks to Chang-Han Jeon and Kyung-Rae Park. Jeon translated this text in English and Park made a case for RetroWatch with his 3D printer. Awesome one at title picture is designed by Wonho. You can get the 3D modeling files here. http://www.thingiverse.com/thing:610603 And find more at his blog.

If you wish to translate this document into other language, feel free to do it! After translation, just notify to me with your result and your name. I’ll update this document. And if you made you own watch, please share with me. (godstale@hotmail.com)

1-40 of 462Next »

Arduino: 1.5.8 (Windows 8), Board: "Arduino Uno"

In file included from RetroWatchArduino_spi.ino:36:0:

bitmap.h:1269:43: error: variable 'bitmap_array' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

PROGMEM const unsigned char* bitmap_array[] = {

^

RetroWatchArduino_spi.ino:124:32: error: variable 'weekString' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

RetroWatchArduino_spi.ino:125:32: error: variable 'ampmString' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

RetroWatchArduino_spi.ino: In function 'void setup()':

RetroWatchArduino_spi.ino:168:11: error: 'buttonPin' was not declared in this scope

RetroWatchArduino_spi.ino: In function 'void loop()':

RetroWatchArduino_spi.ino:191:18: error: 'buttonPin' was not declared in this scope

Error compiling.

This report would have more information with

"Show verbose output during compilation"

enabled in File > Preferences.

how to fix this?

GodsTale (author)  akshitubhangale4 days ago

Use arduino 1.0.x version. And test with RetroWatchArduino_u8glib.ino source instead.

tried on arduino 1.0.6 version

getting this error

This report would have more information with

"Show verbose output during compilation"

enabled in File > Preferences.

Arduino: 1.0.6 (Windows NT (unknown)), Board: "Arduino Uno"

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::write(unsigned char)':

/U8glib.h:90: undefined reference to `u8g_DrawGlyph'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB':

/U8glib.h:76: undefined reference to `u8g_dev_ssd1306_128x64_i2c'

/U8glib.h:76: undefined reference to `u8g_dev_ssd1306_128x64_i2c'

/U8glib.h:76: undefined reference to `U8GLIB::initI2C(_u8g_dev_t*, unsigned char)'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::drawBitmapP(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char const*)':

/U8glib.h:156: undefined reference to `u8g_DrawBitmapP'

/U8glib.h:156: undefined reference to `u8g_DrawBitmapP'

/U8glib.h:156: undefined reference to `u8g_DrawBitmapP'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::drawLine(unsigned char, unsigned char, unsigned char, unsigned char)':

/U8glib.h:134: undefined reference to `u8g_DrawLine'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::cbegin()':

/U8glib.h:53: undefined reference to `u8g_Begin'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::firstPage()':

/U8glib.h:106: undefined reference to `u8g_FirstPage'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFont(unsigned char const*)':

/U8glib.h:165: undefined reference to `u8g_font_courB14'

/U8glib.h:165: undefined reference to `u8g_font_courB14'

/U8glib.h:165: undefined reference to `u8g_SetFont'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontRefHeightExtendedText()':

/U8glib.h:185: undefined reference to `u8g_SetFontRefHeightExtendedText'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setDefaultForegroundColor()':

/U8glib.h:123: undefined reference to `u8g_SetDefaultForegroundColor'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontPosTop()':

/U8glib.h:182: undefined reference to `u8g_SetFontPosTop'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::drawStr(unsigned char, unsigned char, char const*)':

/U8glib.h:170: undefined reference to `u8g_DrawStr'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::nextPage()':

/U8glib.h:107: undefined reference to `u8g_NextPage'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::drawBitmapP(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char const*)':

/U8glib.h:156: undefined reference to `u8g_DrawBitmapP'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFont(unsigned char const*)':

/U8glib.h:165: undefined reference to `u8g_font_courB14'

/U8glib.h:165: undefined reference to `u8g_font_courB14'

/U8glib.h:165: undefined reference to `u8g_SetFont'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontRefHeightExtendedText()':

/U8glib.h:185: undefined reference to `u8g_SetFontRefHeightExtendedText'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setDefaultForegroundColor()':

/U8glib.h:123: undefined reference to `u8g_SetDefaultForegroundColor'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontPosTop()':

/U8glib.h:182: undefined reference to `u8g_SetFontPosTop'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::drawStr(unsigned char, unsigned char, char const*)':

/U8glib.h:170: undefined reference to `u8g_DrawStr'

/U8glib.h:165: undefined reference to `u8g_DrawStr'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFont(unsigned char const*)':

/U8glib.h:165: undefined reference to `u8g_font_fixed_v0'

/U8glib.h:165: undefined reference to `u8g_font_fixed_v0'

/U8glib.h:165: undefined reference to `u8g_SetFont'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontRefHeightExtendedText()':

/U8glib.h:185: undefined reference to `u8g_SetFontRefHeightExtendedText'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setDefaultForegroundColor()':

/U8glib.h:123: undefined reference to `u8g_SetDefaultForegroundColor'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontPosTop()':

/U8glib.h:182: undefined reference to `u8g_SetFontPosTop'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::drawStr(unsigned char, unsigned char, char const*)':

/U8glib.h:170: undefined reference to `u8g_DrawStr'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::nextPage()':

/U8glib.h:107: undefined reference to `u8g_NextPage'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFont(unsigned char const*)':

/U8glib.h:165: undefined reference to `u8g_font_courB14'

/U8glib.h:165: undefined reference to `u8g_font_courB14'

/U8glib.h:165: undefined reference to `u8g_SetFont'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontRefHeightExtendedText()':

/U8glib.h:185: undefined reference to `u8g_SetFontRefHeightExtendedText'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setDefaultForegroundColor()':

/U8glib.h:123: undefined reference to `u8g_SetDefaultForegroundColor'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontPosTop()':

/U8glib.h:182: undefined reference to `u8g_SetFontPosTop'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::drawStr(unsigned char, unsigned char, char const*)':

/U8glib.h:170: undefined reference to `u8g_DrawStr'

/U8glib.h:170: undefined reference to `u8g_DrawStr'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFont(unsigned char const*)':

/U8glib.h:165: undefined reference to `u8g_font_courB14'

/U8glib.h:165: undefined reference to `u8g_font_courB14'

/U8glib.h:165: undefined reference to `u8g_SetFont'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontRefHeightExtendedText()':

/U8glib.h:185: undefined reference to `u8g_SetFontRefHeightExtendedText'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setDefaultForegroundColor()':

/U8glib.h:123: undefined reference to `u8g_SetDefaultForegroundColor'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontPosTop()':

/U8glib.h:182: undefined reference to `u8g_SetFontPosTop'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::drawCircle(unsigned char, unsigned char, unsigned char, unsigned char)':

/U8glib.h:141: undefined reference to `u8g_DrawCircle'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFont(unsigned char const*)':

/U8glib.h:165: undefined reference to `u8g_font_fixed_v0'

/U8glib.h:165: undefined reference to `u8g_font_fixed_v0'

/U8glib.h:165: undefined reference to `u8g_SetFont'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontRefHeightExtendedText()':

/U8glib.h:185: undefined reference to `u8g_SetFontRefHeightExtendedText'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setDefaultForegroundColor()':

/U8glib.h:123: undefined reference to `u8g_SetDefaultForegroundColor'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontPosTop()':

/U8glib.h:182: undefined reference to `u8g_SetFontPosTop'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::drawStr(unsigned char, unsigned char, char const*)':

/U8glib.h:170: undefined reference to `u8g_DrawStr'

/U8glib.h:170: undefined reference to `u8g_DrawStr'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFont(unsigned char const*)':

/U8glib.h:165: undefined reference to `u8g_font_courB14'

/U8glib.h:165: undefined reference to `u8g_font_courB14'

/U8glib.h:165: undefined reference to `u8g_SetFont'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontRefHeightExtendedText()':

/U8glib.h:185: undefined reference to `u8g_SetFontRefHeightExtendedText'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setDefaultForegroundColor()':

/U8glib.h:123: undefined reference to `u8g_SetDefaultForegroundColor'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontPosTop()':

/U8glib.h:182: undefined reference to `u8g_SetFontPosTop'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::drawStr(unsigned char, unsigned char, char const*)':

/U8glib.h:170: undefined reference to `u8g_DrawStr'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::drawCircle(unsigned char, unsigned char, unsigned char, unsigned char)':

/U8glib.h:141: undefined reference to `u8g_DrawCircle'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::nextPage()':

/U8glib.h:107: undefined reference to `u8g_NextPage'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::getStrPixelWidth(char const*)':

/U8glib.h:190: undefined reference to `u8g_GetStrPixelWidth'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFont(unsigned char const*)':

/U8glib.h:165: undefined reference to `u8g_font_fixed_v0'

/U8glib.h:165: undefined reference to `u8g_font_fixed_v0'

/U8glib.h:165: undefined reference to `u8g_SetFont'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontRefHeightExtendedText()':

/U8glib.h:185: undefined reference to `u8g_SetFontRefHeightExtendedText'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setDefaultForegroundColor()':

/U8glib.h:123: undefined reference to `u8g_SetDefaultForegroundColor'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontPosTop()':

/U8glib.h:182: undefined reference to `u8g_SetFontPosTop'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::drawStr(unsigned char, unsigned char, char const*)':

/U8glib.h:170: undefined reference to `u8g_DrawStr'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::nextPage()':

/U8glib.h:107: undefined reference to `u8g_NextPage'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::getStrPixelWidth(char const*)':

/U8glib.h:190: undefined reference to `u8g_GetStrPixelWidth'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFont(unsigned char const*)':

/U8glib.h:165: undefined reference to `u8g_font_fixed_v0'

/U8glib.h:165: undefined reference to `u8g_font_fixed_v0'

/U8glib.h:165: undefined reference to `u8g_SetFont'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontRefHeightExtendedText()':

/U8glib.h:185: undefined reference to `u8g_SetFontRefHeightExtendedText'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setDefaultForegroundColor()':

/U8glib.h:123: undefined reference to `u8g_SetDefaultForegroundColor'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::setFontPosTop()':

/U8glib.h:182: undefined reference to `u8g_SetFontPosTop'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::drawStr(unsigned char, unsigned char, char const*)':

/U8glib.h:170: undefined reference to `u8g_DrawStr'

RetroWatchArduino_u8glib.cpp.o: In function `U8GLIB::nextPage()':

/U8glib.h:107: undefined reference to `u8g_NextPage'

Hiu KingL7 months ago

how to solve it?

my version is arduino 1.5.7

In file included from RetroWatchArduino.ino:35:0:

bitmap.h:1269:43: error: variable 'bitmap_array' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

PROGMEM const unsigned char* bitmap_array[] = {

^

RetroWatchArduino.ino:118:32: error: variable 'weekString' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

RetroWatchArduino.ino:119:32: error: variable 'ampmString' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

GodsTale (author)  Hiu KingL7 months ago

In front of all the lines in the errors just add 'const'. See the details in below link.

http://forum.arduino.cc/index.php?topic=254424.0

plz tell what to do GodsTale i m a beginner

GodsTale (author)  akshitubhangale4 days ago

Use arduino 1.0.x version. And use RetroWatchArduino_u8glib.ino source instead.

Gzuz0716 days ago

Hi, I am trying to make my own smartwatch with arduino and android, but I have a problem, I don´t know if your solution solves it. I can communicate my app with the arduino and vice versa sending Strings between them, when the app or the arduino receives a predefined String, it executes an action. The problem is when I close my app the bluetooth connection gets lost and I cannot send commands from the arduino to the app even when I have a BroadcastReceiver. The thing is I have seen some devices like the hands free or the bluetooth controllers for games, when you pair them to the cellphone they show something like "input device" or "audio device" in profiles and you can pair them without needing an app at all, whereas with my arduino I need to pair it with my app and it does not show any profile. How can I achieve this for my own device? Thanks for any help

GodsTale (author)  Gzuz074 days ago

It seems quite difficult problem. What kind of power source are you using? At communication time bluetooth drains more power instantly. Power source must be sufficient to support this.

whenever i try to compile the retrowatcharduino_no_button code i get this error:

RetroWatchArduino_no_button.ino:33:0:

/Applications/Arduino.app/Contents/Resources/Java/libraries/AdafruitSSD1306/Adafruit_SSD1306.h:35:17: fatal error: SPI.h: No such file or directory

#include <SPI.h>

^

compilation terminated.

Any idea why?

And then when I include <SPI.h> i get this error:

In file included from RetroWatchArduino_no_button.ino:35:0:

bitmap.h:1269:43: error: variable 'bitmap_array' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

PROGMEM const unsigned char* bitmap_array[] = {

^

RetroWatchArduino_no_button.ino:119:32: error: variable 'weekString' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

RetroWatchArduino_no_button.ino:120:32: error: variable 'ampmString' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

Error compiling.

GodsTale (author)  chinedu.abalogu4 days ago

Use arduino 1.0.x version. If you still got same error on 1.0.x, use RetroWatchArduino_u8glib_no_button.ino.

the same here

nameis116.17 days ago

Hello,

I'm getting this error:

Somebody an idea how to fix?

Arduino: 1.6.1 (Mac OS X), Platine: "Arduino Mini, ATmega328"

In file included from RetroWatchArduino_u8glib_spi_no_button.ino:32:0:

/Users/at/Documents/Arduino/libraries/RetroWatch/bitmap.h:1269:43: error: variable 'bitmap_array' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

PROGMEM const unsigned char* bitmap_array[] = {

^

RetroWatchArduino_u8glib_spi_no_button.ino:123:32: error: variable 'weekString' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

RetroWatchArduino_u8glib_spi_no_button.ino:124:32: error: variable 'ampmString' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

RetroWatchArduino_u8glib_spi_no_button.ino:161:30: error: variable 'strIntro' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

GodsTale (author)  nameis116.4 days ago

Use arduino 1.0.x version instead. I have no error in 1.0.x version.

good day! i have made the smart watch and its awesome! it can sync with my android phone and tell me the exact time and the battery percentage of my phone. but there is a problem, it cannot notify me when i receive a new message in my phone. and sometimes when i press the button the screen doesn't change. like it is hanging up sometimes. help me what to do. thanks :)

GodsTale (author)  sarahjoy.manimti7 days ago

Not all the messages are shown on watch. When you received the message, check that it is shown on Android app. And touch the message and enable it. Enabled message has light blue color. After configuration select 'send data to remote' option in menu.

I cannot sure what's wrong in your second question. It can be button connection problem, failure in receiving data or something else. Please check conditions when it's hanging up.

schnun11 days ago

First of all thanks very much to godstale for sharing all this with us !

I got my watch running so far, but it does not show me any new

messages. I enabled gmail, pushover and so on, but unfortunately

no message is shown. I am using the ...spi_nobutton.

Any idea what the problem could be here ?

Thanks, Patrick

GodsTale (author)  schnun10 days ago

Does your watch shows exact time? If so, you need a button. To check received messages you have press the button.

schnun GodsTale10 days ago
Yeah, got it working ! Looks like it was an Android
issue. After deinstalling/reinstalling the App3 times it
worked.
I want to say thank you with a little donation via
paypal. Pls. let me have your donation paypal
address or let me know where I can find a donation button.

Really amazing job what you have done here .
Pls. stay creative !!!

Thanks, Patrick (waiting for the donation info :-) )
GodsTale (author)  schnun9 days ago

Thanks for your encouragement. Because I don't have enough time to fix major bugs and follow up questions, I left it free to all instead. :)

StormH24 days ago

i am getting

In file included from RetroWatchArduino_spi_no_button.ino:36:0:
bitmap.h:1269:43: error: variable 'bitmap_array' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
PROGMEM const unsigned char* bitmap_array[] = {
^
RetroWatchArduino_spi_no_button.ino:124:32: error: variable 'weekString' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
RetroWatchArduino_spi_no_button.ino:125:32: error: variable 'ampmString' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
Error compiling.

cant seem to figure it out?

MarcoG6 StormH23 days ago

that happened to me also but when i used the no button u8glib it worked

StormH MarcoG623 days ago

so do i need to add the u8glib library?

MarcoG6 StormH23 days ago

ya it also updates faster and takes a bit less ram

MarcoG625 days ago

in a older comment u said there was a way to have a moter vibrate when u got a messgae by adding

void processTransaction() {

...

else if(TR_COMMAND == CMD_TYPE_ADD_NORMAL_OBJ) {

... // call your function here.

}

else if(TR_COMMAND == CMD_TYPE_ADD_EMERGENCY_OBJ) {

... // call your function here.

}

how would i add that?

GodsTale (author)  MarcoG625 days ago

Add vibration motor at unused pin and call like this:

digitalWrite(your_vib_motor_pin, HIGH);

Of course, set as LOW again after few seconds.

iam sorry but iam realy bad at code but i still dont get it so could i just add the void processTransaction() {

...

else if(TR_COMMAND == CMD_TYPE_ADD_NORMAL_OBJ) {

... // call your function here.

}

else if(TR_COMMAND == CMD_TYPE_ADD_EMERGENCY_OBJ) {

... // call your function here.

}

and then

digitalWrite(your_vib_motor_pin, HIGH);

will that work?

hello sir,can we use any lipo battery of 3.7v,what about mAh it should be exact 140mAh???,,,can we use 12000mah?? reply me soon sir

.....are you trolling? a 12000mah battery wouldnt even fit on your wrist. You would rarely even need a battery that big.

GodsTale (author)  sudarshan reddy27 days ago

Yes you can use any lipo battery above 140mAh

I am getting this error, while uploading the code to Pro-mini. I am using "

USB to UART module -> Arduino connection.

"avrdude: stk500_getsync(): not in sync: resp=0x00".

What should I do?

GodsTale (author)  Bhanu Kishan27 days ago

Maybe you didn't press the reset button when uploading the codes. Or your TX, RX connection between USB to UART module and Arduino are not correct. Please check this.

phankspp121 month ago

hey guys, can you help me to get the drivers for funduino as i am using windows 7 and also tried on windows 8 and pc is unable to install automatic update for drivers.

You need at Windows Embeded for you'r smartwatch, and you'r can connect with you'r PC on Windows!

i got a .96" 128x64 oled screen burnt it out by accidentally giving it 12V and i realized i could cover the arduino with a 1.3" 128x64 oled , would i have to change the code for it to work or could i keep it the same?

GodsTale (author)  PRO DR MR BOB1 month ago

No need to change the code if 1.3'' OLED has same communication interface (I2C or SPI) and same driver.

King7171 month ago
Will this work for iPhones?

no

PRO DR MR BOB2 months ago

for the code without the button how would i wire that?

GodsTale (author)  PRO DR MR BOB1 month ago

You don't need to wire a button if you are using RetroWatchArduino_no_button source.

1-40 of 462Next »