JeVois Tutorials
1.22
JeVois Smart Embedded Machine Vision Tutorials
Share this page:
Tweet
Loading...
Searching...
No Matches
doc
snip
arduyolo.C
Go to the documentation of this file.
1
// JeVois + Arduino blink for X from YOLO
2
3
// Pin for LED, will turn on as we detect the desired object:
4
#define LEDPIN 17
5
6
// Serial port to use: on chips with USB (e.g., 32u4), that usually is Serial1.
7
// On chips without USB, use Serial:
8
#define SERIAL Serial1
9
10
// Buffer for received serial port bytes:
11
#define INLEN 256
12
char
instr
[
INLEN
+ 1];
13
14
// Our desired object: should be one of the 1000 ImageNet category names
15
#define CATEGORY "dog"
16
17
// Our desired minimum object width in standardized coordinates:
18
#define MIN_WIDTH 200.0F
19
20
void
setup
()
21
{
22
SERIAL
.begin(115200);
23
SERIAL
.setTimeout(500);
24
25
pinMode(
LEDPIN
, OUTPUT);
26
digitalWrite(
LEDPIN
, HIGH);
27
}
28
29
void
loop
()
30
{
31
byte
len =
SERIAL
.readBytesUntil(
'\n'
,
instr
,
INLEN
);
32
instr
[len] = 0;
33
34
char
* tok = strtok(
instr
,
" \r\n"
);
35
int
state = 0, i;
float
score, left, top, width, height;
36
37
while
(tok)
38
{
39
// State machine:
40
// 0: start parsing; if we get N2, move to state 1, otherwise state 1000
41
// 1: decode category name; if it is the one we want, move to state 2, otherwise state 1000
42
// 2: decode left and move to state 3
43
// 3: decode top and move to state 4
44
// 4: decode width and move to state 5
45
// 5: decode height and move to state 6
46
// 6: we got a full message, stay in this state until we run out of tokens
47
// 1000: we stay in this state until we run out of tokens
48
switch
(state)
49
{
50
// First token should be: N2
51
case
0:
52
if
(strcmp(tok,
"N2"
) == 0) state = 1;
else
state = 1000;
53
// We are done with this token. Break from the switch() statement
54
break
;
55
56
// Second token should be: category:score
57
case
1:
58
// Find the ':' between category and score:
59
i = strlen(tok) - 1;
60
while
(i >= 0 && tok[i] !=
':'
) --i;
61
62
// If i is >= 0, we found a ':'; terminate the tok string at that ':':
63
if
(i >= 0)
64
{
65
tok[i] =
'\0'
;
66
score = atof(&tok[i+1]);
67
}
68
69
// Is the category name what we want?
70
if
(strcmp(tok,
CATEGORY
) == 0) state = 2;
else
state = 1000;
71
72
// We are done with this token. Break from the switch() statement
73
break
;
74
75
// Third token: left
76
case
2:
77
left = atof(tok);
78
state = 3;
79
break
;
80
81
// Fourth token: top
82
case
3:
83
top = atof(tok);
84
state = 4;
85
break
;
86
87
// Fifth token: width
88
case
4:
89
width = atof(tok);
90
state = 5;
91
break
;
92
93
// Sixth token: height
94
case
5:
95
height = atof(tok);
96
state = 6;
97
// We got a whole message!
98
break
;
99
100
// In any other state: do nothing
101
default
:
102
break
;
103
}
104
105
// Move to the next token:
106
tok = strtok(0,
" \r\n"
);
107
}
108
109
// If we are in state 6, we successfully parsed a whole message and the category is a match.
110
// We just need to test the width and activate the LED accordingly:
111
if
(state == 6 && width >=
MIN_WIDTH
)
112
digitalWrite(
LEDPIN
, LOW);
// turn LED on (it has inverted logic)
113
else
114
digitalWrite(
LEDPIN
, HIGH);
// turn LED off
115
}
LEDPIN
#define LEDPIN
Definition
arduyolo.C:4
setup
void setup()
Definition
arduyolo.C:20
INLEN
#define INLEN
Definition
arduyolo.C:11
CATEGORY
#define CATEGORY
Definition
arduyolo.C:15
SERIAL
#define SERIAL
Definition
arduyolo.C:8
instr
char instr[INLEN+1]
Definition
arduyolo.C:12
MIN_WIDTH
#define MIN_WIDTH
Definition
arduyolo.C:18
loop
void loop()
Definition
arduyolo.C:29
Please help us improve this page: Edit it on
GitHub
or
email us your edits and suggestions.
Generated by
1.9.8