From 9470845bad5af26bd8faf74269fcd113eaddb678 Mon Sep 17 00:00:00 2001 From: norman-andrians Date: Sun, 17 Mar 2024 11:17:56 +0700 Subject: [PATCH] Allows to set pin modes more than one --- src/controller/basic/analog.ts | 4 ++-- src/controller/basic/pin.ts | 44 ++++++++++++++++++++++++++++++++-- src/routes/api.ts | 8 ++++--- 3 files changed, 49 insertions(+), 7 deletions(-) diff --git a/src/controller/basic/analog.ts b/src/controller/basic/analog.ts index f09fcf8..e986a27 100644 --- a/src/controller/basic/analog.ts +++ b/src/controller/basic/analog.ts @@ -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 { 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 { + 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 { 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 { + 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 ] + }); } \ No newline at end of file diff --git a/src/routes/api.ts b/src/routes/api.ts index 2215cf2..974f210 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -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 => { // 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