Espruino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2543|回复: 0

水平小球

[复制链接]

6

主题

21

帖子

110

积分

注册会员

Rank: 2

积分
110
发表于 2014-7-11 01:55:18 | 显示全部楼层 |阅读模式
跟随重力方向滚动的小球

sharp 的 memory lcd的刷新率太低了,肉眼看起来不是很流畅,效果很一般.
可能不太适合做动画效果.

[mw_shl_code=javascript,true]/*

    屏幕中滚动的小球, 根据重力实现交互, 类似于水平仪
    by qq:20437023

*/

// 加速度传感器初始化
I2C1.setup({scl:B6, sda:B7});
var accel = require("ADXL345").connect(I2C1,0,3);
accel.measure(true);
clearInterval();

// 屏幕初始化
SPI1.setup({ sck:B3, mosi:B5, order: "lsb", baud: 1000000 });
var g = require("MemoryLCD").connect(SPI1, B4/*SCS*/, C12/*EXTCOMIN*/,128/*宽*/, 128/*高*/);
// 设置字体
g.setFontVector(10);

/* 留边 */
var gap = 8;
var w = g.getWidth()-gap;
var h = g.getHeight()-gap;
var x= w/2;
var y= h/2;

/* 定时器调用间隔 ( 毫秒 ) */
var interval = 5;

var count =0;
setInterval(function(){

  /*
  // 倾斜控制不同的 LED
  if(accel.read().x<-0.25)
    digitalWrite([LED3,LED2,LED1],0b100);
  else if(accel.read().x>0.25)
    digitalWrite([LED3,LED2,LED1],0b001);
  else
    digitalWrite([LED3,LED2,LED1],0b010);
  */


  var curX = accel.read().y;
  var curY = accel.read().x;
  /* 输出调试信息 */
  console.log(curX,curY);

  if(curX>0)
    x--;
  if(curX<0)
    x++;
  if(curY>0)
    y--;
  if(curY<0)
    y++;
  /* 边界检测 */
  x=x<0?0:x;
  y=y<0?0:y;
  x=x>w?w:x;
  y=y>h?h:y;

  /* 每 n 次 刷新一次屏幕 */
  var n=5;
  if(++count% n ===0){
    /* 刷新率 = 1000 毫秒 / n * interval */
    g.clear();/* 不知道有没有局部清屏函数? */
    g.drawString("*",x,y);/* 为了方便, 就用写字函数吧 */
    g.flip();
  }
},interval);/* 更多次数的检测坐标, 以保证更灵敏 */


save();
[/mw_shl_code]

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|Espruino中文社区 ( 苏14007051 )

GMT+8, 2019-7-19 14:04 , Processed in 0.240195 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表