英特尔爱迪生node.js示例代码不适用于grove 3轴数字I2C加速计
这是Intel运行Grove digital加速度计的示例代码:英特尔爱迪生node.js示例代码不适用于grove 3轴数字I2C加速计,node.js,accelerometer,intel-edison,Node.js,Accelerometer,Intel Edison,这是Intel运行Grove digital加速度计的示例代码: // 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.getRawValu
// 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);
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
它构建并上传到爱迪生Arduino板,但运行时会抛出以下错误:
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端口。另一个传感器温度正常。grove acceleremoter不是ADXL345,而是MMA7660,如前所述
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
下面是MMA7660的upm代码
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
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);
});
您确定这是您的传感器类型吗?我相信正常的grove发送的是mma7660部分:我没有看到你的错误,但是当我运行adxl345代码时,我得到了虚假的值。另外,当你在串行连接中键入“configure_edison-version”时,你得到了什么?我现在在159号。