process.stdin.on('keypress', (str, key) => { if (key.ctrl && key.name === 'c') { process.exit(); } else { switch (key.name) { case 'q': pulse1 -= 10; break; case 'a': pulse1 += 10; break; case 'w': pulse2 -= 10; break; case 's': pulse2 += 10; break; case 'e': pulse3 -= 10; break; case 'd': pulse3 += 10; break; } servo1.servoWrite(pulse1); servo2.servoWrite(pulse2); servo3.servoWrite(pulse3); console.log("1: GPIO21: Steering " + pulse1); console.log("2: GPIO20: Bucket " + pulse2); console.log("3: GPIO25: Camera " + pulse3); } });
(function () { var startTickRight; echoRight.on('alert', function (level, tick) { var endTick, diff, dist; if (level == 1) { startTickRight = tick; } else { endTick = tick; diff = (endTick >> 0) - (startTickRight >> 0); // Unsigned 32 bit arithmetic dist = diff / 2 / MICROSECONDS_PER_CM; console.log(`Right: ${dist.toFixed(2)}`); } }); echoLeft.on('alert', function (level, tick) { var endTick, diff, dist; if (level == 1) { startTickLeft = tick; } else { endTick = tick; diff = (endTick >> 0) - (startTickLeft >> 0); // Unsigned 32 bit arithmetic dist = diff / 2 / MICROSECONDS_PER_CM; console.log(`Left: ${dist.toFixed(2)}`); } }); }());
moveBackward: function () { leftPower.pwmWrite(leftPowerAmount, function (err) {}); // gpio.write(this.motors.leftPower, 1, function (err) {}); gpio.write(this.motors.leftBack, 1, function (err) {}); rightPower.pwmWrite(rightPowerAmount, function (err) {}); // gpio.write(this.motors.rightPower, 1, function (err) {}); gpio.write(this.motors.rightBack, 1, function (err) {}); },
LED.prototype.setHue = function(hue, callback) { h = hue/360; var rgb = hslToRgb(h, s, l); redLED.pwmWrite(rgb[0]); greenLED.pwmWrite(rgb[1]); blueLED.pwmWrite(rgb[2]); callback(); }
LED.prototype.setBrightness = function(brightness, callback) { l = brightness/200; var rgb = hslToRgb(h, s, l); redLED.pwmWrite(rgb[0]); greenLED.pwmWrite(rgb[1]); blueLED.pwmWrite(rgb[2]); callback(); }
LED.prototype.setSaturation = function(saturation, callback) { s = saturation/100; var rgb = hslToRgb(h, s, l); redLED.pwmWrite(rgb[0]); greenLED.pwmWrite(rgb[1]); blueLED.pwmWrite(rgb[2]); callback(); }
socket.on('servos', function (data) { // move servo panPos = 0- -data.pan; if(panPos < panMin) panPos = panMin; if(panPos > panMax) panPos = panMax; pan.servoWrite( tiltPos ); // move servo tiltPos = 0- -data.tilt; if(tiltPos < tiltMin) tiltPos = tiltMin; if(tiltPos > tiltMax) tiltPos = tiltMax; tilt.servoWrite( panPos ); sendPos(); });
stop: function () { leftPower.pwmWrite(0, function (err) {}); rightPower.pwmWrite(0, function (err) {}); // gpio.write(this.motors.leftPower, 0, function (err) {}); gpio.write(this.motors.leftFront, 0, function (err) {}); gpio.write(this.motors.leftBack, 0, function (err) {}); // gpio.write(this.motors.rightPower, 0, function (err) {}); gpio.write(this.motors.rightFront, 0, function (err) {}); gpio.write(this.motors.rightBack, 0, function (err) {}); gpio.write(7, 0, function (err) {}); }
moveRightFWD: function () { rightPower.pwmWrite(rightPowerAmount, function (err) {}); // gpio.write(this.motors.rightPower, 1, function (err) {}); gpio.write(this.motors.rightFront, 1, function (err) {}); gpio.write(this.motors.rightBack, 0, function (err) {}); },
stopRight: function () { rightPower.pwmWrite(0, function (err) {}); // gpio.write(this.motors.rightPower, 0, function (err) {}); gpio.write(this.motors.rightFront, 0, function (err) {}); gpio.write(this.motors.rightBack, 0, function (err) {}); },
moveLeftFWD: function () { leftPower.pwmWrite(leftPowerAmount, function (err) {}); // gpio.write(this.motors.leftPower, 1, function (err) {}); gpio.write(this.motors.leftFront, 1, function (err) {}); gpio.write(this.motors.leftBack, 0, function (err) {}); },
function test() { red.digitalWrite(1); green.digitalWrite(0); blue.digitalWrite(0); setTimeout(function () { red.digitalWrite(0); green.digitalWrite(1); }, 2000); setTimeout(function () { green.digitalWrite(0); blue.digitalWrite(1); }, 4000); setTimeout(function () { blue.digitalWrite(0); }, 6000); }
setInterval(function () { motorSpeed.pwmWrite(dutyCycle); dutyCycle += 5; if (dutyCycle > 255) { dutyCycle = 0; } }, 20);
socket.on('led', function (data) { //makes the socket react to 'led' packets by calling this function ledOn = data.value; //updates brightness from the data object console.log(data); led.digitalWrite(ledOn); console.log(ledOn); io.sockets.emit('led', {value: data.value}); //sends the updated brightness to all connected clients });
this.updateServo = function(cb){ // half a second to move 180 degrees, with 0 as 500ms and 180 as 2400ms var newPulseWidth = calculatePulseWidth(this.currentAngle); var diff = Math.abs(lastPulseWidth - newPulseWidth); lastPulseWidth = newPulseWidth; var duration = (diff/1900) * 500 pin.servoWrite(newPulseWidth); if(cb) setTimeout(cb, duration); }
setInterval(function () { motor.servoWrite(pulseWidth); pulseWidth += increment; if (pulseWidth >= 2000) { increment = -100; } else if (pulseWidth <= 1000) { increment = 100; } }, 1000);
setInterval(function () { console.log('calling...') motor.servoWrite(pulseWidth); pulseWidth += increment; if (pulseWidth >= 2000) { increment = -100; } else if (pulseWidth <= 1000) { increment = 100; } }, 20);
(function () { var startTick; echo.on('alert', function (level, tick) { var endTick, diff; if (level == 1) { startTick = tick; } else { endTick = tick; diff = (endTick >> 0) - (startTick >> 0); // Unsigned 32 bit arithmetic console.log(diff / 2 / MICROSECDONDS_PER_CM); } }); }());
LED.prototype.setOn = function(on, callback) { if (on == true) { var rgb = hslToRgb(h, s, l); redLED.pwmWrite(rgb[0]); greenLED.pwmWrite(rgb[1]); blueLED.pwmWrite(rgb[2]); } else { redLED.pwmWrite(0); greenLED.pwmWrite(0); blueLED.pwmWrite(0); } callback(); }
setTimeout(function () { green.digitalWrite(0); blue.digitalWrite(1); }, 4000);
setTimeout(function () { blue.digitalWrite(0); }, 6000);
var Servo = function(conf){ this.currentAngle = 0; var releaseTimeout = undefined; var lastPulseWidth = 0; this.sleeping = false; var pin = new Gpio(conf.pin, {mode: Gpio.OUTPUT}); this.moveToAngle = function(angle, cb){ this.setCurrentAngle(angle, cb); } this.sleep = function(){ pin.digitalWrite(0); this.sleeping = true; } this.wake = function(){ if(this.sleeping){ this.updateServo(); this.sleeping = false; } } this.updateServo = function(cb){ // half a second to move 180 degrees, with 0 as 500ms and 180 as 2400ms var newPulseWidth = calculatePulseWidth(this.currentAngle); var diff = Math.abs(lastPulseWidth - newPulseWidth); lastPulseWidth = newPulseWidth; var duration = (diff/1900) * 500 pin.servoWrite(newPulseWidth); if(cb) setTimeout(cb, duration); } this.setCurrentAngle = function(angle, cb){ angle = Number(angle); if(angle < conf.minAngle){ this.currentAngle = conf.minAngle; }else if(angle > conf.maxAngle){ this.currentAngle = conf.maxAngle; }else{ this.currentAngle = angle; } this.updateServo(cb); this.emit('change'); } this.moveByDegrees = function(angle, cb){ this.setCurrentAngle(this.currentAngle + angle, cb); } this.moveByPercent = function(percent, cb){ this.setCurrentAngle(this.currentAngle + (((conf.maxAngle - conf.minAngle) / 100 ) * percent), cb); } var calculatePulseWidth = function(angle){ return Math.floor(conf.max - (((angle - conf.minAngle) / (conf.maxAngle - conf.minAngle)) * (conf.max - conf.min))); } this.moveToCentre = function(){ var centre = Math.floor(conf.minAngle + (conf.maxAngle - conf.minAngle)/2); this.moveToAngle(centre); } }
this.sleep = function(){ pin.digitalWrite(0); this.sleeping = true; }
var Gpio = require('pigpio').Gpio; var x = new Gpio(17, {mode: Gpio.INPUT}); var y = new Gpio(18, {mode: Gpio.INPUT}); var button = new Gpio(27, {mode: Gpio.INPUT, pullUpDown: Gpio.PUD_DOWN, edge: Gpio.RISING_EDGE}); console.log('Warning: no analog inputs on the Raspberry Pi!\nThis program just reads the button on pin GPIO27.'); button.on('interrupt', function (level) { console.log('button pressed.'); });
function executeCmd(cmd) { if (cmd.indexOf('=') > -1) { // Split a single command into a name-value pair var param = cmd.split('=')[0].trim(); // Note that value is an integer. Range is [0,1000] for servo's, [-255, 255] for reversible motors var value = parseInt(cmd.split('=')[1]); value = parseInt(value, 10); // force radix to 10 cos don't want it trying to parse hex switch (param) { case "t": value = cropToRange(value,-255,255); value = pwmDeadband(value); switch (true) { case value < 0: TRACTION_MOTOR_A.digitalWrite(1); TRACTION_MOTOR_B.digitalWrite(0); break; case value > 0: TRACTION_MOTOR_A.digitalWrite(0); TRACTION_MOTOR_B.digitalWrite(1); break; case value = 0: default: TRACTION_MOTOR_A.digitalWrite(1); TRACTION_MOTOR_B.digitalWrite(1); break; } var pwm = Math.round(Math.abs(value)); TRACTION_MOTOR_PWM.pwmWrite(pwm); break; case "a": value = cropToRange(value,-255,255); value = pwmDeadband(value); switch (true) { case value < 0: ARM_MOTOR_A.digitalWrite(1); ARM_MOTOR_B.digitalWrite(0); break; case value > 0: ARM_MOTOR_A.digitalWrite(0); ARM_MOTOR_B.digitalWrite(1); break; case value = 0: default: ARM_MOTOR_A.digitalWrite(1); ARM_MOTOR_B.digitalWrite(1); break; } ARM_MOTOR_PWM.digitalWrite(1); // Always run at full speed break; case "s": value = cropToRange(value,0,1000); var pw = Math.round(STEERING_SERVO_MIN_PULSE + ((value / 1000) * (STEERING_SERVO_MAX_PULSE - STEERING_SERVO_MIN_PULSE))); STEERING_SERVO.servoWrite(pw); break; case "b": value = cropToRange(value,0,1000); var pw = Math.round(BUCKET_SERVO_MIN_PULSE + ((value / 1000) * (BUCKET_SERVO_MAX_PULSE - BUCKET_SERVO_MIN_PULSE))); BUCKET_SERVO.servoWrite(pw); break; case "c": value = cropToRange(value,0,1000); var pw = Math.round(CAMERA_SERVO_MIN_PULSE + ((value / 1000) * (CAMERA_SERVO_MAX_PULSE - CAMERA_SERVO_MIN_PULSE))); CAMERA_SERVO.servoWrite(pw); break; } } }
/* jshint esversion:6 */ // Pin setup const LEFT_SENSOR_TRIGGER_PIN = 23; const LEFT_SENSOR_ECHO_PIN = 24; const RIGHT_SENSOR_TRIGGER_PIN = 17; const RIGHT_SENSOR_ECHO_PIN = 27; const MEASUREMENT_FREQUENCY = 400; // in milliseconds (ms) const MEASUREMENT_TIMEOUT = 1000; // in microseconds (us) // The number of microseconds it takes sound to travel 1cm at 20 degrees celcius const MICROSECONDS_PER_CM = 1e6 / 34321; var Gpio = require('pigpio').Gpio, triggerLeft = new Gpio(LEFT_SENSOR_TRIGGER_PIN, {mode: Gpio.OUTPUT}), echoLeft = new Gpio(LEFT_SENSOR_ECHO_PIN, {mode: Gpio.INPUT, alert: true}), triggerRight = new Gpio(RIGHT_SENSOR_TRIGGER_PIN, {mode: Gpio.OUTPUT}), echoRight = new Gpio(RIGHT_SENSOR_ECHO_PIN, {mode: Gpio.INPUT, alert: true}); triggerLeft.digitalWrite(0); // Make sure trigger is low triggerRight.digitalWrite(0); (function () { var startTickRight; echoRight.on('alert', function (level, tick) { var endTick, diff, dist; if (level == 1) {
button.on('interrupt', function (level) { ledOn = level; led.digitalWrite(level); io.sockets.emit('led', {value: ledOn}); });
var Gpio = require('pigpio').Gpio, url = require("url"), RaspiCam = require("raspicam"), fs = require('fs'), path = require('path'), tilt = new Gpio(23, {mode: Gpio.OUTPUT}), pan = new Gpio(18, {mode: Gpio.OUTPUT}), pulseWidth = 1000, increment = 50, index = fs.readFileSync(__dirname + '/www/pan-tilt.htm'), image = null, http = require('http'), panPos = 1300, panMin = 750, panMax = 2500, // adjust this to your needs tiltPos = 1700, tiltMin = 750, tiltMax = 2500, // adjust this to your needs captureWidth = 320, captureHeight = 320, //Canvas = require('canvas'), //Image = Canvas.Image, //canvas = new Canvas(captureWidth , captureHeight), //ctx = canvas.getContext('2d'), //img = new Image, //face_detect = require('face-detect'), is_processing_detection = false ; var sockets = {}; var camera = new RaspiCam({ mode:'timelapse', output:'./temp/shot.jpg',
setInterval(function () { triggerRight.trigger(10, 1); // Set trigger high for 10 microseconds triggerLeft.trigger(10, 1); // Set trigger high for 10 microseconds }, MEASUREMENT_FREQUENCY);
socket.on('led', function(data){ led.digitalWrite(data.value); });