Advertisement
maygapixel

Untitled

Apr 25th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const ToolBay  = require('../models').ToolBay;
  2. const Tool     = require('../models').Tool;
  3. const Sequence = require('../models').Sequence;
  4. const SequenceItem = require('../models').SequenceItem;
  5. const sleep = require('system-sleep');
  6. const fs = require('fs');
  7. //var serialport = require("serialport");
  8. var SerialPort = require("serialport");
  9. var Gpio = require('onoff').Gpio; //include onoff to interact with the GPIO
  10. var Pump = new Gpio(4, 'out'); //use GPIO pin 4, and specify that it is output
  11.  
  12. var dev = fs.existsSync("/dev/ttyACM0");
  13. var current_x=0, current_y=0, current_z=0;
  14. var bays = [[0, 0, 0]];
  15. var machineResponse = '';
  16. var hole_depth = 130;
  17. var bed_coordinate = [[0, 0, 0],
  18.                       [88,  13,  hole_depth], [88,  149, hole_depth], [88,  285, hole_depth], [88, 421, hole_depth],
  19.                       [224, 421, hole_depth], [224, 285, hole_depth], [224, 149, hole_depth], [224, 13, hole_depth],
  20.                       [360, 13,  hole_depth], [360, 149, hole_depth], [360, 285, hole_depth], [360, 421, hole_depth],
  21.                       [496, 421, hole_depth], [496, 285, hole_depth], [496, 149, hole_depth], [496, 13, hole_depth],
  22.                      ];
  23. Pump.writeSync(0);
  24.  
  25. if(dev) {
  26.   console.log('running on dev');
  27.   var serialPort = new SerialPort("/dev/ttyACM0", {
  28.     baudrate: 115200,
  29.     parser: SerialPort.parsers.readline("\n")
  30.   });
  31.  
  32.  
  33.   serialPort.on("open", function () {
  34.     console.log('open');
  35.     serialPort.on('data', function(data) {
  36.       console.log('data: ' + data);
  37.       machineResponse = data;
  38.       //io.sockets.emit('response', { log: data});
  39.     });
  40.   });
  41. } else {
  42.   console.log('not dev');
  43. }
  44.  
  45. var ToolBays = ToolBay.all();
  46. ToolBays.each(function(item) {
  47.   let temp_coor = [item.pos_x, item.pos_y, item.pos_z];
  48.   bays[item.bay] = temp_coor;
  49. });
  50.  
  51. var self = module.exports = {
  52.   /* UI Method */
  53.   control(req, res) {
  54.     var action = req.body.action;
  55.     var command = '';
  56.     var io = req.app.get('io');
  57.     console.log('------[ Tool Bays]------');
  58.     console.log(bays);
  59.     switch(action) {
  60.       case 'xup':
  61.         current_x+=10;
  62.         command = 'G91 G0 X10';
  63.         break;
  64.       case 'xdown':
  65.         current_x-=10;
  66.         command = 'G91 G0 X-10';
  67.         break;
  68.       case 'yup':
  69.         current_y+=10;
  70.         command = 'G91 G0 Y10';
  71.         break;
  72.       case 'ydown':
  73.         current_y-=10;
  74.         command = 'G91 G0 Y-10';
  75.         break;
  76.       case 'zup':
  77.         current_z-=10;
  78.         command = 'G91 G0 Z-10';
  79.         break;
  80.       case 'zdown':
  81.         current_z+=10;
  82.         command = 'G91 G0 Z10';
  83.         break;
  84.       case 'home':
  85.         if(dev) {
  86.           serialPort.write('$H\r');
  87.           serialPort.drain();
  88.  
  89.           command = 'G10 P0 L20 X0 Y0 Z0\r';
  90.           serialPort.write(command);
  91.           serialPort.drain();
  92.           console.log(command);
  93.         }
  94.         current_x=0
  95.         current_y=0;
  96.         current_z=0;
  97.         command = 'home';
  98.         break;
  99.       case 'soft-reset':
  100.         command = 0x18;
  101.         break;
  102.       default:
  103.         command = '$$'
  104.     };
  105.  
  106.     var buf = command+'\r';
  107.     //var buf = command;
  108.     if(dev && command!= 'home') {
  109.       serialPort.write(buf);
  110.       serialPort.drain();
  111.     }
  112.  
  113.     io.sockets.emit('response', {
  114.       current_x: current_x,
  115.       current_y: current_y,
  116.       current_z: current_z,
  117.       log: buf });
  118.     console.log(command);
  119.     res.status(200).send({'msg' : buf});
  120.     /*
  121.     return Sequence
  122.       .findAll({
  123.         include: [{
  124.           model: SequenceItem,
  125.           as: 'sequenceItem',
  126.         }],
  127.       })
  128.       .then(sequence => res.status(200).send(sequence))
  129.       .catch(error => res.status(400).send(error));
  130.     */
  131.   },
  132.  
  133.   executePlants(req, res) {
  134.     console.log(bays);
  135.     var plants_arr = JSON.parse(req.body.positions);
  136.     console.log(plants_arr);
  137.     //var positions = position_str.split(',');
  138.     //var number = positions.length;
  139.     self.moveTakeTool(2);
  140.    
  141.     for (i = 0, plant_count = plants_arr.length; i < plant_count; i++) {
  142.      
  143.       var plant_positions = plants_arr[i][1].split(',');
  144.       for (j = 0, num_count = plant_positions.length; j < num_count; j++) {
  145.         var plant_curr_pos  = parseInt(plant_positions[j]);
  146.         var command_0 = 'G90 X'+bed_coordinate[plant_curr_pos][0]+' Y'+bed_coordinate[plant_curr_pos][1];
  147.         var command_1 = 'G90 Z'+bed_coordinate[plant_curr_pos][2];
  148.         console.log('>>> '+ plants_arr[i][0] + ':' + plant_curr_pos);
  149.         if(dev) {
  150.           self.moveDipWater();
  151.           self.moveTakeSeed(plants_arr[i]);
  152.           /*
  153.           serialPort.write('G90 Z50\r');
  154.           serialPort.drain();
  155.           console.log('G90 Z50');
  156.           */
  157.  
  158.           serialPort.write(command_0+'\r');
  159.           serialPort.drain();
  160.           console.log(command_0);
  161.  
  162.           serialPort.write(command_1+'\r');
  163.           serialPort.drain();
  164.           console.log(command_1);
  165.  
  166.           sleep(2000);
  167.         }
  168.         // console.log('planting ['+i+']: '+command_0);
  169.       }
  170.     }
  171.     self.machineWait();
  172.     self.moveDropTool(2);
  173.    
  174.     self.sequenceWatering(plants_arr);
  175.     self.moveHome();
  176.     res.status(200).send({'msg' : 'success'});
  177.   },
  178.  
  179.   moveDipWater() {
  180.     console.log(':: going to dip water...');
  181.     var commands = ['G90 Z10', 'G90 X'+bays[0][0]+' Y'+bays[0][1], 'G90 Z'+bays[0][2], 'G90 Z40'];
  182.     if(dev) {
  183.       for(var i=0, len = commands.length; i < len; i++) {
  184.         serialPort.write(commands[i]+ '\r');
  185.         serialPort.drain();
  186.         console.log(commands[i]);
  187.         sleep(2000);
  188.       }
  189.     }
  190.   },
  191.  
  192.   moveTakeSeed(plants_arr) {
  193.     console.log(':: going to grab tool...');
  194.     var bay_shifted = bays[3][1];
  195.     console.log('select plant: '+plants_arr[0]);
  196.     switch(parseInt(plants_arr[0])) {
  197.       case 0:
  198.         bay_shifted = parseInt(bays[3][1])-18;
  199.         break;
  200.       case 1:
  201.         bay_shifted = bays[3][1];
  202.         break;
  203.       case 2:
  204.         bay_shifted = parseInt(bays[3][1])+18;
  205.         break;
  206.     }
  207.     var commands = ['G90 Z7', 'G90 X'+bays[3][0]+' Y'+(bay_shifted), 'G90 Z'+bays[3][2], 'G90 Z40'];
  208.     if(dev) {
  209.       for(var i=0, len = commands.length; i < len; i++) {
  210.         serialPort.write(commands[i]+ '\r');
  211.         serialPort.drain();
  212.         console.log(commands[i]);
  213.         sleep(2000);
  214.       }
  215.     }
  216.   },
  217.  
  218.   sequenceWatering(plants_arr) {
  219.     for (i = 0, plant_count = plants_arr.length; i < plant_count; i++) {
  220.       var plant_positions = plants_arr[i][1].split(',');
  221.       for (j = 0, num_count = plant_positions.length; j < num_count; j++) {
  222.         var plant_curr_pos  = parseInt(plant_positions[j]);
  223.         let water_x = bed_coordinate[plant_curr_pos][0]+45;
  224.         let water_y = bed_coordinate[plant_curr_pos][1]-30;
  225.         var command_0 = 'G90 X'+water_x+' Y'+water_y;
  226.         var command_1 = 'G90 Z90';
  227.         console.log('>>> '+ plants_arr[i][0] + ':' + plant_curr_pos);
  228.         if(dev) {
  229.           serialPort.write('G90 Z50\r');
  230.           serialPort.drain();
  231.           console.log('G90 Z50');
  232.  
  233.           serialPort.write(command_0+'\r');
  234.           serialPort.drain();
  235.           console.log(command_0);
  236.  
  237.           serialPort.write(command_1+'\r');
  238.           serialPort.drain();
  239.           console.log(command_1);
  240.  
  241.           self.machineWait();
  242.           self.turnPump(1);
  243.           sleep(3000);
  244.           self.turnPump(0);
  245.         }
  246.         // console.log('planting ['+i+']: '+command_0);
  247.       }
  248.     }
  249.   },
  250.  
  251.   machineWait() {
  252.     let machineStatus = '';
  253.     while(machineStatus != 'Idle') {
  254.       while(!machineResponse.startsWith('<')) {
  255.         serialPort.write('?');
  256.         serialPort.drain();
  257.         sleep(100);
  258.       }
  259.       let arr = machineResponse.split("|");
  260.       machineResponse = '';
  261.       machineStatus = arr[0].substr(1);
  262.       console.log('machineStatus: '+machineStatus);
  263.       sleep(500);
  264.     }
  265.     console.log('end loop');
  266.   },
  267.  
  268.   turnPump(value) {
  269.     if(value == 1) {
  270.       Pump.writeSync(1);
  271.     } else {
  272.       Pump.writeSync(0); // Turn Pump off
  273.     }
  274.   },
  275.  
  276.   currentStatus() {
  277.     while(!machineResponse.startsWith('<')) {
  278.       serialPort.write('?');
  279.       serialPort.drain();
  280.       sleep(100);
  281.     }
  282.     machineResponse = '';
  283.     let arr = machineResponse.split("|");
  284.     let machineStatus = arr[0].substr(1);
  285.     //console.log(machineStatus);
  286.     return machineStatus;
  287.   },
  288.  
  289.   toolGrading(req, res) {
  290.     self.moveTakeTool(1);
  291.     var gndLevel = "Z"+req.query.gnd;
  292.     var minX = "X80";
  293.     var minY = "Y0";
  294.     var maxX = "X600";
  295.     var maxY = "Y400";
  296.     console.log("gndLevel: "+ gndLevel);
  297.    
  298.     var gradingPath = ["Z60", minX, minY, gndLevel, maxX,
  299.     "Y50", minX,
  300.     "Y100", maxX,
  301.     "Y150", minX,
  302.     "Y200", maxX,
  303.     "Y250", minX,
  304.     "Y300", maxX,
  305.     "Y350", minX,
  306.     "Y400", maxX, minY];
  307.     var command = "";
  308.     for(var i=0, len = gradingPath.length; i < len; i++) {
  309.       if(dev) {
  310.         command = "G90 "+gradingPath[i]+"\r";
  311.         serialPort.write(command);
  312.         serialPort.drain();
  313.         console.log(command);
  314.       }
  315.     }
  316.     self.moveDropTool(1);
  317.     self.moveHome();
  318.     res.status(200).send({'msg' : 'success'});
  319.   },
  320.  
  321.   moveTakeTool(bay) {
  322.     console.log(':: going to grab tool...');
  323.     var commands = ['G90 Z10', 'G90 X'+bays[bay][0], 'G90 Y'+bays[bay][1], 'G90 Z'+bays[bay][2], 'G90 X60'];
  324.     if(dev) {
  325.       for(var i=0, len = commands.length; i < len; i++) {
  326.         serialPort.write(commands[i]+ '\r');
  327.         serialPort.drain();
  328.         console.log(commands[i]);
  329.         sleep(2000);
  330.       }
  331.     }
  332.   },
  333.  
  334.   moveDropTool(bay) {
  335.     console.log(':: going to drop tool...');
  336.     var commands = ['G90 Z10', 'G90 X60', 'G90 Y'+bays[bay][1], 'G90 Z'+bays[bay][2], 'G90 X'+bays[bay][0], 'G90 Z60'];
  337.     console.log(commands);
  338.     if(dev) {
  339.       for(var i=0, len = commands.length; i < len; i++) {
  340.         serialPort.write(commands[i]+ '\r');
  341.         serialPort.drain();
  342.         console.log(commands[i]);
  343.         sleep(2000);
  344.       }
  345.     }
  346.   },
  347.  
  348.   moveHome() {
  349.     if(dev) {
  350.       serialPort.write('G90 Z10\r');
  351.       serialPort.drain();
  352.       console.log('G90 Z10');
  353.  
  354.       serialPort.write('G90 X0 Y0\r');
  355.       serialPort.drain();
  356.       console.log('G90 X0 Y0');
  357.     }
  358.   },
  359.  
  360.   coordinate(req, res) {
  361.     var command = '';
  362.     var pos_x = req.body.pos_x;
  363.     var pos_y = req.body.pos_y;
  364.  
  365.     command = 'X'+pos_x+' Y'+pos_y;
  366.  
  367.     var buf = command+'\r';
  368.     if(dev) {
  369.       serialPort.write(buf);
  370.     }
  371.     console.log(command);
  372.     res.status(200).send({'msg' : buf});
  373.   }
  374. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement