Allows to set pin modes more than one

This commit is contained in:
Nomi Nonsense (Nonszy) 2024-03-17 11:17:56 +07:00
parent b176f6108e
commit 9470845bad
3 changed files with 49 additions and 7 deletions

View File

@ -3,7 +3,7 @@ import { board } from "../../setup";
import * as Promises from "../../promises";
interface AnalogState {
pin: number | string,
pin: string,
value: number
}
@ -11,7 +11,7 @@ export function analogWrite (req: Request, res: Response): Response<string | any
const { pin, value }: AnalogState = req.body;
try {
board.analogWrite(pin, value);
board.analogWrite(pin[0] == "A" ? pin.slice(1, pin.length) : pin, value);
return res.status(200).json({
status: 200,

View File

@ -3,7 +3,7 @@ import { board, suBoard } from "../../setup";
import { sPinModes } from "..";
import { Pin } from "johnny-five";
export function readPin (req: Request, res: Response) {
export function readPin (req: Request, res: Response): Response<string | any> {
const pin: string = req.params.p;
const { mode } = board.pins[pin];
@ -20,7 +20,25 @@ export function readPin (req: Request, res: Response) {
});
}
export function setPin (req: Request, res: Response) {
export function readPins (req: Request, res: Response): Response<string | any> {
const pins: string[] = req.body.p;
const pinModes = [];
pins.forEach((pin) => {
const { mode } = board.pins[pin];
pinModes.push({
pin: pin,
mode: mode
});
})
return res.status(200).json({
status: 200,
pins: [ ...pinModes ]
});
}
export function setPin (req: Request, res: Response): Response<string | any> {
const pin: string = req.params.p;
const mode: sPinModes | string = req.params.m.toUpperCase();
@ -39,4 +57,26 @@ export function setPin (req: Request, res: Response) {
],
message: `Pin ${pin} setted as ${mode}`
});
}
export function setPins (req: Request, res: Response): Response<string | any> {
type PinModes = {
pin: string,
mode: sPinModes | string
}
const { pinModes }: { pinModes: PinModes[] } = req.body;
pinModes.forEach((p) => {
const { pin, mode } = p;
board.pinMode(pin, Pin[mode]);
suBoard.PINS.pwm.push(pin);
suBoard.sort();
});
return res.status(200).json({
status: 200,
pins: [ ...pinModes ]
});
}

View File

@ -1,7 +1,7 @@
import { Response } from "express";
import { Router } from "express";
import { readPin, setPin } from "../controller/basic/pin";
import { readPin, readPins, setPin, setPins } from "../controller/basic/pin";
import { digitalRead, digitalWrite } from "../controller/basic/digital";
import { analogRead, analogWrite } from "../controller/basic/analog";
@ -20,7 +20,9 @@ router.get('/hello', (req, res: Response): Response<string> => {
// PinMode
router.get('/pin/:p', readPin);
router.get('/pins', readPins);
router.patch('/pin/:p/:m', setPin);
router.patch('/pins', setPins);
// Digital read/write
router.get('/digital/:pin', digitalRead);
@ -42,8 +44,8 @@ router.patch('/rgb-led/', writeRgbLed);
// Piezo
router.patch('/piezo/:p/:f', isPinNumeric, piezoTone);
router.patch('/piezo/note', piezoNote);
router.patch('/piezo/music/', piezoPlayNotes);
router.patch('/piezo/stop/', piezoNoTone);
router.patch('/piezo/music', piezoPlayNotes);
router.patch('/piezo/stop', piezoNoTone);
// for real-time communication is deprecated and not recommended
// use other protocol like websocket instead, we're using socket.io