import PinBox from "../forms/PinBox"; import ControlSection from "../ControlSection"; import { PatchPiezo } from "../../controllers/BoardController"; import { ChangeEvent, Ref, useEffect, useState } from "react"; import { usePiezo } from "../../hooks"; import { DynamicPinState } from "../../types/board"; import EvoInput from "../forms/EvoInput"; import Button from "../forms/Button"; function PiezoItem ({ piezo, index }: { piezo: DynamicPinState, index: number }) { const { setFrequency, setPiezoPin, removePiezo } = usePiezo(); const [freq, setFreq] = useState(piezo.state); const handlePinChange = (e: ChangeEvent) => { const pin = e.target?.value; setPiezoPin(index, pin); } const handleFreqChange = (e: ChangeEvent) => { setFreq(e.target.value); } const handleDelete = () => { removePiezo(index); } const handlePatch = () => { const pin: number = typeof piezo.pin == "string" ? Number.parseInt(piezo.pin) : piezo.pin; PatchPiezo(pin, piezo.state); } useEffect(() => { const f: number = typeof freq == "string" ? Number.parseInt(freq) : freq; if (!Number.isNaN(freq)) setFrequency(index, f); }, [freq]) return (
Play
) } function ControlPiezo ({ refto }: { refto?: Ref }) { const { piezo: piezos, addPiezo } = usePiezo(); const handleAdd = (): void => { let anopin = 13; for (let i = 0; i < piezos.length; i++) { if (piezos.filter(piezo => piezo.pin == anopin).length > 0) { anopin--; } else break; } addPiezo(anopin, 247); } return ( Piezo buzzer is a type of transducer that converts electrical signals into sound. It uses piezoelectric elements to generate mechanical vibrations that then produce sound. Piezo buzzer can produce sound with a given frequency depending on its characteristics } refto={refto} stack={(<> {piezos.map((piezo, i) => ( ))} {piezos.length < 14 && } )} /> ) } export default ControlPiezo;