Skip to content

Commit 5799964

Browse files
committed
Add Face example
Encoder, Finger, JoyStick, Keyboard, RFOD
1 parent aefd2d0 commit 5799964

File tree

10 files changed

+2730
-42
lines changed

10 files changed

+2730
-42
lines changed

examples/Face/Finger/Finger.ino

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
#include <M5Stack.h>
2+
#include "finger.h"
3+
4+
uint8_t userNum; //User number
5+
FingerPrint FP_M;
6+
7+
void CleanScreen()
8+
{
9+
M5.Lcd.setTextColor(WHITE);
10+
M5.Lcd.fillRect(0,50,400,300,BLACK);
11+
M5.Lcd.setCursor(0, 50);
12+
M5.Lcd.setTextSize(2);
13+
userNum = FP_M.fpm_getUserNum();
14+
M5.Lcd.print("userNum:");
15+
M5.Lcd.println(userNum);
16+
}
17+
18+
void setup() {
19+
M5.begin();
20+
Serial.begin(115200);
21+
Serial2.begin(19200, SERIAL_8N1, 16, 17);
22+
pinMode(5, OUTPUT);
23+
pinMode(26, OUTPUT);
24+
digitalWrite(5, 1);
25+
digitalWrite(26, 1);
26+
M5.Lcd.clear(BLACK);
27+
M5.Lcd.setTextColor(YELLOW);
28+
M5.Lcd.setTextFont(2);
29+
M5.Lcd.setTextSize(3);
30+
M5.Lcd.setCursor(20, 0);
31+
M5.Lcd.println("Finger example");
32+
Serial.printf("Finger example\n");
33+
M5.Lcd.setTextColor(WHITE);
34+
M5.Lcd.fillRect(0,50,400,300,BLACK);
35+
M5.Lcd.setCursor(0, 50);
36+
M5.Lcd.setTextSize(2);
37+
userNum = FP_M.fpm_getUserNum();
38+
M5.Lcd.print("userNum:");
39+
M5.Lcd.println(userNum);
40+
}
41+
42+
//ButtonA: Add user
43+
//ButtonB: Matching
44+
//ButtonC: Delete All User
45+
void loop(){
46+
uint8_t res1;
47+
if(M5.BtnA.wasPressed()){
48+
CleanScreen();
49+
M5.Lcd.println("Fingerprint Typing");
50+
51+
res1 = FP_M.fpm_addUser(userNum,1);
52+
if(res1 == ACK_SUCCESS){
53+
M5.Lcd.println("Success");
54+
}
55+
else if(res1 == ACK_FAIL){
56+
M5.Lcd.println("Fail");
57+
}
58+
else if(res1 == ACK_FULL){
59+
M5.Lcd.println("Full");
60+
}
61+
else{
62+
M5.Lcd.println("Timeout");
63+
}
64+
userNum++;
65+
}
66+
67+
if(M5.BtnB.wasPressed()){
68+
CleanScreen();
69+
M5.Lcd.println("Matching");
70+
71+
res1 = FP_M.fpm_compareFinger();
72+
if(res1 == ACK_SUCCESS){
73+
M5.Lcd.println("Success");
74+
}
75+
if(res1 == ACK_NOUSER){
76+
M5.Lcd.println("No Such User");
77+
}
78+
if(res1 == ACK_TIMEOUT){
79+
M5.Lcd.println("Timeout");
80+
}
81+
}
82+
83+
if(M5.BtnC.wasPressed()){
84+
res1 = FP_M.fpm_deleteAllUser();
85+
CleanScreen();
86+
87+
if(res1 == ACK_SUCCESS){
88+
M5.Lcd.println("Delete All User Successful");
89+
}
90+
else{
91+
M5.Lcd.println("Delete All User Failed");
92+
}
93+
}
94+
M5.update();
95+
}

examples/Face/Finger/finger.cpp

Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
#include <M5Stack.h>
2+
#include "finger.h"
3+
4+
5+
FingerPrint::FingerPrint(void){
6+
7+
}
8+
9+
FingerPrint FP;
10+
11+
#define F_Time 10000
12+
13+
uint8_t FingerPrint::fpm_sendAndReceive(uint16_t timeout)
14+
{
15+
uint8_t i, j;
16+
uint8_t checkSum = 0;
17+
18+
FP.RxCnt = 0;
19+
FP.TxBuf[5] = 0;
20+
21+
Serial2.write(CMD_HEAD);
22+
for (i = 1; i < 6; i++)
23+
{
24+
Serial2.write(FP.TxBuf[i]);
25+
checkSum ^= FP.TxBuf[i];
26+
}
27+
Serial2.write(checkSum);
28+
Serial2.write(CMD_TAIL);
29+
30+
while ((!Serial2.available()) && timeout > 0)
31+
{
32+
delay(1);
33+
timeout--;
34+
}
35+
36+
uint8_t ch;
37+
for(i=0;i<8;i++)
38+
{
39+
if(Serial2.available()){
40+
ch = Serial2.read();
41+
FP.RxCnt++;
42+
FP.RxBuf[i] = ch;
43+
}
44+
}
45+
46+
if (FP.RxCnt != 8) {FP.RxCnt = 0;return ACK_TIMEOUT;}
47+
if (FP.RxBuf[HEAD] != CMD_HEAD) return ACK_FAIL;
48+
if (FP.RxBuf[TAIL] != CMD_TAIL) return ACK_FAIL;
49+
if (FP.RxBuf[CMD] != (FP.TxBuf[CMD])) return ACK_FAIL;
50+
51+
checkSum = 0;
52+
for (j = 1; j < CHK; j++) {
53+
checkSum ^= FP.RxBuf[j];
54+
}
55+
if (checkSum != FP.RxBuf[CHK]) {
56+
return ACK_FAIL;
57+
}
58+
return ACK_SUCCESS;
59+
}
60+
61+
uint8_t FingerPrint::fpm_sleep(void)
62+
{
63+
uint8_t res;
64+
65+
FP.TxBuf[CMD] = CMD_SLEEP_MODE;
66+
FP.TxBuf[P1] = 0;
67+
FP.TxBuf[P2] = 0;
68+
FP.TxBuf[P3] = 0;
69+
70+
res = fpm_sendAndReceive(500);
71+
72+
if(res == ACK_SUCCESS) {
73+
return ACK_SUCCESS;
74+
}
75+
else {
76+
return ACK_FAIL;
77+
}
78+
79+
}
80+
81+
uint8_t FingerPrint::fpm_setAddMode(uint8_t fpm_mode)
82+
{
83+
uint8_t res;
84+
85+
FP.TxBuf[CMD] = CMD_ADD_MODE;
86+
FP.TxBuf[P1] = 0;
87+
FP.TxBuf[P2] = fpm_mode;
88+
FP.TxBuf[P3] = 0;
89+
90+
res = fpm_sendAndReceive(200);
91+
92+
if(res == ACK_SUCCESS && RxBuf[Q3] == ACK_SUCCESS) {
93+
return ACK_SUCCESS;
94+
}
95+
else {
96+
return ACK_FAIL;
97+
}
98+
}
99+
100+
uint8_t FingerPrint::fpm_readAddMode(void)
101+
{
102+
FP.TxBuf[CMD] = CMD_ADD_MODE;
103+
FP.TxBuf[P1] = 0;
104+
FP.TxBuf[P2] = 0;
105+
FP.TxBuf[P3] = 0X01;
106+
107+
fpm_sendAndReceive(200);
108+
109+
return RxBuf[Q2];
110+
}
111+
112+
uint16_t FingerPrint::fpm_getUserNum(void)
113+
{
114+
uint8_t res;
115+
116+
FP.TxBuf[CMD] = CMD_USER_CNT;
117+
FP.TxBuf[P1] = 0;
118+
FP.TxBuf[P2] = 0;
119+
FP.TxBuf[P3] = 0;
120+
121+
res = fpm_sendAndReceive(200);
122+
123+
if(res == ACK_SUCCESS && FP.RxBuf[Q3] == ACK_SUCCESS) {
124+
return FP.RxBuf[Q2];
125+
}
126+
else {
127+
return 0XFF;
128+
}
129+
130+
}
131+
132+
uint8_t FingerPrint::fpm_deleteAllUser(void)
133+
{
134+
uint8_t res;
135+
136+
FP.TxBuf[CMD] = CMD_DEL_ALL;
137+
FP.TxBuf[P1] = 0;
138+
FP.TxBuf[P2] = 0;
139+
FP.TxBuf[P3] = 0;
140+
141+
res = fpm_sendAndReceive(200);
142+
143+
if(res == ACK_SUCCESS && RxBuf[Q3] == ACK_SUCCESS) {
144+
return ACK_SUCCESS;
145+
}
146+
else {
147+
return ACK_FAIL;
148+
}
149+
}
150+
151+
uint8_t FingerPrint::fpm_deleteUser(uint8_t userNum)
152+
{
153+
uint8_t res;
154+
155+
FP.TxBuf[CMD] = CMD_DEL;
156+
FP.TxBuf[P1] = 0;
157+
FP.TxBuf[P2] = userNum;
158+
FP.TxBuf[P3] = 0;
159+
160+
res = fpm_sendAndReceive(200);
161+
162+
if(res == ACK_SUCCESS && RxBuf[Q3] == ACK_SUCCESS) {
163+
return ACK_SUCCESS;
164+
}
165+
else {
166+
return ACK_FAIL;
167+
}
168+
}
169+
170+
uint8_t FingerPrint::fpm_addUser(uint8_t userNum, uint8_t userPermission)
171+
{
172+
uint8_t res;
173+
174+
FP.TxBuf[CMD] = CMD_ADD_1;
175+
FP.TxBuf[P1] = 0;
176+
FP.TxBuf[P2] = userNum;
177+
FP.TxBuf[P3] = userPermission;
178+
179+
res = fpm_sendAndReceive(F_Time);
180+
181+
if(res == ACK_SUCCESS) {
182+
if(FP.RxBuf[Q3] == ACK_SUCCESS) {
183+
FP.TxBuf[CMD] = CMD_ADD_2;
184+
185+
res = fpm_sendAndReceive(F_Time);
186+
187+
if(res == ACK_SUCCESS) {
188+
if(FP.RxBuf[Q3] == ACK_SUCCESS) {
189+
FP.TxBuf[CMD] = CMD_ADD_3;
190+
191+
res = fpm_sendAndReceive(F_Time);
192+
193+
if(res == ACK_SUCCESS) {
194+
return FP.RxBuf[Q3];
195+
}
196+
}
197+
}
198+
}
199+
}
200+
return res;
201+
202+
}
203+
204+
uint8_t FingerPrint::fpm_compareFinger(void)
205+
{
206+
uint8_t res;
207+
208+
FP.TxBuf[CMD] = CMD_MATCH;
209+
FP.TxBuf[P1] = 0;
210+
FP.TxBuf[P2] = 0;
211+
FP.TxBuf[P3] = 0;
212+
213+
res = fpm_sendAndReceive(8000);
214+
215+
if(res == ACK_SUCCESS)
216+
{
217+
if(FP.RxBuf[Q3] == ACK_NOUSER) {
218+
return ACK_NOUSER;
219+
}
220+
if(FP.RxBuf[Q3] == ACK_TIMEOUT) {
221+
return ACK_TIMEOUT;
222+
}
223+
if((FP.RxBuf[Q2] != 0) && (FP.RxBuf[Q3] == 1 || FP.RxBuf[Q3] == 2 || FP.RxBuf[Q3] == 3)) {
224+
return ACK_SUCCESS;
225+
}
226+
}
227+
return res;
228+
}
229+
230+

0 commit comments

Comments
 (0)