const i2cBus = require("i2c-bus") const { Pca9685Driver } = require("pca9685") const RPIO = require("rpio"); const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)) class ContrlService { constructor() { // PWM 和 舵机配置 this.pwmOption = { i2c: i2cBus.openSync(1), // 树莓派1:scl1 address: 0x40, //板子地址 frequency: 50, //频率 debug: false } // init PWM this.PWM = new Pca9685Driver(this.pwmOption, er => { if (er) { console.error("Error initializing PCA9685"); } }) // prio init RPIO.init({ mapping: "gpio" }); // init PWM this.ins = 0 this.timer = 0 // test Pwm this.num = 0 this.startInt() } // 测试全程找中位 startInt() { console.log('start'); RPIO.open(6, RPIO.OUTPUT, RPIO.HIGH); RPIO.open(13, RPIO.OUTPUT, RPIO.HIGH); RPIO.open(19, RPIO.OUTPUT, RPIO.HIGH); this.timer = setInterval(() => { this.num++ // if (this.num >= 255) { // // 继电器停止 // RPIO.open(6, RPIO.OUTPUT, RPIO.LOW); // RPIO.open(13, RPIO.OUTPUT, RPIO.LOW); // RPIO.open(19, RPIO.OUTPUT, RPIO.LOW); // clearInterval(this.timer); // this.num = 0 // console.log('end'); // return // } // 寻找中位=>120-130 if(this.num >= 120 && this.num <= 130){ this.PWM.setPulseLength(this.ins, this.Servo2pwm(this.num)); clearInterval(this.timer); console.log('center',this.num); return } this.PWM.setPulseLength(this.ins, this.Servo2pwm(10)); console.log(this.num); }, 50); } /** * 舵机换算比例:摇杆范围0-256,PWM范围1000~1500~2000 * @param {number} v * @returns */ Servo2pwm(v) { return parseInt(v / (256 / 1000)) + 1000 } } new ContrlService()