Tiempo de canto ver Smartstrap Tutorial (3 / 4 paso)

Paso 3: Programación del guijarro

  1. Configurar una cuenta de piedra en cloudpebble

  2. Asegúrese de que el PC y el Smartphone están en la misma red local y luego encienda el desarrollador conexión en tu aplicación para smartphone guijarro tiempo Opciones--> conexión programador
  3. Cree un nuevo proyecto vacío, agregue un nuevo archivo de origen denominado "main.c" y luego pone el siguiente código a la misma
 #include <pebble.h> #define TIMEOUT_MS 1000 #define MAX_READ_SIZE 100 static Window *s_main_window; static TextLayer *s_status_layer; static TextLayer *s_attr_text_layer; static char s_text_buffer1[20]; static SmartstrapAttribute *s_raw_attribute; static SmartstrapAttribute *s_attr_attribute; static void prv_update_text(void) { if (smartstrap_service_is_available(0x1001)) { text_layer_set_text(s_status_layer, "Connected!"); } else { text_layer_set_text(s_status_layer, "Connecting..."); } } static void prv_did_read(SmartstrapAttribute *attr, SmartstrapResult result, const uint8_t *data, size_t length) { char str[50] = " "; if (attr == s_attr_attribute) { APP_LOG(APP_LOG_LEVEL_DEBUG, "did_read(s_attr_attribute, %d, %d)", result, length); if (result == SmartstrapResultOk ) { memcpy(str, data, length); str[length] = '\0'; snprintf(s_text_buffer1, 50, "%s", str); text_layer_set_text(s_attr_text_layer, s_text_buffer1); APP_LOG(APP_LOG_LEVEL_DEBUG, "message: %s)", str); } }else { APP_LOG(APP_LOG_LEVEL_ERROR, "did_read(<%p>, %d)", attr, result); } } static void prv_did_write(SmartstrapAttribute *attr, SmartstrapResult result) { if (attr == s_attr_attribute) { APP_LOG(APP_LOG_LEVEL_DEBUG, "did_write(s_attr_attribute, %d)", result); } else { APP_LOG(APP_LOG_LEVEL_ERROR, "did_write(<%p>, %d)", attr, result); } } static void prv_write_button_action(uint8_t button_value, uint8_t click_type) { SmartstrapResult result; if (!smartstrap_service_is_available(smartstrap_attribute_get_service_id(s_attr_attribute))) { APP_LOG(APP_LOG_LEVEL_DEBUG, "s_attr_attribute is not available"); return; } // get the write buffer uint8_t *buffer = NULL; size_t length = 0; result = smartstrap_attribute_begin_write(s_attr_attribute, &buffer, &length); if (result != SmartstrapResultOk) { APP_LOG(APP_LOG_LEVEL_ERROR, "Write of s_attr_attribute failed with result %d", result); return; } // write the data into the buffer buffer[0] = button_value; buffer[1] = click_type; // send it off result = smartstrap_attribute_end_write(s_attr_attribute, 2, false); if (result != SmartstrapResultOk) { APP_LOG(APP_LOG_LEVEL_ERROR, "Write of s_attr_attribute failed with result %d", result); } } static void prv_availablility_status_changed(SmartstrapServiceId service_id, bool is_available) { APP_LOG(APP_LOG_LEVEL_DEBUG, "Availability for 0x%x is %d", service_id, is_available); prv_update_text(); } static void prv_notified(SmartstrapAttribute *attr) { SmartstrapResult result; if (attr == s_attr_attribute) { APP_LOG(APP_LOG_LEVEL_DEBUG, "notified(s_attr_attribute)"); result = smartstrap_attribute_read(s_attr_attribute); if(result != SmartstrapResultOk) { APP_LOG(APP_LOG_LEVEL_ERROR, "Error reading attribute (<%p>, %d)", attr, result); } } else { APP_LOG(APP_LOG_LEVEL_ERROR, "notified(<%p>)", attr); } } static void up_click_handler(ClickRecognizerRef recognizer, void *context) { prv_write_button_action(0x02, 0x01); } static void select_click_handler(ClickRecognizerRef recognizer, void *context) { prv_write_button_action(0x03, 0x01); } static void down_click_handler(ClickRecognizerRef recognizer, void *context) { prv_write_button_action(0x04, 0x01); } static void click_config_provider(void *context) { window_single_click_subscribe(BUTTON_ID_UP, up_click_handler); window_single_click_subscribe(BUTTON_ID_SELECT, select_click_handler); window_single_click_subscribe(BUTTON_ID_DOWN, down_click_handler); } static void prv_main_window_load(Window *window) { s_status_layer = text_layer_create(GRect(0, 15, 144, 40)); text_layer_set_font(s_status_layer, fonts_get_system_font(FONT_KEY_GOTHIC_28)); prv_update_text(); text_layer_set_text_color(s_status_layer, GColorBlack); text_layer_set_background_color(s_status_layer, GColorClear); text_layer_set_text_alignment(s_status_layer, GTextAlignmentCenter); text_layer_set_overflow_mode(s_status_layer, GTextOverflowModeWordWrap); layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_status_layer)); s_attr_text_layer = text_layer_create(GRect(0, 60, 144, 40)); text_layer_set_font(s_attr_text_layer, fonts_get_system_font(FONT_KEY_GOTHIC_28)); text_layer_set_text(s_attr_text_layer, "-"); text_layer_set_text_color(s_attr_text_layer, GColorBlack); text_layer_set_background_color(s_attr_text_layer, GColorClear); text_layer_set_text_alignment(s_attr_text_layer, GTextAlignmentCenter); text_layer_set_overflow_mode(s_attr_text_layer, GTextOverflowModeWordWrap); layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_attr_text_layer)); } static void prv_main_window_unload(Window *window) { text_layer_destroy(s_status_layer); } static void prv_init(void) { s_main_window = window_create(); window_set_click_config_provider(s_main_window, click_config_provider); window_set_window_handlers(s_main_window, (WindowHandlers) { .load = prv_main_window_load, .unload = prv_main_window_unload }); window_stack_push(s_main_window, true); SmartstrapHandlers handlers = (SmartstrapHandlers) { .availability_did_change = prv_availablility_status_changed, .did_write = prv_did_write, .did_read = prv_did_read, .notified = prv_notified }; smartstrap_subscribe(handlers); smartstrap_set_timeout(50); s_raw_attribute = smartstrap_attribute_create(0, 0, 2000); s_attr_attribute = smartstrap_attribute_create(0x1001, 0x1001, 20); } static void prv_deinit(void) { window_destroy(s_main_window); smartstrap_unsubscribe(); smartstrap_attribute_destroy(s_raw_attribute); smartstrap_attribute_destroy(s_attr_attribute); }int main(void) { prv_init(); APP_LOG(APP_LOG_LEVEL_DEBUG, "STARTING APP"); if (s_attr_attribute && s_raw_attribute) { app_event_loop(); } APP_LOG(APP_LOG_LEVEL_DEBUG, "ENDING APP"); prv_deinit(); } 

4 en la ficha Configuración desactive construir aplitas puesto que estamos construyendo para funcionar con relojes de tiempo guijarro

5. en la pestaña compilación seleccione teléfono en vez de emulador para programar nuestro reloj real

6. ejecute el código haciendo clic en el botón play

Artículos Relacionados

Datos de sensores domóticos a la nube y en tiempo real para ver una aplicación web

Datos de sensores domóticos a la nube y en tiempo real para ver una aplicación web

Este Edison Intel con sensores de domótica está destinado a ser una estación domótica casera que se puede colocar en cualquier lugar y leido el entorno actual que envían en nube y mostrarlas en una aplicación web o aplicación móvil.IDE: Arduino lengu
Cómo coser una bolsa de pañales hermosos - ver este Tutorial y disfrutar de coser!

Cómo coser una bolsa de pañales hermosos - ver este Tutorial y disfrutar de coser!

¿Quieres coser tu propia enfermería y bolsa de pañales? Este oficio de enfermera bolsa de pañales es una idea maravillosa y sobre todo creativa para un regalo a un expectante mujer embarazada / madre y también al nacimiento. ¿Por qué don´t coser enfe
Cómo compartir y recopilar colecciones de hogar (juego)

Cómo compartir y recopilar colecciones de hogar (juego)

En mi tiempo de juego, casa, he tenido un montón de gente diciendo que no sé cómo recoger los mensajes de otros jugadores para elementos de la colección. Este es mi intento de hacer las cosas un poco más fácil para ellos. Puede parecer complicada, pe
Cómo coser un escote americano - Tutorial de costura para principiantes... DEBE VER!

Cómo coser un escote americano - Tutorial de costura para principiantes... DEBE VER!

¿Usted es un principiante y quisiera aprender a coser ropa a ti mismo? ¿Y te gustaría coser una camisa fresca / camiseta / sudadera / manga larga / camisa de jersey con un escote americano? Ver nuestro tutorial de costura gratis mostrando cómo coser
Papel DIY manualidades: Tutorial de caja de joyería papiroflexia

Papel DIY manualidades: Tutorial de caja de joyería papiroflexia

Señoras! Este fácil arte de papel es especialmente para ti! La fantástica caja de joyería de Origami es super fácil, muy útil, no tiene mucho de su tiempo para hacerse y también es una de las mejores Ideas de proyecto hogar bricolaje que puede llevar
Tutorial para pasteles miniatura arcilla de polímero - muchas variaciones e ideas!

Tutorial para pasteles miniatura arcilla de polímero - muchas variaciones e ideas!

Hello! Hoy mostrará usted varias técnicas que utilizo al hacer pequeños pasteles realista con arcilla polimérica. ¡ Son super divertido para hacer, pero requiere algo de paciencia, así tenlo en cuenta!Fuentes:Lo que se necesita sobre todo depende de
Retroceder en el tiempo! Viejo negro Floral y Cerise tarjeta

Retroceder en el tiempo! Viejo negro Floral y Cerise tarjeta

Este proyecto de cardmaking trata de usar algunos de los magníficos productos de la vieja. Que permite girar a tiempo y vaya a través de todos los kits viejo tenemos un hacer unos nuevos elementos. Esta tarjeta es de un kit de cardmaking botánico y m
Sin embargo otro DIY Tutorial de circuitos de la flexión

Sin embargo otro DIY Tutorial de circuitos de la flexión

Hay varias guías en Instructables que explican cómo hacer tus propios circuitos flex. He estado haciendo estos años y el pensamiento que compartir mi propio flujo de trabajo. Aprendí a hacer esto en Instructables me. Asegúrese de revisar el tutorial
Cómo utilizar un módulo de reconocimiento de voz serie - Arduino Tutorial

Cómo utilizar un módulo de reconocimiento de voz serie - Arduino Tutorial

En este tutorial usted aprenderá cómo utilizar un módulo - serial - de reconocimiento de voz con la placa de Arduino uno. Este módulo puede almacenar hasta 15 comandos de voz. Ésos se dividen en 3 grupos, con 5 comandos en cada grupo.Primero debemos
Seahawk hilado torsión Tutorial

Seahawk hilado torsión Tutorial

Tutorial de giro Seahawk hilado...delanahbanana.comPaso 1: Eliminación de vueltas de hilo 4 semanas de edad Primero debe quitar las vueltas de hilo antiguo. Mientras que éstos protegen el pelo, puede también secar, debemos hidratar antes de agregar n
Conducir a una página web en tiempo real usando Arduino, SensorMonkey y Processing.js

Conducir a una página web en tiempo real usando Arduino, SensorMonkey y Processing.js

visualización remota de datos en tiempo real.Este tutorial describe detalladamente cómo utilizar el servicio gratuito de SensorMonkey para datos de los sensores en tiempo real push desde un Arduino a una página web para la visualización con Processin
Cómo instalar YouTube para niños mantener a sus hijos Video ver Online seguro

Cómo instalar YouTube para niños mantener a sus hijos Video ver Online seguro

Este es un tutorial sobre cómo instalar el YouTube para los niños de la aplicación para mantener a sus hijos seguros cuando viendo videos en línea. YouTube tiene videos que son seguros para los niños, sino también videos que no desea que sus hijos a
Sabertooth Tiger - Tutorial maquillaje

Sabertooth Tiger - Tutorial maquillaje

Aquí está el tutorial para el look!dar un likey, ayudar a un tigre del sabertooth como me ;)Paso 1: La baseEmpecé con una pintura naranja oscurezca para la base.He usado un aerógrafo, pero también puede utilizar otras pinturas, pinceles y esponjasPas
Fácil manualidades divertidas para niños: cocodrilo de papel Diy Tutorial

Fácil manualidades divertidas para niños: cocodrilo de papel Diy Tutorial

¡ Niños! Añadir este feroz pero lindo Cocodrilo de papel a su colección de animales de papel. Este fácil arte de divertido para los niños es una increíble bricolaje fácil arte Idea que todos los niños les encantaría hacer. Este fantástico Tutorial de