-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSerial.cpp
118 lines (96 loc) · 2.55 KB
/
Serial.cpp
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
108
109
110
111
112
113
114
115
116
117
118
#include "Serial.h"
const char *device = "/dev/ttyUSB0";
//const char *device = "/dev/ttyACM0";
struct termios cfg;
int fd = 0;
void erro(char *s) {
perror(s);
exit(0);
}
void iniciaComunicacao(void) {
fd = open(device, O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1) {
erro("erro na abertura da interface serial\n");
}
if (!isatty(fd)) {
erro("A interface serial aberta nao é realmente uma interface serial!\n");
}
if (tcgetattr(fd, &cfg) < 0) {
erro("A configuracao da interface serial nao pode ser lida!\n");
}
cfg.c_iflag = IGNBRK | IGNPAR;
cfg.c_oflag = 0;
cfg.c_lflag = 0;
cfg.c_cflag = B115200 | CS8;// | CRTSCTS;// | CSTOPB;
cfg.c_ispeed = 115200;
cfg.c_ospeed = 115200;
cfg.c_cc[VMIN] = 1;
cfg.c_cc[VTIME] = 0;
// int sercmd = 0;// desliga os bits TIOCM_RTS | TIOCM_DTR para colocar 12V na saida
// ioctl(fd, TIOCMBIC, &sercmd); // Set the RTS pin.
if (tcsetattr(fd, TCSAFLUSH, &cfg) < 0) {
erro("A configuracao da interface serial nao pode ser alterada!\n");
}
if (cfsetispeed(&cfg, B115200) < 0 || cfsetospeed(&cfg, B115200) < 0) {
erro("A interface serial nao pode ser configurada!\n");
}
}
void enviaDadosR(int op) {
tcflush(fd, TCIOFLUSH);
unsigned char b[8];
b[0] = 0x80;
write(fd, b, 1);
if(op ==1){
// ENVIA PARA OS 3 ROBÔS 1 nas duas rodas
b[0] = 1 << 4; //0x7 << 4;
b[1] = 1 << 4; //0x7 << 4;
b[2] = 1 << 4; //0x7 << 4;
b[3] = 1 << 4; //0x7 << 4;
b[4] = 1 << 4; //0x7 << 4;
b[5] = 1 << 4; //0x7 << 4;
b[6] = '0';
b[7] = '0';
}
if(op == 2){
// ENVIA PARA OS 3 ROBÔS 1 na roda direita
b[0] = 1 << 4; //0x7 << 4;
b[1] = 0 << 4; //0x7 << 4;
b[2] = 1 << 4; //0x7 << 4;
b[3] = 0 << 4; //0x7 << 4;
b[4] = 1 << 4; //0x7 << 4;
b[5] = 0 << 4; //0x7 << 4;
b[6] = '0';
b[7] = '0';
}
if(op == 3){
// ENVIA PARA OS 3 ROBÔS 1 na roda esquerda
b[0] = 0 << 4; //0x7 << 4;
b[1] = 1 << 4; //0x7 << 4;
b[2] = 0 << 4; //0x7 << 4;
b[3] = 1 << 4; //0x7 << 4;
b[4] = 0 << 4; //0x7 << 4;
b[5] = 1 << 4; //0x7 << 4;
b[6] = '0';
b[7] = '0';
}
if(op == 0){
// ENVIA PARA OS 3 ROBÔS 0 nas duas rodas
b[0] = 0 << 4; //0x7 << 4;
b[1] = 0 << 4; //0x7 << 4;
b[2] = 0 << 4; //0x7 << 4;
b[3] = 0 << 4; //0x7 << 4;
b[4] = 0 << 4; //0x7 << 4;
b[5] = 0 << 4; //0x7 << 4;
b[6] = '0';
b[7] = '0';
}
int resp = write(fd, b, 8);
if (resp < 0) {
erro("Interface serial - nao pode enviar comandos aos robos.\n");
}
}
void terminaComunicacao(void) {
int sercmd = TIOCM_RTS | TIOCM_DTR;
ioctl(fd, TIOCMBIC, &sercmd);
close(fd);
}