86 lines
2.2 KiB
JavaScript
86 lines
2.2 KiB
JavaScript
const Bus = require('@uci/i2c').Bus,
|
|
MCP = require('@uci/mcp'),
|
|
_ = require('@uci/utils'),
|
|
pause = _.pPause,
|
|
pSeries = require('p-series')
|
|
const a = require('awaiting')
|
|
|
|
let bus = new Bus()
|
|
|
|
let ADDRS = [0x24, 0x25, 0x26, 0x27],
|
|
W = 0x09,
|
|
R = 0x0A,
|
|
WAIT = 1000
|
|
|
|
let relayBanks = ADDRS.map(devAddr => {
|
|
return new MCP.MCP23017(bus, devAddr, {
|
|
pin_cfg_default: 'output',
|
|
desc: `relays at i2c address ${devAddr.toString(16)}`
|
|
})
|
|
})
|
|
|
|
async function testbank(bank) {
|
|
await bank.init()
|
|
console.log(`initialized ${bank.desc}...now testing device write and read`)
|
|
for (let port in bank.ports) {
|
|
let pinAddr = 0
|
|
console.log(`Testing bank:${bank.desc} port:${port}`)
|
|
for (let i = 0; i < 8; i++) {
|
|
pinAddr = pinAddr + Math.pow(2, i)
|
|
let addr = pinAddr
|
|
await bank.write(portReg(W, port), pinAddr)
|
|
console.log(`Turning Port ${port} Pin(s) ${_.byteFormat(addr, { in: 'DEC', out: 'PLC' })} on`)
|
|
let resp = await bank.read(portReg(R, port), pinAddr)
|
|
// await pause(100)
|
|
console.log(`Port ${port} Pin(s) ${_.byteFormat(resp, { in: 'DEC', out: 'PLC' })} is/are on`)
|
|
await pause(100)
|
|
resp = await bank.write(portReg(W, port), 0x00)
|
|
console.log(`Clearing Relays On Port ${port} ${bank.desc}`)
|
|
await pause(500)
|
|
}
|
|
}
|
|
return `done ${bank.desc}`
|
|
}
|
|
|
|
// function seq(list, fn) {
|
|
// return async function () {
|
|
// await a.map(list, 1, fn)
|
|
// }
|
|
// }
|
|
|
|
async function aseq(list, fn) {
|
|
const resps = []
|
|
for (const item of list) {
|
|
let resp = await fn(item);
|
|
resps.push(resp)
|
|
}
|
|
return resps
|
|
}
|
|
|
|
async function testall() {
|
|
let resp = await aseq(relayBanks, testbank)
|
|
return resp
|
|
}
|
|
|
|
// testall()
|
|
// .then(resp => console.log("All done", resp))
|
|
// .catch(reason => console.error(reason));
|
|
|
|
async function readport(bank, port = 'A') {
|
|
let resp = await relayBanks[bank].readPins(port, { format: 'ARY', cmd: "olat" })
|
|
return resp
|
|
}
|
|
|
|
let bank = 1
|
|
readport(bank, 'A')
|
|
.then(resp => {
|
|
console.log(`Reading Bank ${bank} pins ${resp.value} are on`)
|
|
})
|
|
.catch(reason => console.error(reason));
|
|
|
|
//===========
|
|
|
|
function portReg(reg, port) {
|
|
if (port === 'B') { return reg += 0x10 } else { return reg }
|
|
}
|