【问题标题】:Buzz (vibes) at o'clock hours?凌晨的嗡嗡声(共鸣)?
【发布时间】:2015-10-10 23:40:03
【问题描述】:

一个非常基本的问题,我已经尝试自己解决了几个小时但无法解决。

所以我正在为 Pebble 创建我的第一个表盘,我希望手表每小时发出一次嗡嗡声(振动)。您还记得一些数字手表在点钟时会发出“哔”声吗?嗯,就是这样。

我认为最简单的方法是:

if (tick_time->tm_min == 0) {
    vibes_short_pulse();
}

效果很好。现在我有一个小错误。在那一分钟内,如果重新创建了窗口(例如,如果您转到时间线或打开手表应用程序并快速返回到我的表盘),则再次调用 update_time() 以使其再次发出嗡嗡声。不是一个大错误,但有点烦人。

我尝试使用布尔标志来解决问题。

static bool vibed = false;

然后,

if (tick_time->tm_min != 0) {
    vibed = false;
}

if (tick_time->tm_min == 0 && vibed == false) {
    vibes_short_pulse();
    vibed = true;
}

但显然,每次重新创建窗口时,无论如何,标志都会返回“false”。

我不知道如何解决它。如果您对我有提示,将不胜感激。谢谢!

【问题讨论】:

  • 存储它振动的最后一个小时,仅在 minites 为零且小时不同时振动和更新存储的小时。但是框架可能会提供更好的方法(为什么一定要显示更新?)
  • 你在哪里声明 vibed?如果您发布更多代码会有所帮助。

标签: c pebble-watch pebble-sdk


【解决方案1】:

检查小时变化事件,而不是检查分钟是否为零,例如:

void tick_handler(struct tm *tick_time, TimeUnits units_changed)
{

  // Some other code that display/process time  

  // on hour change do a short buzz
  if (units_changed & HOUR_UNIT) {
      vibes_short_pulse();
  }


}    

【讨论】:

  • 抱歉我的无知,什么是“HOUR_UNIT”?谢谢。
  • @AirieFenix 当您的计时器滴答事件触发时,unit_changed 参数包含导致滴答的位表示 - 它可能是第二次更改;秒变和分变;秒变化,分钟变化和小时变化。要区分它们,您可以在该参数和此处描述的枚举值之一之间执行二进制 AND:developer.getpebble.com/docs/c/Foundation/Event_Service/…。 HOUR_UNIT 代表小时,如果该操作产生非零值 - 你知道小时实际上改变了。
【解决方案2】:

我会记住你最后一次嗡嗡声的时间。只有当它不同时才会发出嗡嗡声。所以:

//initialize to impossible hour so it works the first time
static int lastBuzzHour=-1;
if (tick_time->tm_hour !=lastBuzzHour) {
    vibes_short_pulse();
    // now that you've buzzed, remember it so you don't retrigger
    lastBuzzHour=tick_time->tm_hour;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 2011-02-27
    • 1970-01-01
    • 2011-10-08
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多