Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
1 result

motorVirtualMachine.js

Blame
  • motorVirtualMachine.js 2.05 KiB
    /*
    tempVirtualMachine.js
    
    vm for stepper motors 
    
    Jake Read at the Center for Bits and Atoms
    (c) Massachusetts Institute of Technology 2021
    
    This work may be reproduced, modified, distributed, performed, and
    displayed for any purpose, but must acknowledge the open systems assembly protocol (OSAP) project.
    Copyright is retained and must be preserved. The work is provided as is;
    no warranty is provided, and users accept all liability.
    */
    
    import { TS } from '../osapjs/core/ts.js'
    
    export default function MotorVM(osap, route) {
      
      // 1st (0th) axis pick
      let axisPickEP = osap.endpoint()
      axisPickEP.addRoute(route, TS.endpoint(0, 0), 512)
      this.setAxisPick = (pick) => {
        let datagram = new Uint8Array(1)
        TS.write('uint8', pick, datagram, 0, true)
        return new Promise((resolve, reject) => {
          axisPickEP.write(datagram).then(() => {
            resolve()
          }).catch((err) => { reject(err) })  
        })
      }
      
      // axis invert, 
      let axisInvertEP = osap.endpoint()
      axisInvertEP.addRoute(route, TS.endpoint(0, 1), 512)
      this.setAxisInversion = (invert) => {
        let datagram = new Uint8Array(1)
        TS.write('boolean', invert, datagram, 0, true)
        return new Promise((resolve, reject) => {
          axisInvertEP.write(datagram).then(() => {
            resolve()
          }).catch((err) => { reject(err) })  
        })
      }
    
      // steps per unit 
      let spuEP = osap.endpoint()
      spuEP.addRoute(route, TS.endpoint(0, 2), 512)
      this.setSPU = (spu) => {
        let datagram = new Uint8Array(4)
        TS.write('float32', spu, datagram, 0, true)
        return new Promise((resolve, reject) => {
          spuEP.write(datagram).then(() => {
            resolve()
          }).catch((err) => { reject(err) })  
        })
      }
    
      // current scaling 0-1 
      let cscaleEP = osap.endpoint()
      cscaleEP.addRoute(route, TS.endpoint(0, 3), 512)
      this.setCScale = (cscale) => {
        let datagram = new Uint8Array(4)
        TS.write('float32', cscale, datagram, 0, true)
        return new Promise((resolve, reject) => {
          cscaleEP.write(datagram).then(() => {
            resolve()
          }).catch((err) => { reject(err) })  
        })
      }
    }