uci-mcp/test/test-relays.js

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 }
}