Avatar for Benceee

Benceee

Member since Feb 2014 • Last active Mar 2014
  • 1 conversations
  • 2 comments

I'm a web developer in Hungary.
With espruino and javascript i will create small robots and publish them on blog.

Espruino Hungary blog:
http://espruinohungary.blogspot.hu

Most recent activity

  • in Projects
    Avatar for Benceee

    This project is a wireless controlled 2 wheeled robot.

    Master hardware:
    -Espruino 1v54

    • Wii nunchuck (B10, B11)
    • NRF24L01P wireless chip

      Master software code:

    var btn_state=false;
    var read_wii,wii_data,wii_data_new;
    SPI1.setup({sck:A5, miso:A6, mosi:A7});
    //I2C1.setup({scl:B6,sda:B7}); // slave
    I2C2.setup({scl:B10,sda:B11}); //master
    var nrf = require("NRF24L01P").connect( SPI1, B0, B1 );
    var wii = require("wii_nunchuck").connect(I2C2);
    function onInit() {
      nrf.init([0,0,0,0,2], [0,0,0,0,1]);
      wii_data_new=wii_data;
    }
    onInit();
    setInterval(function() {
      nrf.masterHandler();
    }, 50);
    function start_wii_read(){
      read_wii = setInterval(function(){
        //console.log(JSON.Stringify(wii.read())­);
        wii_data_new=wii.read();
        //console.log(wii_data.joy);
        if(wii_data.btn.z!==wii_data_new.btn.z){­
          if(wii_data_new.btn.z){ wii_btn_z_press(); } else { wii_btn_z_release(); }
        }
        if(wii_data.btn.c!==wii_data_new.btn.c){­
          if(wii_data_new.btn.c){ wii_btn_c_press(); } else { wii_btn_c_release(); }
        }
        wii_data=wii_data_new;
      },20);
    }
    function stop_wii_read(){
        clearInterval(start_read);
    }
    
    function wii_btn_z_press(){
      //console.log("Z");
      LED2.set();
      nrf.sendCommand("MOTOR(0,1,0,1);",functi­on(r){});
      //nrf.sendCommand("LED2.set();",function­(r){});
    }
    function wii_btn_c_press(){
      LED1.set();
      nrf.sendCommand("MOTOR(1,0,1,0);",functi­on(r){});
      //console.log("C");
    }
    function wii_btn_z_release(){
      LED2.reset();
      nrf.sendCommand("MOTOR(0,0,0,0);",functi­on(r){});
      //nrf.sendCommand("LED2.reset();",functi­on(r){});
      //console.log("stopZ");
    }
    function wii_btn_c_release(){
      //console.log("stopC");
      LED1.reset();
      nrf.sendCommand("MOTOR(0,0,0,0);",functi­on(r){});
      //nrf.sendCommand("LED1.reset();",functi­on(r){});
      //console.log("stopC");
    }
    
    function led_on() {
        LED3.set();
    }
    
    function led_off() {
        LED3.reset();
    }
    
    wii_data=wii.read();
    
    btn_watch_press = setWatch(function(){
        if(!btn_state){
            led_on();
            start_wii_read();
        } else {
            led_off();
            stop_wii_read();
        }
        btn_state=!btn_state;
    },BTN,{repeat:true,edge:'rising'});
    btn_watch_release = setWatch(function(){
        console.log(btn_state);
    },BTN,{repeat:true,edge:'falling'});
    

    Slave hardware:
    -Espruino 1v53
    -L298N motor controller board with 2 hacked micro servo motor used as simple DC motor
    -NRF24L01P wireless chip
    -6xAA wired in series rechargeable 2000mAh battery

    Slave software code:

    /* NRF24L01P - wireless */
    SPI1.setup({sck:A5, miso:A6, mosi:A7});
    var nrf = require("NRF24L01P").connect( SPI1, B0, B1 );
    function onInit() {
      nrf.init([0,0,0,0,1], [0,0,0,0,2]);
    }
    onInit();
    setInterval(function() {
      nrf.slaveHandler();
    }, 50);
    
    /* motor controller */
    var MOTOR_PINS=[C9,C8,C7,C6];
    function MOTOR(val1,val2,val3,val4){
      digitalWrite(MOTOR_PINS[0],parseInt(val1­));
      digitalWrite(MOTOR_PINS[1],parseInt(val2­));
      digitalWrite(MOTOR_PINS[2],parseInt(val3­));
      digitalWrite(MOTOR_PINS[3],parseInt(val4­));
    }
    

    Sometimes NRF24L01P on master trow an error: TX not received 30

    Wii nunchuk I2C port BUSY. Got error message when try to save() to master espruino.
    Error message:

    INTERNAL ERROR: Timeout on I2C Read BUSY
    INTERNAL ERROR: Timeout on I2C Read SB
    INTERNAL ERROR: Timeout on I2C Read Receive Mode
    INTERNAL ERROR: Timeout on I2C Read Receive
    INTERNAL ERROR: Timeout on I2C Read Receive
    INTERNAL ERROR: Timeout on I2C Read Receive
    INTERNAL ERROR: Timeout on I2C Read Receive
    INTERNAL ERROR: Timeout on I2C Read Receive
    INTERNAL ERROR: Timeout on I2C Read Receive
    INTERNAL ERROR: Timeout on I2C Read STOP
    at line 1 col 23
    {var a=b.readFrom(82,6);b.writeTo(82,0);retur­n{joy:{x:(a[0]-127)/128,y:(a[1]-127)/128­},acc:{x:(a[2]-127)/54,y:(a[3]-127)/54,z­:(a[4]-127)/54},btn:{z:!(a[5]&1),c:!(a[5­]&2)}}}

                       ^
    

    in function "read" called from line 3 col 27
    in function called from system
    Execution Interrupted during event processing - clearing all timers and watches.

    Video:
    https://vimeo.com/87922368

Actions