johnny-five is very promising
This commit is contained in:
6
src/controller/index.d.ts
vendored
6
src/controller/index.d.ts
vendored
@@ -1,11 +1,11 @@
|
||||
|
||||
export type digitalValue = 'ON' | 'OFF';
|
||||
export type voltage = 'HIGH' | 'LOW';
|
||||
export type sPinModes = 'INPUT' | 'OUTPUT' | 'ANALOG' | 'PWM' | 'SERVO' |'SHIFT' |'I2C' |'ONEWIRE' |'STEPPER' |'SERIAL' |'PULLUP' |'IGNORE' |'PING_READ' | 'UNKOWN';
|
||||
export type voltage = 'HIGH' | 'LOW' | 'high' | 'low' | 1 | 0;
|
||||
export type sPinModes = 'INPUT' | 'OUTPUT' | 'ANALOG' | 'PWM' | 'SERVO';
|
||||
|
||||
export interface ChannelPins {
|
||||
pin: number,
|
||||
value: digitalValue
|
||||
value: boolean
|
||||
}
|
||||
|
||||
export interface ColorChannel {
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import { Request, Response } from "express";
|
||||
import { board } from "../setup";
|
||||
import { ChannelPins, digitalValue, voltage } from ".";
|
||||
import { digitalRead } from "../promises";
|
||||
import { analogRead, digitalRead } from "../promises";
|
||||
import { Led } from "johnny-five";
|
||||
|
||||
|
||||
export async function readLed (req: Request, res: Response) {
|
||||
@@ -44,12 +45,12 @@ export async function writeLed (req: Request, res: Response) {
|
||||
switch (act) {
|
||||
case 'on':
|
||||
state = 'ON';
|
||||
volt = 'HIGH';
|
||||
volt = 1;
|
||||
console.log(`${req.hostname} | ${pin} | LED: ${state}`);
|
||||
break;
|
||||
case 'off':
|
||||
state = 'OFF';
|
||||
volt = 'LOW';
|
||||
volt = 0;
|
||||
console.log(`${req.hostname} | ${pin} | LED: ${state}`);
|
||||
break;
|
||||
default:
|
||||
@@ -60,7 +61,7 @@ export async function writeLed (req: Request, res: Response) {
|
||||
});
|
||||
}
|
||||
|
||||
board.digitalWrite(pin, board[volt]);
|
||||
board.digitalWrite(pin, volt);
|
||||
|
||||
res.status(200).json({
|
||||
status: 200,
|
||||
@@ -79,43 +80,51 @@ export async function writeLed (req: Request, res: Response) {
|
||||
|
||||
export async function readRgbLed (req: Request, res: Response) {
|
||||
const r: number = Number.parseInt(req.body.r);
|
||||
const g: number = Number.parseInt(req.body.b);
|
||||
const g: number = Number.parseInt(req.body.g);
|
||||
const b: number = Number.parseInt(req.body.b);
|
||||
|
||||
const rgbPins: number[] = Object.values({ r, g, b });
|
||||
const pinStates: number[] = [];
|
||||
|
||||
for (let i = 0; i < rgbPins.length; i++) {
|
||||
const pin = rgbPins[i];
|
||||
|
||||
if (Number.isNaN(pin)) {
|
||||
return res.status(400).json({
|
||||
status: 400,
|
||||
message: `Invalid pin ${pin} param, it should be integer`
|
||||
});
|
||||
}
|
||||
|
||||
const state: number = await digitalRead(board, pin);
|
||||
pinStates.push(state);
|
||||
}
|
||||
|
||||
const led = new Led.RGB({
|
||||
pins: {
|
||||
red: r,
|
||||
green: g,
|
||||
blue: b
|
||||
},
|
||||
isAnode: true
|
||||
})
|
||||
|
||||
led.red = new Led(r);
|
||||
led.green = new Led(g);
|
||||
led.blue = new Led(b);
|
||||
|
||||
return res.status(200).json({
|
||||
status: 200,
|
||||
pin_state: {
|
||||
[r]: pinStates[0],
|
||||
[g]: pinStates[1],
|
||||
[b]: pinStates[2]
|
||||
[r]: led.red.isOn,
|
||||
[g]: led.green.isOn,
|
||||
[b]: led.blue.isOn
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export async function writeRgbLed (req: Request, res: Response) {
|
||||
const r: ChannelPins = req.body.r;
|
||||
const g: ChannelPins = req.body.b;
|
||||
const g: ChannelPins = req.body.g;
|
||||
const b: ChannelPins = req.body.b;
|
||||
|
||||
const rgbLeds: ChannelPins[] = Object.values({ r, g, b });
|
||||
|
||||
|
||||
try {
|
||||
rgbLeds.forEach((led, i) => {
|
||||
if (Number.isNaN(led.pin)) {
|
||||
@@ -124,23 +133,27 @@ export async function writeRgbLed (req: Request, res: Response) {
|
||||
message: `Invalid pin ${led.pin} param, it should be integer`
|
||||
});
|
||||
}
|
||||
|
||||
switch (led.value) {
|
||||
case 'ON':
|
||||
board.analogWrite(led.pin, board.HIGH);
|
||||
console.log(`${req.hostname} | ${led.pin} | LED: ${led.value}`);
|
||||
break;
|
||||
case 'OFF':
|
||||
board.analogWrite(led.pin, board.LOW);
|
||||
console.log(`${req.hostname} | ${led.pin} | LED: ${led.value}`);
|
||||
break;
|
||||
default:
|
||||
console.log(`${req.hostname} | ${led.pin} | LED: INVALID VALUE`);
|
||||
}
|
||||
})
|
||||
|
||||
const pins: string[] = rgbLeds.map(c => `${c.pin}, `);
|
||||
const values: string[] = rgbLeds.map(c => `${c.value}, `);
|
||||
const led = new Led.RGB({
|
||||
pins: {
|
||||
red: r.pin,
|
||||
green: g.pin,
|
||||
blue: b.pin
|
||||
},
|
||||
isAnode: true
|
||||
})
|
||||
|
||||
led.red = new Led(r.pin);
|
||||
led.green = new Led(g.pin);
|
||||
led.blue = new Led(b.pin);
|
||||
|
||||
if (r.value == true) led.red.on(); else led.red.off();
|
||||
if (g.value == true) led.green.on(); else led.green.off();
|
||||
if (b.value == true) led.blue.on(); else led.blue.off();
|
||||
|
||||
const pins: string = rgbLeds.map(c => c.pin.toString()).join(", ");
|
||||
const values: string = rgbLeds.map(c => `${c.value}`).join(", ");
|
||||
|
||||
res.status(200).json({
|
||||
status: 200,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Request, Response } from "express";
|
||||
import { board, suBoard } from "../setup";
|
||||
import { sPinModes } from ".";
|
||||
import { Pin } from "johnny-five";
|
||||
|
||||
export function readPin (req: Request, res: Response) {
|
||||
const pin: number = Number.parseInt(req.params.p);
|
||||
@@ -34,7 +35,7 @@ export function setPin (req: Request, res: Response) {
|
||||
});
|
||||
}
|
||||
|
||||
board.pinMode(pin, board.MODES[mode]);
|
||||
board.pinMode(pin, Pin[mode]);
|
||||
|
||||
suBoard.PINS.pwm.push(pin);
|
||||
suBoard.sort();
|
||||
|
||||
@@ -32,4 +32,8 @@ app.listen(port, host, () => {
|
||||
console.log(chalk.green(`Board at port ${comport} Connected!! \(^o^)/`));
|
||||
suBoard.connected = true;
|
||||
})
|
||||
|
||||
board.on('exit', () => {
|
||||
console.log("Bye bye");
|
||||
})
|
||||
});
|
||||
@@ -1,5 +1,5 @@
|
||||
import { NextFunction, Request, Response } from "express";
|
||||
import { suBoard } from "../setup";
|
||||
import { board, suBoard } from "../setup";
|
||||
|
||||
export function isBoardConnected (req: Request, res: Response, next: NextFunction) {
|
||||
if (suBoard.connected) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import Board, { PIN_MODE } from "firmata";
|
||||
import { Board } from "johnny-five";
|
||||
|
||||
export function digitalRead (board: Board, pin: number): Promise<PIN_MODE | number> {
|
||||
export function digitalRead (board: Board, pin: number): Promise<number> {
|
||||
return new Promise((resolve, reject) => {
|
||||
board.digitalRead(pin, (val) => {
|
||||
resolve(val);
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
import Firmata from 'firmata';
|
||||
import { SuBoard } from './support';
|
||||
import { Board } from 'johnny-five';
|
||||
|
||||
export const comport: string = '/dev/ttyUSB1';
|
||||
export const board: Firmata = new Firmata(comport);
|
||||
export const comport: string = '/dev/ttyUSB0';
|
||||
export const board: Board = new Board({
|
||||
port: comport,
|
||||
repl: false,
|
||||
debug: false
|
||||
});
|
||||
|
||||
export const suBoard: SuBoard = new SuBoard();
|
||||
Reference in New Issue
Block a user