diff --git a/protoboard/mainWifi.py b/protoboard/mainWifi.py new file mode 100644 index 0000000..b29c56c --- /dev/null +++ b/protoboard/mainWifi.py @@ -0,0 +1,276 @@ +# Pico W - Servidor TCP simples para receber comandos +SSID = "DoceDeLeite" # Nome da rede +PASSWORD = "leiteninho19" # Senha da rede + +import network +import socket +import time +import gc +from micropython import const +import neopixel +import math +import random +from machine import PWM, Pin,I2C, Timer, ADC +from ssd1306 import SSD1306_I2C + +# Configurações +TCP_PORT = 8080 + +# LED onboard para feedback visual +led = Pin("LED", Pin.OUT) + +# --- CONFIGURAÇÃO DOS COMPONENTES BITDOGLAB --- + +# global variables +SCREEN_WIDTH = 128 +SCREEN_HEIGHT = 64 + +SEGMENT_WIDTH = 8 +SEGMENT_PIXELS = int(SCREEN_HEIGHT/SEGMENT_WIDTH) +SEGMENTS_HIGH = int(SCREEN_HEIGHT/SEGMENT_WIDTH) +SEGMENTS_WIDE = int(SCREEN_WIDTH/SEGMENT_WIDTH) +VALID_RANGE = [[int(i /SEGMENTS_HIGH), i % SEGMENTS_HIGH] for i in range(SEGMENTS_WIDE * SEGMENTS_HIGH -1)] + +is_game_running = False + +# Configuração do OLED +i2c = I2C(1, sda=Pin(2), scl=Pin(3), freq=400000) +oled = SSD1306_I2C(SCREEN_WIDTH, SCREEN_HEIGHT, i2c) + +# Botão pressionável do joystick +joystick_button = Pin(22, Pin.IN, Pin.PULL_UP) + +# Número de LEDs na sua matriz 5x5 +NUM_LEDS = 25 + +# Inicializar a matriz de NeoPixels no GPIO7 +np = neopixel.NeoPixel(Pin(7), NUM_LEDS) + +# Definindo a matriz de LEDs +LED_MATRIX = [ + [24, 23, 22, 21, 20], + [15, 16, 17, 18, 19], + [14, 13, 12, 11, 10], + [5, 6, 7, 8, 9], + [4, 3, 2, 1, 0] +] + +# Inicializar ADC para os pinos VRx (GPIO26) e VRy (GPIO27) +adc_vrx = ADC(Pin(26)) +adc_vry = ADC(Pin(27)) + +def map_value(value, in_min, in_max, out_min, out_max): + return (value - in_min) * (out_max - out_min) // (in_max - in_min) + out_min + +def update_oled(lines): + oled.fill(0) + for i, line in enumerate(lines): + oled.text(line, 0, i * 8) + oled.show() + +# Configurando o LED RGB +led_r = PWM(Pin(12)) +led_g = PWM(Pin(13)) +led_b = PWM(Pin(11)) + +led_r.freq(1000) +led_g.freq(1000) +led_b.freq(1000) + +# Configuração do NeoPixel +NUM_LEDS = 25 +np = neopixel.NeoPixel(Pin(7), NUM_LEDS) + +# Configuração dos botões +button_a = Pin(5, Pin.IN, Pin.PULL_UP) +button_b = Pin(6, Pin.IN, Pin.PULL_UP) + +# Configuração do Buzzer +buzzer = PWM(Pin(21)) +buzzer2 = PWM(Pin(10)) + +# Essencial pro snake +game_timer = Timer() +player = None +food = None + +def connect_wifi(): + """Conecta ao WiFi e retorna o IP""" + print("🔌 Conectando ao WiFi...") + + wlan = network.WLAN(network.STA_IF) + wlan.active(True) + + if wlan.isconnected(): + ip = wlan.ifconfig()[0] + print(f"✅ Já conectado! IP: {ip}") + led.on() + return ip + + print(f"📡 Conectando a '{SSID}'...") + wlan.connect(SSID, PASSWORD) + + # Aguarda conexão + timeout = 15 + start = time.time() + while not wlan.isconnected(): + if time.time() - start > timeout: + print("❌ Timeout na conexão WiFi") + return None + + led.toggle() # Pisca enquanto conecta + time.sleep(0.3) + + # Conectado com sucesso + led.on() + config = wlan.ifconfig() + ip = config[0] + + print(f"✅ WiFi conectado!") + print(f" IP: {ip}") + print(f" Gateway: {config[2]}") + + return ip + +def process_command(command, client_socket): + """Executa comando Python e envia resposta""" + command = command.strip() + + if not command: + return + + print(f"⚡ Executando: '{command}'") + + try: + # Tenta executar o comando + exec(command) + + # Resposta de sucesso + response = "OK\n" + client_socket.send(response.encode()) + print(f"✅ Sucesso: {command}") + + except Exception as e: + # Resposta de erro + error_msg = f"ERRO: {str(e)}\n" + try: + client_socket.send(error_msg.encode()) + print(f"❌ Erro executando '{command}': {e}") + except: + print(f"❌ Erro duplo: comando falhou e não conseguiu enviar erro") + +def tcp_server(ip): + """Servidor TCP principal""" + print(f"🚀 Iniciando servidor TCP em {ip}:{TCP_PORT}") + + # Criar socket TCP + server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + server_socket.bind((ip, TCP_PORT)) + server_socket.listen(1) + + print(f"👂 Servidor TCP ouvindo em {ip}:{TCP_PORT}") + print("📱 Pronto para receber conexões do app!") + + while True: + try: + print("⏳ Aguardando conexão...") + client_socket, client_address = server_socket.accept() + + print(f"📲 Cliente conectado: {client_address}") + + # Pisca LED para indicar conexão + for _ in range(2): + led.off() + time.sleep(0.1) + led.on() + time.sleep(0.1) + + # Configurar timeout para o cliente + client_socket.settimeout(30) # 30 segundos timeout + + # Buffer para acumular dados recebidos + buffer = "" + + try: + while True: + # Receber dados + data = client_socket.recv(1024) + + if not data: + print("🔌 Cliente desconectou") + break + + # Decodificar dados recebidos + text = data.decode('utf-8', 'ignore') + print(f"📨 Dados recebidos: '{text}' ({len(text)} chars)") + + # Processar caractere por caractere + for char in text: + if char == '\n' or char == '\r': + # Fim de comando - executar se não estiver vazio + if buffer.strip(): + process_command(buffer, client_socket) + buffer = "" # Limpar buffer + else: + buffer += char + + except socket.timeout: + print("⏰ Timeout na conexão com cliente") + except Exception as e: + print(f"❌ Erro na comunicação: {e}") + finally: + # Fechar conexão com cliente + client_socket.close() + print(f"🔌 Conexão fechada: {client_address}") + + # Pisca LED para indicar desconexão + for _ in range(3): + led.off() + time.sleep(0.2) + led.on() + time.sleep(0.2) + + # Limpeza de memória + gc.collect() + + except KeyboardInterrupt: + print("🛑 Servidor interrompido pelo usuário") + break + except Exception as e: + print(f"❌ Erro no servidor: {e}") + time.sleep(1) # Pausa antes de tentar novamente + +def main(): + """Função principal""" + print("=" * 40) + print("🤖 PICO W - SERVIDOR TCP SIMPLES") + print("=" * 40) + + # Conectar ao WiFi + ip = connect_wifi() + if not ip: + print("💀 Falha crítica: não foi possível conectar ao WiFi") + return + + print(f"🌐 Configuração final:") + print(f" WiFi: {SSID}") + print(f" IP: {ip}") + print(f" Porta TCP: {TCP_PORT}") + print(f" LED: Pin('LED')") + print("=" * 40) + + try: + # Iniciar servidor TCP + tcp_server(ip) + except Exception as e: + print(f"💀 Erro fatal: {e}") + + # LED de erro - pisca rapidamente + for _ in range(10): + led.toggle() + time.sleep(0.1) + +# Executar se for o programa principal +if __name__ == "__main__": + main() diff --git a/src/App.tsx b/src/App.tsx index 082e357..6018a59 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,5 +1,5 @@ import { BrowserRouter, Routes, Route } from "react-router-dom"; -import { ConnectionProvider } from "./contexts/ConnectionContext"; +import { ConnectionProvider } from "./connection/ConnectionContext"; import { ConnectionStatus } from "./components/ConnectionStatus"; import { useEffect } from "react"; import { ScreenOrientation } from "@capacitor/screen-orientation"; @@ -47,7 +47,6 @@ import LedRGBInfo1 from "./pages/LedRGB/LedRGBInfo1"; import LedRGBInfo2 from "./pages/LedRGB/LedRGBInfo2"; import LedRGBInfo4 from "./pages/LedRGB/LedRGBInfo4"; -import Jogo from "./pages/Jogo/Jogo"; import EmConstrucao from "./pages/EmConstrucao"; import Snake from "./pages/Snake"; diff --git a/src/builder/ArquiteturaBuilder.png b/src/builder/ArquiteturaBuilder.png new file mode 100644 index 0000000..822da83 Binary files /dev/null and b/src/builder/ArquiteturaBuilder.png differ diff --git a/src/builder/README.md b/src/builder/README.md new file mode 100644 index 0000000..4326dd2 --- /dev/null +++ b/src/builder/README.md @@ -0,0 +1,5 @@ +# Arquitetura Utilizada + +Para o envio de codigos em micropython para a placa do BitDogLab, se optou por usar a arquitetura Builder, onde possuimos um master que recebe o json, interpreta qual o pedido e envia para o constroct builder expecifico + +![Desenho do estilo arquitetural usado](ArquiteturaBuilder.png) diff --git a/src/utils/README.md b/src/builder/constroct buiders/README.md similarity index 100% rename from src/utils/README.md rename to src/builder/constroct buiders/README.md diff --git a/src/utils/buzzersController.ts b/src/builder/constroct buiders/buzzersController.ts similarity index 97% rename from src/utils/buzzersController.ts rename to src/builder/constroct buiders/buzzersController.ts index 34b012d..552698e 100644 --- a/src/utils/buzzersController.ts +++ b/src/builder/constroct buiders/buzzersController.ts @@ -1,4 +1,4 @@ -import { toMicropython } from "../json/toMicropython"; +import { toMicropython } from "../product/toMicropython"; export interface BuzzersData { isPressed: boolean; diff --git a/src/utils/ledRGBControler.ts b/src/builder/constroct buiders/ledRGBControler.ts similarity index 95% rename from src/utils/ledRGBControler.ts rename to src/builder/constroct buiders/ledRGBControler.ts index 3a5fe64..73a7e4d 100644 --- a/src/utils/ledRGBControler.ts +++ b/src/builder/constroct buiders/ledRGBControler.ts @@ -1,4 +1,4 @@ -import { toMicropython } from "../json/toMicropython"; +import { toMicropython } from "../product/toMicropython"; export class LedRGBController { private sendCommand: (command: string) => Promise; diff --git a/src/utils/neopixelController.ts b/src/builder/constroct buiders/neopixelController.ts similarity index 95% rename from src/utils/neopixelController.ts rename to src/builder/constroct buiders/neopixelController.ts index d65d056..680208d 100644 --- a/src/utils/neopixelController.ts +++ b/src/builder/constroct buiders/neopixelController.ts @@ -1,4 +1,4 @@ -import { toMicropython } from "../json/toMicropython"; +import { toMicropython } from "../product/toMicropython"; export interface NeopixelData { pos: string; diff --git a/src/utils/playbackBuzzer.ts b/src/builder/constroct buiders/playbackBuzzer.ts similarity index 95% rename from src/utils/playbackBuzzer.ts rename to src/builder/constroct buiders/playbackBuzzer.ts index 530bd08..e93e4c8 100644 --- a/src/utils/playbackBuzzer.ts +++ b/src/builder/constroct buiders/playbackBuzzer.ts @@ -1,4 +1,4 @@ -import { BuzzersController } from "../utils/buzzersController"; +import { BuzzersController } from "./buzzersController"; export async function playbackBuzzerSequence( controller: BuzzersController, diff --git a/src/builder/master.tsx b/src/builder/master.tsx new file mode 100644 index 0000000..e69de29 diff --git a/src/json/README.md b/src/builder/product/README.md similarity index 100% rename from src/json/README.md rename to src/builder/product/README.md diff --git a/src/json/arquiteturaJson.png b/src/builder/product/arquiteturaJson.png similarity index 100% rename from src/json/arquiteturaJson.png rename to src/builder/product/arquiteturaJson.png diff --git a/src/json/arquiteturaJson.svg b/src/builder/product/arquiteturaJson.svg similarity index 100% rename from src/json/arquiteturaJson.svg rename to src/builder/product/arquiteturaJson.svg diff --git a/src/json/interpreters/buzzer.ts b/src/builder/product/interpreters/buzzer.ts similarity index 90% rename from src/json/interpreters/buzzer.ts rename to src/builder/product/interpreters/buzzer.ts index 08ba63f..add22bd 100644 --- a/src/json/interpreters/buzzer.ts +++ b/src/builder/product/interpreters/buzzer.ts @@ -1,4 +1,4 @@ -import type { BuzzersData } from "../../utils/buzzersController"; +import type { BuzzersData } from "../../constroct buiders/buzzersController"; export function interpreterBuzzer(data: BuzzersData): string[] { const commands: string[] = []; diff --git a/src/json/interpreters/ledRGB.ts b/src/builder/product/interpreters/ledRGB.ts similarity index 100% rename from src/json/interpreters/ledRGB.ts rename to src/builder/product/interpreters/ledRGB.ts diff --git a/src/json/interpreters/neoPixel.ts b/src/builder/product/interpreters/neoPixel.ts similarity index 100% rename from src/json/interpreters/neoPixel.ts rename to src/builder/product/interpreters/neoPixel.ts diff --git a/src/json/toMicropython.ts b/src/builder/product/toMicropython.ts similarity index 100% rename from src/json/toMicropython.ts rename to src/builder/product/toMicropython.ts diff --git a/src/components/ConnectionStatus.tsx b/src/components/ConnectionStatus.tsx index 2773185..3670a56 100644 --- a/src/components/ConnectionStatus.tsx +++ b/src/components/ConnectionStatus.tsx @@ -1,4 +1,4 @@ -import { useConnection, ConnectionType } from "../contexts/ConnectionContext"; +import { useConnection, ConnectionType } from "../connection/ConnectionContext"; import { useNavigate } from "react-router-dom"; export const ConnectionStatus = () => { diff --git a/src/contexts/ConnectionContext.tsx b/src/connection/ConnectionContext.tsx similarity index 100% rename from src/contexts/ConnectionContext.tsx rename to src/connection/ConnectionContext.tsx diff --git a/src/hooks/useBuzzers.ts b/src/hooks/useBuzzers.ts index 3a1727d..2e71031 100644 --- a/src/hooks/useBuzzers.ts +++ b/src/hooks/useBuzzers.ts @@ -1,6 +1,6 @@ import { useEffect, useRef, useState } from "react"; import { ScreenOrientation } from "@capacitor/screen-orientation"; -import { BuzzersController } from "../utils/buzzersController"; +import { BuzzersController } from "../builder/constroct buiders/buzzersController"; import type { Note } from "../types/notes"; import { noteToFrequency } from "../types/notes"; diff --git a/src/hooks/useLedRGB.ts b/src/hooks/useLedRGB.ts index 70cf473..c2f0fa0 100644 --- a/src/hooks/useLedRGB.ts +++ b/src/hooks/useLedRGB.ts @@ -1,5 +1,5 @@ import { useEffect, useRef, useState } from "react"; -import { LedRGBController } from "../utils/ledRGBControler"; +import { LedRGBController } from "../builder/constroct buiders/ledRGBControler"; import type { RGB } from "@/types/rgb"; /** diff --git a/src/hooks/useNeopixel.ts b/src/hooks/useNeopixel.ts index 9d997b7..48035fc 100644 --- a/src/hooks/useNeopixel.ts +++ b/src/hooks/useNeopixel.ts @@ -1,5 +1,5 @@ import { useEffect, useRef, useState } from "react"; -import { NeopixelController } from "../utils/neopixelController"; +import { NeopixelController } from "../builder/constroct buiders/neopixelController"; import type { RGB } from "@/types/rgb"; import { rgbToString, stringToRgb } from "@/types/rgb"; diff --git a/src/hooks/useWifi.ts b/src/hooks/useWifi.ts index 937fbd8..c448abf 100644 --- a/src/hooks/useWifi.ts +++ b/src/hooks/useWifi.ts @@ -57,7 +57,7 @@ export function useWifi() { // Enviar comando (terminado em \n) const send = useCallback(async (cmd: string): Promise => { - if (!clientId) { + if (clientId === null) { const errorMsg = "Não há conexão TCP ativa"; log(errorMsg); setError(errorMsg); @@ -77,7 +77,7 @@ export function useWifi() { }, [clientId, log]); const read = useCallback(async (): Promise => { - if (!clientId) { + if (clientId === null) { log("Tentativa de leitura sem conexão ativa"); return ""; } @@ -97,7 +97,7 @@ export function useWifi() { }, [clientId, log]); const disconnect = useCallback(async (): Promise => { - if (!clientId) { + if (clientId === null) { log("Nenhuma conexão ativa para desconectar"); return true; } @@ -137,7 +137,7 @@ export function useWifi() { return { // Estados - isConnected: !!clientId, + isConnected: clientId!==null, isConnecting, connectedDevice, logs, diff --git a/src/pages/Buttons/Buttons.tsx b/src/pages/Buttons/Buttons.tsx index 39992af..01453b5 100644 --- a/src/pages/Buttons/Buttons.tsx +++ b/src/pages/Buttons/Buttons.tsx @@ -1,7 +1,7 @@ import { Header } from "@/components/Header"; import { Button } from "@/components/ui/button"; import { useButtons } from "@/hooks/useButtons"; -import { useConnection } from "@/contexts/ConnectionContext"; +import { useConnection } from "@/connection/ConnectionContext"; import DropdownSelector from "@/components/DropdownSelector"; import Selecter from "@/components/Selecter"; import LED from "@/components/LED"; diff --git a/src/pages/Buzzers/Buzzers.tsx b/src/pages/Buzzers/Buzzers.tsx index e78403c..fc297f8 100644 --- a/src/pages/Buzzers/Buzzers.tsx +++ b/src/pages/Buzzers/Buzzers.tsx @@ -1,10 +1,10 @@ import { useState, useEffect, useRef } from "react"; -import { useConnection } from "@/contexts/ConnectionContext"; +import { useConnection } from "@/connection/ConnectionContext"; import { Header } from "@/components/Header"; import Slider from "@/components/Slider"; import { useBuzzers } from "@/hooks/useBuzzers"; import Piano from "@/components/Piano"; -import { playbackBuzzerSequence } from "@/utils/playbackBuzzer"; +import { playbackBuzzerSequence } from "@/builder/constroct buiders/playbackBuzzer"; import SaveModal from "@/components/SaveModal"; import LoadManageModal from "@/components/LoadManageModal"; import { Square, Music } from "lucide-react"; diff --git a/src/pages/Connection.tsx b/src/pages/Connection.tsx index d3559cc..2e36360 100644 --- a/src/pages/Connection.tsx +++ b/src/pages/Connection.tsx @@ -2,7 +2,7 @@ import { useState, useCallback } from "react"; import { Button } from "@/components/ui/button"; import { Header } from "@/components/Header"; import { useNavigate } from "react-router-dom"; -import { useConnection } from "../contexts/ConnectionContext"; +import { useConnection } from "../connection/ConnectionContext"; import type { BleDevice } from '@capacitor-community/bluetooth-le'; // 🔄 Tipos de conexão expandidos diff --git a/src/pages/LedRGB/LedRGB.tsx b/src/pages/LedRGB/LedRGB.tsx index 8a47e23..0711ca9 100644 --- a/src/pages/LedRGB/LedRGB.tsx +++ b/src/pages/LedRGB/LedRGB.tsx @@ -2,7 +2,7 @@ import ColorPicker from '@/components/ColorPicker'; import { Header } from "@/components/Header"; import LED from '@/components/LED'; import { Button } from '@/components/ui/button'; -import { useConnection } from "@/contexts/ConnectionContext"; +import { useConnection } from "@/connection/ConnectionContext"; import { useLedRGB } from '@/hooks/useLedRGB'; /** diff --git a/src/pages/Neopixel/Neopixel.tsx b/src/pages/Neopixel/Neopixel.tsx index a054554..b67a242 100644 --- a/src/pages/Neopixel/Neopixel.tsx +++ b/src/pages/Neopixel/Neopixel.tsx @@ -1,5 +1,5 @@ import { Button } from "@/components/ui/button"; -import { useConnection } from "@/contexts/ConnectionContext"; +import { useConnection } from "@/connection/ConnectionContext"; import { Header } from "@/components/Header"; import ColorPicker from "@/components/ColorPicker"; import LEDMatrix from "@/components/LEDMatrix"; diff --git a/src/pages/Snake.tsx b/src/pages/Snake.tsx index 65e3ced..0f996aa 100644 --- a/src/pages/Snake.tsx +++ b/src/pages/Snake.tsx @@ -1,5 +1,5 @@ import { Header } from "@/components/Header"; -import { useConnection } from "@/contexts/ConnectionContext"; +import { useConnection } from "@/connection/ConnectionContext"; import { useEffect } from "react"; export default function Snake() { diff --git a/tsconfig.app.tsbuildinfo b/tsconfig.app.tsbuildinfo new file mode 100644 index 0000000..9cd581b --- /dev/null +++ b/tsconfig.app.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./src/app.tsx","./src/main.tsx","./src/vite-env.d.ts","./src/builder/master.tsx","./src/builder/constroct buiders/buzzerscontroller.ts","./src/builder/constroct buiders/ledrgbcontroler.ts","./src/builder/constroct buiders/neopixelcontroller.ts","./src/builder/constroct buiders/playbackbuzzer.ts","./src/builder/product/tomicropython.ts","./src/builder/product/interpreters/buzzer.ts","./src/builder/product/interpreters/ledrgb.ts","./src/builder/product/interpreters/neopixel.ts","./src/components/backbuttonhandler.tsx","./src/components/cards.tsx","./src/components/colorpicker.tsx","./src/components/connectionstatus.tsx","./src/components/dropdownselector.tsx","./src/components/flowcard.tsx","./src/components/flowdiagram.tsx","./src/components/header.tsx","./src/components/led.tsx","./src/components/ledmatrix.tsx","./src/components/loadmanagemodal.tsx","./src/components/piano.tsx","./src/components/pianokey.tsx","./src/components/popup.tsx","./src/components/savemodal.tsx","./src/components/selecter.tsx","./src/components/slider.tsx","./src/components/ui/accordion.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/alert.tsx","./src/components/ui/avatar.tsx","./src/components/ui/badge.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.tsx","./src/components/ui/card.tsx","./src/components/ui/carousel.tsx","./src/components/ui/checkbox.tsx","./src/components/ui/dialog.tsx","./src/components/ui/drawer.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/form.tsx","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/popover.tsx","./src/components/ui/radio-group.tsx","./src/components/ui/select.tsx","./src/components/ui/skeleton.tsx","./src/components/ui/slider.tsx","./src/components/ui/switch.tsx","./src/components/ui/tabs.tsx","./src/components/ui/textarea.tsx","./src/components/ui/toast.tsx","./src/connection/connectioncontext.tsx","./src/hooks/usebluetoothle.ts","./src/hooks/usebuttons.ts","./src/hooks/usebuzzers.ts","./src/hooks/useledrgb.ts","./src/hooks/useneopixel.ts","./src/hooks/usewifi.ts","./src/lib/utils.ts","./src/pages/components.tsx","./src/pages/connection.tsx","./src/pages/emconstrucao.tsx","./src/pages/notfound.tsx","./src/pages/snake.tsx","./src/pages/splashscreen.tsx","./src/pages/welcome.tsx","./src/pages/buttons/buttons.tsx","./src/pages/buttons/buttonsfluxograma.tsx","./src/pages/buzzers/buzzers.tsx","./src/pages/buzzers/buzzersfluxograma.tsx","./src/pages/buzzers/buzzersgravar.tsx","./src/pages/buzzers/buzzersgravarfluxograma.tsx","./src/pages/buzzers/buzzersinfo0.tsx","./src/pages/buzzers/buzzersinfo1.tsx","./src/pages/buzzers/buzzersinfo2.tsx","./src/pages/buzzers/buzzersinfo3.tsx","./src/pages/buzzers/buzzersinfo4.tsx","./src/pages/buzzers/buzzersinfo5.tsx","./src/pages/buzzers/buzzersinfo6.tsx","./src/pages/buzzers/buzzersinfo7.tsx","./src/pages/buzzers/buzzersinfo8.tsx","./src/pages/buzzers/buzzerstocar.tsx","./src/pages/display/display.tsx","./src/pages/jogo/jogo.tsx","./src/pages/joystick/joystick.tsx","./src/pages/ledrgb/ledrgb.tsx","./src/pages/ledrgb/ledrgbfluxograma.tsx","./src/pages/ledrgb/ledrgbinfo1.tsx","./src/pages/ledrgb/ledrgbinfo2.tsx","./src/pages/ledrgb/ledrgbinfo4.tsx","./src/pages/microphone/microphone.tsx","./src/pages/neopixel/neopixel.tsx","./src/pages/neopixel/neopixelfluxograma.tsx","./src/pages/neopixel/neopixelinfo1.tsx","./src/pages/neopixel/neopixelinfo2.tsx","./src/pages/neopixel/neopixelinfo3.tsx","./src/pages/neopixel/neopixelinfo4.tsx","./src/pages/neopixel/rgbinfo.tsx","./src/types/bluetooth-serial.d.ts","./src/types/notes.ts","./src/types/rgb.ts","./src/types/web-serial.d.ts"],"errors":true,"version":"5.8.3"} \ No newline at end of file diff --git a/tsconfig.node.tsbuildinfo b/tsconfig.node.tsbuildinfo new file mode 100644 index 0000000..3015526 --- /dev/null +++ b/tsconfig.node.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./vite.config.ts"],"version":"5.8.3"} \ No newline at end of file