Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const ToolBay = require('../models').ToolBay;
- const Tool = require('../models').Tool;
- const Sequence = require('../models').Sequence;
- const SequenceItem = require('../models').SequenceItem;
- const sleep = require('system-sleep');
- const fs = require('fs');
- //var serialport = require("serialport");
- var SerialPort = require("serialport");
- var Gpio = require('onoff').Gpio; //include onoff to interact with the GPIO
- var Pump = new Gpio(4, 'out'); //use GPIO pin 4, and specify that it is output
- var dev = fs.existsSync("/dev/ttyACM0");
- var current_x=0, current_y=0, current_z=0;
- var bays = [[0, 0, 0]];
- var machineResponse = '';
- var hole_depth = 130;
- var bed_coordinate = [[0, 0, 0],
- [88, 13, hole_depth], [88, 149, hole_depth], [88, 285, hole_depth], [88, 421, hole_depth],
- [224, 421, hole_depth], [224, 285, hole_depth], [224, 149, hole_depth], [224, 13, hole_depth],
- [360, 13, hole_depth], [360, 149, hole_depth], [360, 285, hole_depth], [360, 421, hole_depth],
- [496, 421, hole_depth], [496, 285, hole_depth], [496, 149, hole_depth], [496, 13, hole_depth],
- ];
- Pump.writeSync(0);
- if(dev) {
- console.log('running on dev');
- var serialPort = new SerialPort("/dev/ttyACM0", {
- baudrate: 115200,
- parser: SerialPort.parsers.readline("\n")
- });
- serialPort.on("open", function () {
- console.log('open');
- serialPort.on('data', function(data) {
- console.log('data: ' + data);
- machineResponse = data;
- //io.sockets.emit('response', { log: data});
- });
- });
- } else {
- console.log('not dev');
- }
- var ToolBays = ToolBay.all();
- ToolBays.each(function(item) {
- let temp_coor = [item.pos_x, item.pos_y, item.pos_z];
- bays[item.bay] = temp_coor;
- });
- var self = module.exports = {
- /* UI Method */
- control(req, res) {
- var action = req.body.action;
- var command = '';
- var io = req.app.get('io');
- console.log('------[ Tool Bays]------');
- console.log(bays);
- switch(action) {
- case 'xup':
- current_x+=10;
- command = 'G91 G0 X10';
- break;
- case 'xdown':
- current_x-=10;
- command = 'G91 G0 X-10';
- break;
- case 'yup':
- current_y+=10;
- command = 'G91 G0 Y10';
- break;
- case 'ydown':
- current_y-=10;
- command = 'G91 G0 Y-10';
- break;
- case 'zup':
- current_z-=10;
- command = 'G91 G0 Z-10';
- break;
- case 'zdown':
- current_z+=10;
- command = 'G91 G0 Z10';
- break;
- case 'home':
- if(dev) {
- serialPort.write('$H\r');
- serialPort.drain();
- command = 'G10 P0 L20 X0 Y0 Z0\r';
- serialPort.write(command);
- serialPort.drain();
- console.log(command);
- }
- current_x=0
- current_y=0;
- current_z=0;
- command = 'home';
- break;
- case 'soft-reset':
- command = 0x18;
- break;
- default:
- command = '$$'
- };
- var buf = command+'\r';
- //var buf = command;
- if(dev && command!= 'home') {
- serialPort.write(buf);
- serialPort.drain();
- }
- io.sockets.emit('response', {
- current_x: current_x,
- current_y: current_y,
- current_z: current_z,
- log: buf });
- console.log(command);
- res.status(200).send({'msg' : buf});
- /*
- return Sequence
- .findAll({
- include: [{
- model: SequenceItem,
- as: 'sequenceItem',
- }],
- })
- .then(sequence => res.status(200).send(sequence))
- .catch(error => res.status(400).send(error));
- */
- },
- executePlants(req, res) {
- console.log(bays);
- var plants_arr = JSON.parse(req.body.positions);
- console.log(plants_arr);
- //var positions = position_str.split(',');
- //var number = positions.length;
- self.moveTakeTool(2);
- for (i = 0, plant_count = plants_arr.length; i < plant_count; i++) {
- var plant_positions = plants_arr[i][1].split(',');
- for (j = 0, num_count = plant_positions.length; j < num_count; j++) {
- var plant_curr_pos = parseInt(plant_positions[j]);
- var command_0 = 'G90 X'+bed_coordinate[plant_curr_pos][0]+' Y'+bed_coordinate[plant_curr_pos][1];
- var command_1 = 'G90 Z'+bed_coordinate[plant_curr_pos][2];
- console.log('>>> '+ plants_arr[i][0] + ':' + plant_curr_pos);
- if(dev) {
- self.moveDipWater();
- self.moveTakeSeed(plants_arr[i]);
- /*
- serialPort.write('G90 Z50\r');
- serialPort.drain();
- console.log('G90 Z50');
- */
- serialPort.write(command_0+'\r');
- serialPort.drain();
- console.log(command_0);
- serialPort.write(command_1+'\r');
- serialPort.drain();
- console.log(command_1);
- sleep(2000);
- }
- // console.log('planting ['+i+']: '+command_0);
- }
- }
- self.machineWait();
- self.moveDropTool(2);
- self.sequenceWatering(plants_arr);
- self.moveHome();
- res.status(200).send({'msg' : 'success'});
- },
- moveDipWater() {
- console.log(':: going to dip water...');
- var commands = ['G90 Z10', 'G90 X'+bays[0][0]+' Y'+bays[0][1], 'G90 Z'+bays[0][2], 'G90 Z40'];
- if(dev) {
- for(var i=0, len = commands.length; i < len; i++) {
- serialPort.write(commands[i]+ '\r');
- serialPort.drain();
- console.log(commands[i]);
- sleep(2000);
- }
- }
- },
- moveTakeSeed(plants_arr) {
- console.log(':: going to grab tool...');
- var bay_shifted = bays[3][1];
- console.log('select plant: '+plants_arr[0]);
- switch(parseInt(plants_arr[0])) {
- case 0:
- bay_shifted = parseInt(bays[3][1])-18;
- break;
- case 1:
- bay_shifted = bays[3][1];
- break;
- case 2:
- bay_shifted = parseInt(bays[3][1])+18;
- break;
- }
- var commands = ['G90 Z7', 'G90 X'+bays[3][0]+' Y'+(bay_shifted), 'G90 Z'+bays[3][2], 'G90 Z40'];
- if(dev) {
- for(var i=0, len = commands.length; i < len; i++) {
- serialPort.write(commands[i]+ '\r');
- serialPort.drain();
- console.log(commands[i]);
- sleep(2000);
- }
- }
- },
- sequenceWatering(plants_arr) {
- for (i = 0, plant_count = plants_arr.length; i < plant_count; i++) {
- var plant_positions = plants_arr[i][1].split(',');
- for (j = 0, num_count = plant_positions.length; j < num_count; j++) {
- var plant_curr_pos = parseInt(plant_positions[j]);
- let water_x = bed_coordinate[plant_curr_pos][0]+45;
- let water_y = bed_coordinate[plant_curr_pos][1]-30;
- var command_0 = 'G90 X'+water_x+' Y'+water_y;
- var command_1 = 'G90 Z90';
- console.log('>>> '+ plants_arr[i][0] + ':' + plant_curr_pos);
- if(dev) {
- serialPort.write('G90 Z50\r');
- serialPort.drain();
- console.log('G90 Z50');
- serialPort.write(command_0+'\r');
- serialPort.drain();
- console.log(command_0);
- serialPort.write(command_1+'\r');
- serialPort.drain();
- console.log(command_1);
- self.machineWait();
- self.turnPump(1);
- sleep(3000);
- self.turnPump(0);
- }
- // console.log('planting ['+i+']: '+command_0);
- }
- }
- },
- machineWait() {
- let machineStatus = '';
- while(machineStatus != 'Idle') {
- while(!machineResponse.startsWith('<')) {
- serialPort.write('?');
- serialPort.drain();
- sleep(100);
- }
- let arr = machineResponse.split("|");
- machineResponse = '';
- machineStatus = arr[0].substr(1);
- console.log('machineStatus: '+machineStatus);
- sleep(500);
- }
- console.log('end loop');
- },
- turnPump(value) {
- if(value == 1) {
- Pump.writeSync(1);
- } else {
- Pump.writeSync(0); // Turn Pump off
- }
- },
- currentStatus() {
- while(!machineResponse.startsWith('<')) {
- serialPort.write('?');
- serialPort.drain();
- sleep(100);
- }
- machineResponse = '';
- let arr = machineResponse.split("|");
- let machineStatus = arr[0].substr(1);
- //console.log(machineStatus);
- return machineStatus;
- },
- toolGrading(req, res) {
- self.moveTakeTool(1);
- var gndLevel = "Z"+req.query.gnd;
- var minX = "X80";
- var minY = "Y0";
- var maxX = "X600";
- var maxY = "Y400";
- console.log("gndLevel: "+ gndLevel);
- var gradingPath = ["Z60", minX, minY, gndLevel, maxX,
- "Y50", minX,
- "Y100", maxX,
- "Y150", minX,
- "Y200", maxX,
- "Y250", minX,
- "Y300", maxX,
- "Y350", minX,
- "Y400", maxX, minY];
- var command = "";
- for(var i=0, len = gradingPath.length; i < len; i++) {
- if(dev) {
- command = "G90 "+gradingPath[i]+"\r";
- serialPort.write(command);
- serialPort.drain();
- console.log(command);
- }
- }
- self.moveDropTool(1);
- self.moveHome();
- res.status(200).send({'msg' : 'success'});
- },
- moveTakeTool(bay) {
- console.log(':: going to grab tool...');
- var commands = ['G90 Z10', 'G90 X'+bays[bay][0], 'G90 Y'+bays[bay][1], 'G90 Z'+bays[bay][2], 'G90 X60'];
- if(dev) {
- for(var i=0, len = commands.length; i < len; i++) {
- serialPort.write(commands[i]+ '\r');
- serialPort.drain();
- console.log(commands[i]);
- sleep(2000);
- }
- }
- },
- moveDropTool(bay) {
- console.log(':: going to drop tool...');
- var commands = ['G90 Z10', 'G90 X60', 'G90 Y'+bays[bay][1], 'G90 Z'+bays[bay][2], 'G90 X'+bays[bay][0], 'G90 Z60'];
- console.log(commands);
- if(dev) {
- for(var i=0, len = commands.length; i < len; i++) {
- serialPort.write(commands[i]+ '\r');
- serialPort.drain();
- console.log(commands[i]);
- sleep(2000);
- }
- }
- },
- moveHome() {
- if(dev) {
- serialPort.write('G90 Z10\r');
- serialPort.drain();
- console.log('G90 Z10');
- serialPort.write('G90 X0 Y0\r');
- serialPort.drain();
- console.log('G90 X0 Y0');
- }
- },
- coordinate(req, res) {
- var command = '';
- var pos_x = req.body.pos_x;
- var pos_y = req.body.pos_y;
- command = 'X'+pos_x+' Y'+pos_y;
- var buf = command+'\r';
- if(dev) {
- serialPort.write(buf);
- }
- console.log(command);
- res.status(200).send({'msg' : buf});
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement