首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >英特尔爱迪生node.js示例代码不适用于grove 3轴数字I2C加速度计

英特尔爱迪生node.js示例代码不适用于grove 3轴数字I2C加速度计
EN

Stack Overflow用户
提问于 2015-10-30 08:25:42
回答 1查看 372关注 0票数 0

这是英特尔提供的运行加速度计(Grove Digital)的示例代码:

代码语言:javascript
复制
// Load accelerometer
var adxl345 = require('jsupm_adxl345');

// Instantiate on I2C bus
var adxl = new adxl345.Adxl345(0);

setInterval(function()
{
    adxl.update(); // Update the data
    var raw = adxl.getRawValues(); // Read raw sensor data
    var force = adxl.getAcceleration(); // Read acceleration force (g)
    var rawvalues = raw.getitem(0) + " " + raw.getitem(1) + " " + raw.getitem(2);
    console.log("Raw Values: " + rawvalues);
    console.log("ForceX: " + force.getitem(0).toFixed(2) + " g");
    console.log("ForceY: " + force.getitem(1).toFixed(2) + " g");
    console.log("ForceZ: " + force.getitem(2).toFixed(2) + " g");
}, 1000);

它构建并上传到Edison Arduino板,但在运行时抛出以下错误:

代码语言:javascript
复制
ERROR: /home/root/.node_app_slot/main.js:10                                                                                                                                             
ERROR: var adxl = new adxl345.Adxl345(0);                                                                                                                                               
   ERROR:         ^                                                                                                                                                                     
ERROR: Error: UPM Runtime Error: Adxl345: i2c.write() control register failed                                                                                                           
    at Object.<anonymous> (/home/root/.node_app_slot/main.js:10:12)                                                                                                                     
    at Module._compile (module.js:456:26)                                                                                                                                               
    at Object.Module._extensions..js (module.js:474:10)                                                                                                                                 
    at Module.load (module.js:356:32)                                                                                                                                                   
    at Function.Module._load (module.js:312:12)                                                                                                                                         
    at Function.Module.runMain (module.js:497:10)                                                                                                                                       
    at startup (node.js:119:16)                                                                                                                                                         
    at node.js:935:3                                                                                                                                                                    

有没有想过哪里出了问题?加速度计连接到I2C端口。另一个传感器(温度)工作正常。

EN

回答 1

Stack Overflow用户

发布于 2016-07-18 16:14:29

grove acceleremoter不是ADXL345,而是解释为here的MMA7660。

下面是MMA7660的upm代码。

代码语言:javascript
复制
 var digitalAccelerometer = require('jsupm_mma7660');
    // Instantiate an MMA7660 on I2C bus 0
    var myDigitalAccelerometer = new digitalAccelerometer.MMA7660(
                    digitalAccelerometer.MMA7660_I2C_BUS, 
                    digitalAccelerometer.MMA7660_DEFAULT_I2C_ADDR);

    // place device in standby mode so we can write registers
    myDigitalAccelerometer.setModeStandby();

    // enable 64 samples per second
    myDigitalAccelerometer.setSampleRate(digitalAccelerometer.MMA7660.AUTOSLEEP_64);

// place device into active mode
myDigitalAccelerometer.setModeActive();

var x, y, z;
x = digitalAccelerometer.new_intp();
y = digitalAccelerometer.new_intp();
z = digitalAccelerometer.new_intp();

var ax, ay, az;
ax = digitalAccelerometer.new_floatp();
ay = digitalAccelerometer.new_floatp();
az = digitalAccelerometer.new_floatp();

var outputStr;

var myInterval = setInterval(function()
{
    myDigitalAccelerometer.getRawValues(x, y, z);
    outputStr = "Raw values: x = " + digitalAccelerometer.intp_value(x) +
    " y = " + digitalAccelerometer.intp_value(y) +
    " z = " + digitalAccelerometer.intp_value(z);
    console.log(outputStr);

    myDigitalAccelerometer.getAcceleration(ax, ay, az);
    outputStr = "Acceleration: x = " 
        + roundNum(digitalAccelerometer.floatp_value(ax), 6)
        + "g y = " + roundNum(digitalAccelerometer.floatp_value(ay), 6) 
        + "g z = " + roundNum(digitalAccelerometer.floatp_value(az), 6) + "g";
    console.log(outputStr);
}, 500);

// round off output to match C example, which has 6 decimal places
function roundNum(num, decimalPlaces)
{
    var extraNum = (1 / (Math.pow(10, decimalPlaces) * 1000));
    return (Math.round((num + extraNum) 
        * (Math.pow(10, decimalPlaces))) / Math.pow(10, decimalPlaces));
}

// When exiting: clear interval and print message
process.on('SIGINT', function()
{
    clearInterval(myInterval);

    // clean up memory
    digitalAccelerometer.delete_intp(x);
    digitalAccelerometer.delete_intp(y);
    digitalAccelerometer.delete_intp(z);

    digitalAccelerometer.delete_floatp(ax);
    digitalAccelerometer.delete_floatp(ay);
    digitalAccelerometer.delete_floatp(az);

    myDigitalAccelerometer.setModeStandby();

    console.log("Exiting...");
    process.exit(0);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33426997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档