Hmm...  I'm not getting anywhere with this. I have a TMP101 i2c device 
wired to P9_19 and P9_20.  From the command line this works:

# *i2cdetect  -y -r 1*
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- 49 -- -- -- -- -- -- 
50: -- -- -- -- UU UU UU UU -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: 70 -- -- -- -- -- -- --                         
# *i2cget -y 1 0x49*
0x17
# *i2cget -y 1 0x49*
0x1b
I stuck my figure on the device and warmed it up for the second i2cget.

Now with bonescript:
var b = require('bonescript');
var port = '/dev/i2c-0'
var TMP102 = 0x48;

b.i2cOpen(port, TMP102, {}, onI2C);

function onI2C(x) {
    // console.log(x);
    if (x.event == 'return') {
        b.i2cScan(port, onScan);
        b.i2cReadBytes(port, 0, 1, onReadByte);
    }
}

function onScan(x) {
    console.log('scan data: ' + x.data);
}

function onReadByte(x) {
    console.log('onReadByte: ' + JSON.stringify(x));
    console.log('res: ' + JSON.stringify(x.res));
}
When I run with /dev/i2c-*1* I get:

scan data: 
scan data: undefined
onReadByte: {"err":{},"res":[240],"event":"callback"}
res: [240]
onReadByte: {"event":"return","return":[240]}
res: undefined

That is, scan doesn't find anything.  If I run with /dev/i2c-*0*

scan data: 52,80
scan data: undefined
onReadByte: {"err":{},"res":[240],"event":"callback"}
res: [240]
onReadByte: {"event":"return","return":[240]}
res: undefined

Scan finds two devices, but I don't see how they relate to whats on the bus.

Any ideas?

--Mark

On Thursday, March 27, 2014 9:40:09 AM UTC-4, Jason Kridner wrote:
>
> On Wed, Mar 26, 2014 at 5:42 PM, Mark A. Yoder 
> <[email protected]<javascript:>> 
> wrote: 
> > I see the bonescript has some i2c methods.  Are there any examples out 
> there 
> > that work under Debian on the Black Bone? 
>
> Here's one that works on BoneScript 0.2.4 on Debian, but happens to be 
> calling the I2C methods from a web page: 
>
> http://jsfiddle.net/jkridner/PGL92/ [1] 
>
> I had something similar for drawing a Flot graph using the 
> accelerometer, but not sure where I posted it. 
>
> Some more running-from-webpage examples: 
> http://jsfiddle.net/user/jkridner/fiddles/ 
>
> [1] source 
> var canvas = document.getElementById("mysketch"); 
> var p = new Processing(canvas, sketchProc); 
>
> function sketchProc(pjs) { 
>     // Sketch global variables 
>     var radius = 50.0; 
>     var X, Y; 
>     var nX, nY; 
>     var delay = 16; 
>     var brightness = 0; 
>     var buttonStatus = 0; 
>     var sliderStatus = 0; 
>     var lastSliderValue = 0; 
>     var BUTTON = 'P8_19'; 
>     var SLIDER = 'P9_36'; 
>     var port = '/dev/i2c-2' 
>     var address = 0x1c; 
>
>     // Get the BoneScript library and begin updating the canvas 
>     setTargetAddress('192.168.7.2', { 
>         initialized: run 
>     }); 
>
>     function run() { 
>         var b = require('bonescript'); 
>         b.pinMode(BUTTON, b.INPUT); 
>         b.i2cOpen(port, address, {}, onI2C); 
>
>         // Setup the Processing Canvas 
>         pjs.setup = function () { 
>             pjs.size(256, 256); 
>             pjs.strokeWeight(10); 
>             pjs.frameRate(15); 
>             X = pjs.width / 2; 
>             Y = pjs.height / 2; 
>             nX = X; 
>             nY = Y; 
>         } 
>
>         // Main draw loop 
>         pjs.draw = function () { 
>             // Calculate some fading values based on the frame count 
>             radius = 50.0 + (15 - sliderStatus) * pjs.sin(pjs.frameCount / 
> 4); 
>             brightness = (radius - 40.0) / 20.0; 
>
>             // Track circle to new destination 
>             X += (nX - X) / delay; 
>             Y += (nY - Y) / delay; 
>
>             // Fill canvas grey 
>             pjs.background(100); 
>
>             // Set fill-color to blue or red, based on button status 
>             if (buttonStatus) pjs.fill(200, 30, 20) 
>             else pjs.fill(0, 121, 184); 
>
>             // Set stroke-color white 
>             pjs.stroke(255); 
>
>             // Draw circle 
>             pjs.ellipse(X, Y, radius, radius); 
>
>             // Update physical values 
>             readSlider(); 
>         } 
>
>         function readSlider() { 
>             b.analogRead(SLIDER, onAnalogRead); 
>         } 
>
>         // Handle data back from potentiometer 
>         function onAnalogRead(x) { 
>             if (!x.err && (x.value >= 0) && (x.value <= 1)) { 
>                 if (Math.abs(x.value - lastSliderValue) > 0.05) { 
>                     lastSliderValue = x.value; 
>                     sliderStatus = parseInt(x.value * 10, 10); 
>                 } 
>             } 
>
>             // Fetch button status 
>             b.digitalRead(BUTTON, onDigitalRead); 
>
>         } 
>
>         // Handle data back from button 
>         function onDigitalRead(x) { 
>             buttonStatus = (x.value == b.LOW) ? 1 : 0; 
>
>             // Fetch accelerometer status 
>             readAccel(); 
>         } 
>
>         function onI2C(x) { 
>             if (x.event == 'return') { 
>                 b.i2cWriteBytes(port, 0x2a, [0x00], onI2C_A); 
>             } 
>         } 
>
>         function onI2C_A() { 
>             b.i2cWriteBytes(port, 0x0e, [0x00], onI2C_B); 
>         } 
>
>         function onI2C_B() { 
>             b.i2cWriteBytes(port, 0x2a, [0x01], pjs.setup); 
>         } 
>
>         // Fetch accelerometer status 
>         function readAccel() { 
>             b.i2cReadBytes(port, 1, 6, onReadBytes); 
>         } 
>
>         function onReadBytes(x) { 
>             console.log(JSON.stringify(x)); 
>             if (x.event == 'callback') { 
>                 var gX = convertToG(x.res[0]); 
>                 var gY = convertToG(x.res[2]); 
>                 var gZ = convertToG(x.res[4]); 
>                 $('#X').html(gX); 
>                 $('#Y').html(gY); 
>                 $('#Z').html(gZ); 
>
>                 // Update heading of ball 
>                 nX = 128 - (gX / 2) * 256; 
>                 nY = (gY / 2) * 256 + 128; 
>
>                 //pjs.draw(); 
>             } 
>         } 
>
>         function convertToG(x) { 
>             if (x >= 128) x = -((x ^ 0xFF) + 1); // Get two's complement 
>             x = x / 64; // Scale to G 
>             x = x.toFixed(2); // Limit decimal places 
>             return (x); 
>         } 
>     } 
> } 
>
> > 
> > --Mark 
> > 
> > -- 
> > For more options, visit http://beagleboard.org/discuss 
> > --- 
> > You received this message because you are subscribed to the Google 
> Groups 
> > "BeagleBoard" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an 
> > email to [email protected] <javascript:>. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to