-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapi.go
More file actions
107 lines (94 loc) · 2.45 KB
/
api.go
File metadata and controls
107 lines (94 loc) · 2.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package main
import (
"bytes"
"fmt"
"io"
"io/ioutil"
"log"
"net/http"
"time"
"unicode"
"github.com/jacobsa/go-serial/serial"
)
func sendLetterToServer(letter string) {
data := bytes.NewBufferString(letter)
resp, err := http.Post("http://192.168.100.3:8080", "text/plain", data)
if err != nil {
log.Printf("Failed to send request: %v", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err == nil {
fmt.Printf("Response from server: %s\n", string(body))
}
}
var lastLetter string
var lastLetterSent string
var lastSendTime time.Time
// Verifica se a string contém apenas uma letra
func isLetter(s string) bool {
if len(s) == 1 {
return unicode.IsLetter(rune(s[0]))
}
return false
}
func handleRequests(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
if r.Method == "OPTIONS" {
w.WriteHeader(http.StatusOK)
return
}
if r.Method == "POST" {
body, err := ioutil.ReadAll(r.Body)
if err != nil {
http.Error(w, "Error reading request body", http.StatusInternalServerError)
return
}
lastLetter = string(body)
} else if r.Method == "GET" {
fmt.Fprintln(w, lastLetter)
} else {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
}
}
func main() {
go func() {
http.HandleFunc("/", handleRequests)
fmt.Println("Server is running on port 8080...")
log.Fatal(http.ListenAndServe(":8080", nil))
}()
options := serial.OpenOptions{
PortName: "COM2",
BaudRate: 9600,
DataBits: 8,
StopBits: 1,
MinimumReadSize: 4,
}
port, err := serial.Open(options)
if err != nil {
log.Fatalf("serial.Open: %v", err)
}
defer port.Close()
lastSendTime = time.Now()
buf := make([]byte, 128)
for {
n, err := port.Read(buf)
if err != nil {
if err != io.EOF {
log.Fatalf("port.Read: %v", err)
}
}
if n > 0 {
data := string(buf[:n])
fmt.Print(data)
// Envia a letra (ou não-letra) assim que for lida, sem verificar se é igual à última ou o delay
sendLetterToServer(data)
lastLetterSent = data // Atualiza a última letra enviada
lastSendTime = time.Now() // Atualiza o tempo da última transmissão (opcional, se você decidir usar depois)
}
time.Sleep(100 * time.Millisecond) // Ajuste conforme necessário para controlar a taxa de leitura
}
}