From 737a2e2fd3585e410ddad3529cb9d4491464a42f Mon Sep 17 00:00:00 2001 From: norman-andrians Date: Tue, 5 Mar 2024 00:50:49 +0700 Subject: [PATCH] servo and photoresistor in http routes --- src/controller/photoresistor.ts | 15 +++++++++++++++ src/controller/servo.ts | 22 ++++++++++++++++++++++ src/promises/index.ts | 2 +- src/routes/api.ts | 8 ++++++++ 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 src/controller/photoresistor.ts diff --git a/src/controller/photoresistor.ts b/src/controller/photoresistor.ts new file mode 100644 index 0000000..4f67a95 --- /dev/null +++ b/src/controller/photoresistor.ts @@ -0,0 +1,15 @@ +import { Request, Response } from "express"; +import { board } from "../setup"; +import { analogRead } from "../promises"; + +export async function readResistor (req: Request, res: Response): Promise> { + const { p } = req.params; + const pin: string = req.params.p.startsWith("A") ? req.params.p.slice(0, p.length) : req.params.p; + + const resistance = await analogRead(board, pin); + + return res.status(200).json({ + status: 200, + message: `Analog pin ${p} resistance as ${resistance}°` + }); +} \ No newline at end of file diff --git a/src/controller/servo.ts b/src/controller/servo.ts index e69de29..7eb19c7 100644 --- a/src/controller/servo.ts +++ b/src/controller/servo.ts @@ -0,0 +1,22 @@ +import { Request, Response } from "express"; +import { board } from "../setup"; + +export function rotateServo (req: Request, res: Response): Response { + const { p } = req.params; + const pin: string = req.params.p.startsWith("A") ? req.params.p.slice(0, p.length) : req.params.p; + const angle: number = Number.parseInt(req.params.ang); + + if (Number.isNaN(angle)) { + return res.status(400).json({ + status: 400, + message: 'Invalid angle param, it should be integer' + }); + } + + board.servoWrite(pin, angle); + + return res.status(200).json({ + status: 200, + message: `Pin ${p} rotate as ${angle}°` + }); +} \ No newline at end of file diff --git a/src/promises/index.ts b/src/promises/index.ts index 75fed50..ae8ffd5 100644 --- a/src/promises/index.ts +++ b/src/promises/index.ts @@ -11,7 +11,7 @@ export function digitalRead (board: Board, pin: number): Promise { }); } -export function analogRead (board: Board, pin: number): Promise { +export function analogRead (board: Board, pin: string): Promise { return new Promise((resolve, reject) => { board.analogRead(pin, (val) => { resolve(val); diff --git a/src/routes/api.ts b/src/routes/api.ts index e14bfd8..8751bb9 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -4,6 +4,9 @@ import { Router } from "express"; import { readLed, readRgbLed, writeLed, writeRgbLed } from "../controller/led"; import { readPin, setPin } from "../controller/pin"; import { piezoNoTone, piezoPlayNotes, piezoTone } from "../controller/piezo"; +import { rotateServo } from "../controller/servo"; +import { readResistor } from "../controller/photoresistor"; + import { isPinNumeric } from "../middleware/pin"; const router: Router = Router(); @@ -25,4 +28,9 @@ router.patch('/piezo/', piezoTone); router.patch('/piezo/stop/', piezoNoTone); router.patch('/piezo/music/', piezoPlayNotes); +// for real-time communication is deprecated and not recommended +// use other protocol like websocket instead +router.patch('/servo/:p/:m', rotateServo); +router.get('/photoresistor/:p', readResistor); + export default router; \ No newline at end of file