mirror of
https://github.com/m5stack/M5Stack.git
synced 2026-05-20 10:06:46 -07:00
TRACE、LoRaWan868、UHF
This commit is contained in:
@@ -20,107 +20,107 @@ M5Canvas canvas(&display);
|
||||
|
||||
String waitRevice()
|
||||
{
|
||||
String recvStr;
|
||||
do
|
||||
{
|
||||
recvStr = Serial2.readStringUntil('\n');
|
||||
} while (recvStr.length() == 0);
|
||||
canvas.println(recvStr);
|
||||
return recvStr;
|
||||
String recvStr;
|
||||
do
|
||||
{
|
||||
recvStr = Serial2.readStringUntil('\n');
|
||||
} while (recvStr.length() == 0);
|
||||
canvas.println(recvStr);
|
||||
return recvStr;
|
||||
}
|
||||
|
||||
uint16_t ypos = 55;
|
||||
|
||||
void drawLineStr(String str, uint16_t color)
|
||||
{
|
||||
M5.Lcd.setTextColor(color);
|
||||
M5.Lcd.drawString(str, 10, ypos, 4);
|
||||
ypos += 32;
|
||||
M5.Lcd.setTextColor(color);
|
||||
M5.Lcd.drawString(str, 10, ypos, 4);
|
||||
ypos += 32;
|
||||
}
|
||||
|
||||
|
||||
void sendATCMD(String cmdStr)
|
||||
{
|
||||
Serial2.print(cmdStr);
|
||||
delay(100);
|
||||
Serial2.print(cmdStr);
|
||||
delay(100);
|
||||
}
|
||||
|
||||
int sendATCMDAndRevice(String cmdStr)
|
||||
{
|
||||
Serial2.print(cmdStr);
|
||||
delay(10);
|
||||
waitRevice();
|
||||
String recvStr = waitRevice();
|
||||
if (recvStr.indexOf("OK") != -1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
Serial2.print(cmdStr);
|
||||
delay(10);
|
||||
waitRevice();
|
||||
String recvStr = waitRevice();
|
||||
if (recvStr.indexOf("OK") != -1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
void setup()
|
||||
{
|
||||
M5.begin();
|
||||
Serial2.begin(115200, SERIAL_8N1, 16, 17);
|
||||
Serial2.flush();
|
||||
delay(100);
|
||||
display.begin();
|
||||
display.setTextSize(2);
|
||||
canvas.setColorDepth(1); // mono color
|
||||
canvas.createSprite(display.width(), display.height());
|
||||
canvas.setTextSize((float)canvas.width() / 160);
|
||||
canvas.setTextScroll(true);
|
||||
M5.begin();
|
||||
Serial2.begin(115200, SERIAL_8N1, 16, 17);
|
||||
Serial2.flush();
|
||||
delay(100);
|
||||
display.begin();
|
||||
display.setTextSize(2);
|
||||
canvas.setColorDepth(1); // mono color
|
||||
canvas.createSprite(display.width(), display.height());
|
||||
canvas.setTextSize((float)canvas.width() / 160);
|
||||
canvas.setTextScroll(true);
|
||||
|
||||
sendATCMD("AT?\r");
|
||||
delay(100);
|
||||
Serial2.flush();
|
||||
sendATCMDAndRevice("AT+ILOGLVL=0\r");
|
||||
sendATCMDAndRevice("AT+CSAVE\r");
|
||||
sendATCMDAndRevice("AT+IREBOOT=0\r");
|
||||
display.println("LoraWan Rebooting");
|
||||
delay(2000);
|
||||
display.println("LoraWan config");
|
||||
sendATCMDAndRevice("AT+CJOINMODE=0\r");
|
||||
sendATCMDAndRevice("AT+CDEVEUI=00BB9DA5B97ADDF6\r");
|
||||
sendATCMDAndRevice("AT+CAPPEUI=70B3D57ED004247E\r");//70B3D57ED003B699
|
||||
sendATCMDAndRevice("AT+CAPPKEY=27DFE264CA33AC1957C005EB48BA4723\r");
|
||||
sendATCMDAndRevice("AT+CULDLMODE=2\r");
|
||||
sendATCMDAndRevice("AT+CCLASS=2\r");
|
||||
sendATCMDAndRevice("AT+CWORKMODE=2\r");
|
||||
sendATCMDAndRevice("AT+CNBTRIALS=0,5\r");
|
||||
sendATCMDAndRevice("AT+CNBTRIALS=1,5\r");
|
||||
sendATCMD("AT?\r");
|
||||
delay(100);
|
||||
Serial2.flush();
|
||||
sendATCMDAndRevice("AT+ILOGLVL=0\r");
|
||||
sendATCMDAndRevice("AT+CSAVE\r");
|
||||
sendATCMDAndRevice("AT+IREBOOT=0\r");
|
||||
display.println("LoraWan Rebooting");
|
||||
delay(2000);
|
||||
display.println("LoraWan config");
|
||||
sendATCMDAndRevice("AT+CJOINMODE=0\r");
|
||||
sendATCMDAndRevice("AT+CDEVEUI=00BB9DA5B97ADDF6\r");
|
||||
sendATCMDAndRevice("AT+CAPPEUI=70B3D57ED004247E\r");//70B3D57ED003B699
|
||||
sendATCMDAndRevice("AT+CAPPKEY=27DFE264CA33AC1957C005EB48BA4723\r");
|
||||
sendATCMDAndRevice("AT+CULDLMODE=2\r");
|
||||
sendATCMDAndRevice("AT+CCLASS=2\r");
|
||||
sendATCMDAndRevice("AT+CWORKMODE=2\r");
|
||||
sendATCMDAndRevice("AT+CNBTRIALS=0,5\r");
|
||||
sendATCMDAndRevice("AT+CNBTRIALS=1,5\r");
|
||||
|
||||
// TX Freq
|
||||
// 868.1 - SF7BW125 to SF12BW125
|
||||
// 868.3 - SF7BW125 to SF12BW125 and SF7BW250
|
||||
// 868.5 - SF7BW125 to SF12BW125
|
||||
// 867.1 - SF7BW125 to SF12BW125
|
||||
// 867.3 - SF7BW125 to SF12BW125
|
||||
// 867.5 - SF7BW125 to SF12BW125
|
||||
// 867.7 - SF7BW125 to SF12BW125
|
||||
// 867.9 - SF7BW125 to SF12BW125
|
||||
// 868.8 - FSK
|
||||
// TX Freq
|
||||
// 868.1 - SF7BW125 to SF12BW125
|
||||
// 868.3 - SF7BW125 to SF12BW125 and SF7BW250
|
||||
// 868.5 - SF7BW125 to SF12BW125
|
||||
// 867.1 - SF7BW125 to SF12BW125
|
||||
// 867.3 - SF7BW125 to SF12BW125
|
||||
// 867.5 - SF7BW125 to SF12BW125
|
||||
// 867.7 - SF7BW125 to SF12BW125
|
||||
// 867.9 - SF7BW125 to SF12BW125
|
||||
// 868.8 - FSK
|
||||
|
||||
sendATCMDAndRevice("AT+CFREQBANDMASK=0001\r");
|
||||
sendATCMDAndRevice("AT+CFREQBANDMASK=0001\r");
|
||||
|
||||
//869.525 - SF9BW125 (RX2) | 869525000
|
||||
//sendATCMDAndRevice("AT+CRXP=0,0,869525000\r");
|
||||
//869.525 - SF9BW125 (RX2) | 869525000
|
||||
//sendATCMDAndRevice("AT+CRXP=0,0,869525000\r");
|
||||
|
||||
sendATCMDAndRevice("AT+CSAVE\r");
|
||||
|
||||
sendATCMDAndRevice("AT+CJOIN=1,0,10,8\r");
|
||||
sendATCMDAndRevice("AT+CSAVE\r");
|
||||
|
||||
sendATCMDAndRevice("AT+CJOIN=1,0,10,8\r");
|
||||
}
|
||||
|
||||
enum systemstate
|
||||
{
|
||||
kIdel = 0,
|
||||
kJoined,
|
||||
kSending,
|
||||
kWaitSend,
|
||||
kEnd,
|
||||
kIdel = 0,
|
||||
kJoined,
|
||||
kSending,
|
||||
kWaitSend,
|
||||
kEnd,
|
||||
};
|
||||
int system_fsm = kIdel;
|
||||
|
||||
@@ -131,93 +131,93 @@ int loraWanupLinkReviceCNT = 0;
|
||||
|
||||
void loop()
|
||||
{
|
||||
String recvStr = waitRevice();
|
||||
if (recvStr.indexOf("+CJOIN:") != -1)
|
||||
String recvStr = waitRevice();
|
||||
if (recvStr.indexOf("+CJOIN:") != -1)
|
||||
{
|
||||
if (recvStr.indexOf("OK") != -1)
|
||||
{
|
||||
if (recvStr.indexOf("OK") != -1)
|
||||
{
|
||||
canvas.println("[ INFO ] JOIN IN SUCCESSFUL");
|
||||
system_fsm = kJoined;
|
||||
}
|
||||
else
|
||||
{
|
||||
canvas.println("[ INFO ] JOIN IN FAIL");
|
||||
system_fsm = kIdel;
|
||||
}
|
||||
canvas.println("[ INFO ] JOIN IN SUCCESSFUL");
|
||||
system_fsm = kJoined;
|
||||
}
|
||||
else if (recvStr.indexOf("OK+RECV") != -1)
|
||||
else
|
||||
{
|
||||
if (system_fsm == kJoined)
|
||||
{
|
||||
system_fsm = kSending;
|
||||
}
|
||||
else if (system_fsm == kWaitSend)
|
||||
{
|
||||
system_fsm = kEnd;
|
||||
char strbuff[128];
|
||||
loraWanupLinkReviceCNT ++;
|
||||
|
||||
//if(( loraWanSendCNT < 5 )&&( loraWanSendNUM == 8 ))
|
||||
//{
|
||||
// loraWanupLinkReviceCNT ++;
|
||||
// sprintf(strbuff,"SEND CNT: %d (%d/%d)",loraWanSendCNT,loraWanupLinkReviceCNT,loraWanupLinkCNT);
|
||||
// M5.Lcd.fillRect(0,183,320,32,TFT_BLACK);
|
||||
// M5.Lcd.setTextColor(TFT_GREEN);
|
||||
// M5.Lcd.drawString(strbuff, 10, 183, 4);
|
||||
// //drawLineStr(strbuff, TFT_GREEN);
|
||||
//
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// sprintf(strbuff,"FAILD NUM:%d CNT:%d (%d/%d)",loraWanSendNUM,loraWanSendCNT,loraWanupLinkReviceCNT,loraWanupLinkCNT);
|
||||
// M5.Lcd.fillRect(0,183,320,32,TFT_BLACK);
|
||||
// M5.Lcd.setTextColor(TFT_RED);
|
||||
// M5.Lcd.drawString(strbuff, 10, 183, 4);
|
||||
// drawLineStr(strbuff, TFT_RED);
|
||||
//}
|
||||
delay(500);
|
||||
system_fsm = kSending;
|
||||
}
|
||||
canvas.println("[ INFO ] JOIN IN FAIL");
|
||||
system_fsm = kIdel;
|
||||
}
|
||||
else if(recvStr.indexOf("OK+SEND") != -1)
|
||||
}
|
||||
else if (recvStr.indexOf("OK+RECV") != -1)
|
||||
{
|
||||
if (system_fsm == kJoined)
|
||||
{
|
||||
String snednum = recvStr.substring(8);
|
||||
canvas.printf(" [ INFO ] SEND NUM %s \r\n",snednum.c_str());
|
||||
loraWanSendNUM = snednum.toInt();
|
||||
}
|
||||
else if(recvStr.indexOf("OK+SENT") != -1)
|
||||
{
|
||||
String snedcnt = recvStr.substring(8);
|
||||
canvas.printf(" [ INFO ] SEND CNT %s \r\n",snedcnt.c_str());
|
||||
loraWanSendCNT = snedcnt.toInt();
|
||||
}
|
||||
else if(recvStr.indexOf("ERR+SENT") != -1)
|
||||
{
|
||||
char strbuff[128];
|
||||
String ErrorCodeStr = recvStr.substring(9);
|
||||
sprintf(strbuff,"ERROR Code:%d (%d/%d)",ErrorCodeStr.toInt(),loraWanupLinkReviceCNT,loraWanupLinkCNT);
|
||||
canvas.println(strbuff);
|
||||
delay(500);
|
||||
|
||||
system_fsm = kSending;
|
||||
}
|
||||
else if(recvStr.indexOf("+CLINKCHECK:") != -1)
|
||||
else if (system_fsm == kWaitSend)
|
||||
{
|
||||
String checkStr = recvStr.substring(String("+CLINKCHECK:").length());
|
||||
|
||||
char strbuff[128];
|
||||
sprintf(strbuff,"%s (%d/%d)",checkStr.c_str(),loraWanupLinkReviceCNT,loraWanupLinkCNT);
|
||||
canvas.println(strbuff);
|
||||
system_fsm = kEnd;
|
||||
char strbuff[128];
|
||||
loraWanupLinkReviceCNT ++;
|
||||
|
||||
//if(( loraWanSendCNT < 5 )&&( loraWanSendNUM == 8 ))
|
||||
//{
|
||||
// loraWanupLinkReviceCNT ++;
|
||||
// sprintf(strbuff,"SEND CNT: %d (%d/%d)",loraWanSendCNT,loraWanupLinkReviceCNT,loraWanupLinkCNT);
|
||||
// M5.Lcd.fillRect(0,183,320,32,TFT_BLACK);
|
||||
// M5.Lcd.setTextColor(TFT_GREEN);
|
||||
// M5.Lcd.drawString(strbuff, 10, 183, 4);
|
||||
// //drawLineStr(strbuff, TFT_GREEN);
|
||||
//
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// sprintf(strbuff,"FAILD NUM:%d CNT:%d (%d/%d)",loraWanSendNUM,loraWanSendCNT,loraWanupLinkReviceCNT,loraWanupLinkCNT);
|
||||
// M5.Lcd.fillRect(0,183,320,32,TFT_BLACK);
|
||||
// M5.Lcd.setTextColor(TFT_RED);
|
||||
// M5.Lcd.drawString(strbuff, 10, 183, 4);
|
||||
// drawLineStr(strbuff, TFT_RED);
|
||||
//}
|
||||
delay(500);
|
||||
system_fsm = kSending;
|
||||
}
|
||||
}
|
||||
else if(recvStr.indexOf("OK+SEND") != -1)
|
||||
{
|
||||
String snednum = recvStr.substring(8);
|
||||
canvas.printf(" [ INFO ] SEND NUM %s \r\n",snednum.c_str());
|
||||
loraWanSendNUM = snednum.toInt();
|
||||
}
|
||||
else if(recvStr.indexOf("OK+SENT") != -1)
|
||||
{
|
||||
String snedcnt = recvStr.substring(8);
|
||||
canvas.printf(" [ INFO ] SEND CNT %s \r\n",snedcnt.c_str());
|
||||
loraWanSendCNT = snedcnt.toInt();
|
||||
}
|
||||
else if(recvStr.indexOf("ERR+SENT") != -1)
|
||||
{
|
||||
char strbuff[128];
|
||||
String ErrorCodeStr = recvStr.substring(9);
|
||||
sprintf(strbuff,"ERROR Code:%d (%d/%d)",ErrorCodeStr.toInt(),loraWanupLinkReviceCNT,loraWanupLinkCNT);
|
||||
canvas.println(strbuff);
|
||||
delay(500);
|
||||
|
||||
if (system_fsm == kSending)
|
||||
{
|
||||
canvas.println("LoraWan Sending");
|
||||
sendATCMD("AT+CLINKCHECK=1\r");
|
||||
loraWanupLinkCNT ++;
|
||||
system_fsm = kWaitSend;
|
||||
}
|
||||
canvas.pushSprite(0, 0);
|
||||
delay(10);
|
||||
}
|
||||
system_fsm = kSending;
|
||||
}
|
||||
else if(recvStr.indexOf("+CLINKCHECK:") != -1)
|
||||
{
|
||||
String checkStr = recvStr.substring(String("+CLINKCHECK:").length());
|
||||
|
||||
char strbuff[128];
|
||||
sprintf(strbuff,"%s (%d/%d)",checkStr.c_str(),loraWanupLinkReviceCNT,loraWanupLinkCNT);
|
||||
canvas.println(strbuff);
|
||||
|
||||
}
|
||||
|
||||
if (system_fsm == kSending)
|
||||
{
|
||||
canvas.println("LoraWan Sending");
|
||||
sendATCMD("AT+CLINKCHECK=1\r");
|
||||
loraWanupLinkCNT ++;
|
||||
system_fsm = kWaitSend;
|
||||
}
|
||||
canvas.pushSprite(0, 0);
|
||||
delay(10);
|
||||
}
|
||||
@@ -1,5 +1,16 @@
|
||||
/*
|
||||
Description: Read the status of the four line-tracking sensors of TRACE Unit and output them through UART.
|
||||
*******************************************************************************
|
||||
* Copyright (c) 2021 by M5Stack
|
||||
* Equipped with M5Core sample source code
|
||||
* 配套 M5Core 示例源代码
|
||||
* Visit the website for more information:https://docs.m5stack.com/en/unit/trace
|
||||
* 获取更多资料请访问:https://docs.m5stack.com/zh_CN/unit/trace
|
||||
*
|
||||
* describe: TRACE.
|
||||
* date:2021/9/1
|
||||
*******************************************************************************
|
||||
Please connect to PORT-A, Read the status of the four line-tracking sensors of TRACE Unit and output them through UART.
|
||||
请连接端口A,读取TRACE Unit四个线跟踪传感器的状态,并通过UART输出。
|
||||
*/
|
||||
|
||||
#include <M5Stack.h>
|
||||
@@ -9,44 +20,44 @@
|
||||
uint8_t value;
|
||||
int SensorArray[4] = {0};
|
||||
|
||||
void setup() {
|
||||
m5.begin();
|
||||
M5.Power.begin();
|
||||
void SensorStatus(void){
|
||||
Wire.beginTransmission(0x5a); //The data transfer to 0x5A begins. 开始向0x5a传输数据
|
||||
Wire.write(0x00);
|
||||
Wire.endTransmission(); //End the data transmission.结束数据传输
|
||||
Wire.requestFrom(0x5a,1); //Request a byte from 0x5a. 向0x5a请求一个字节
|
||||
while(Wire.available()){ //If data is received. 如果数据被接收到
|
||||
value = Wire.read();
|
||||
}
|
||||
M5.Lcd.print(" value = ");
|
||||
M5.Lcd.println(value, HEX);
|
||||
#ifdef VALUE_SPLIT
|
||||
SensorArray[3] = (value&0x08)>>3;
|
||||
SensorArray[2] = (value&0x04)>>2;
|
||||
SensorArray[1] = (value&0x02)>>1;
|
||||
SensorArray[0] = (value&0x01)>>0;
|
||||
M5.Lcd.println(" After splitting... ");
|
||||
M5.Lcd.print(" SensorArray[0] = "); M5.Lcd.println(SensorArray[0]);
|
||||
M5.Lcd.print(" SensorArray[1] = "); M5.Lcd.println(SensorArray[1]);
|
||||
M5.Lcd.print(" SensorArray[2] = "); M5.Lcd.println(SensorArray[2]);
|
||||
M5.Lcd.print(" SensorArray[3] = "); M5.Lcd.println(SensorArray[3]);
|
||||
#endif
|
||||
}
|
||||
|
||||
Serial.begin(115200);
|
||||
Wire.begin();
|
||||
M5.Lcd.clear(BLACK);
|
||||
M5.Lcd.setTextColor(YELLOW);
|
||||
M5.Lcd.setTextSize(2);
|
||||
M5.Lcd.setCursor(80, 0);
|
||||
M5.Lcd.println("TRACE example");
|
||||
M5.Lcd.setTextColor(WHITE);
|
||||
void setup() {
|
||||
M5.begin();
|
||||
M5.Power.begin();
|
||||
|
||||
Wire.begin();
|
||||
M5.Lcd.setTextColor(YELLOW);
|
||||
M5.Lcd.setTextSize(2);
|
||||
M5.Lcd.setCursor(80, 0);
|
||||
M5.Lcd.println("TRACE example");
|
||||
M5.Lcd.setTextColor(WHITE);
|
||||
}
|
||||
|
||||
void loop(){
|
||||
SensorStatus();
|
||||
delay(100);
|
||||
}
|
||||
|
||||
void SensorStatus(void){
|
||||
Wire.beginTransmission(0x5a);
|
||||
Wire.write(0x00);
|
||||
Wire.endTransmission();
|
||||
Wire.requestFrom(0x5a,1);
|
||||
while(Wire.available()){
|
||||
value = Wire.read();
|
||||
}
|
||||
Serial.print(" value = ");Serial.println(value, HEX);
|
||||
#ifdef VALUE_SPLIT
|
||||
SensorArray[3] = (value&0x08)>>3;
|
||||
SensorArray[2] = (value&0x04)>>2;
|
||||
SensorArray[1] = (value&0x02)>>1;
|
||||
SensorArray[0] = (value&0x01)>>0;
|
||||
Serial.println("After splitting... ");
|
||||
Serial.print("SensorArray[0] = ");Serial.print(SensorArray[0]);
|
||||
Serial.print(" SensorArray[1] = ");Serial.print(SensorArray[1]);
|
||||
Serial.print(" SensorArray[2] = ");Serial.print(SensorArray[2]);
|
||||
Serial.print(" SensorArray[3] = ");Serial.print(SensorArray[3]);
|
||||
Serial.println();
|
||||
#endif
|
||||
}
|
||||
M5.Lcd.fillRect(0,20,320,180,BLACK);
|
||||
M5.Lcd.setCursor(100,70);
|
||||
SensorStatus();
|
||||
delay(100);
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
#include <M5Stack.h>
|
||||
#include <Arduino.h>
|
||||
#include "RFID_command.h"
|
||||
#include <string>
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#include <M5Stack.h>
|
||||
#include <Arduino.h>
|
||||
#include "RFID_command.h"
|
||||
#include <string>
|
||||
|
||||
|
||||
@@ -1,162 +0,0 @@
|
||||
#include "TFTTerminal.h"
|
||||
|
||||
TFTTerminal::TFTTerminal(TFT_eSprite *dis_buff_ptr)
|
||||
{
|
||||
_dis_buff_ptr = dis_buff_ptr;
|
||||
memset(discharbuff, 0, 55 * 60);
|
||||
}
|
||||
|
||||
TFTTerminal::~TFTTerminal()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
void TFTTerminal::setcolor( uint16_t color, uint16_t bk_color )
|
||||
{
|
||||
_color = color;
|
||||
_bkcolor = bk_color;
|
||||
}
|
||||
|
||||
void TFTTerminal::setGeometry(uint16_t x, uint16_t y, uint16_t w, uint16_t h )
|
||||
{
|
||||
_win_x_pos = x;
|
||||
_win_y_pos = y;
|
||||
_win_w = w;
|
||||
_win_h = h;
|
||||
|
||||
_line_x_limit = _win_w / _font_x_size;
|
||||
_line_y_limit = _win_h / _font_y_size;
|
||||
}
|
||||
|
||||
void TFTTerminal::setFontsize(uint8_t size)
|
||||
{
|
||||
size = ( size == 0 ) ? 1 : size;
|
||||
_font_x_size = 5 * size ;
|
||||
_font_y_size = 6 * size ;
|
||||
_fontSize = size;
|
||||
|
||||
_line_x_limit = _win_w / _font_x_size;
|
||||
_line_y_limit = _win_h / _font_y_size;
|
||||
}
|
||||
|
||||
size_t TFTTerminal::write(uint8_t chardata)
|
||||
{
|
||||
|
||||
bool flush_page_flag = false;
|
||||
uint8_t dis_y_pos = 0;
|
||||
|
||||
if ((chardata == '\r') || (chardata == '\n'))
|
||||
{
|
||||
xpos = 0;
|
||||
ypos++;
|
||||
ypos = ypos % 60;
|
||||
memset(discharbuff[ypos % 60], 0, 55);
|
||||
return 1;
|
||||
}
|
||||
else if(xpos >= _line_x_limit)
|
||||
{
|
||||
xpos = 0;
|
||||
ypos++;
|
||||
ypos = ypos % 60;
|
||||
memset(discharbuff[ypos % 60], 0, 55);
|
||||
}
|
||||
|
||||
discharbuff[ypos][xpos] = chardata;
|
||||
xpos++;
|
||||
|
||||
if ((dispos <= ypos) && ((ypos - dispos) > _line_y_limit))
|
||||
{
|
||||
dispos = ypos - _line_y_limit;
|
||||
flush_page_flag = true;
|
||||
}
|
||||
else if ((dispos <= ypos) && ((ypos - dispos) <= _line_y_limit))
|
||||
{
|
||||
dis_y_pos = ypos - dispos;
|
||||
flush_page_flag = false;
|
||||
}
|
||||
else if ((dispos > ypos) && ((60 - (dispos - ypos)) > _line_y_limit))
|
||||
{
|
||||
dispos = 60 - ( _line_y_limit - ypos );
|
||||
flush_page_flag = true;
|
||||
}
|
||||
else if ((dispos > ypos) && ((60 - (dispos - ypos)) > _line_y_limit))
|
||||
{
|
||||
dis_y_pos = 60 - ( dispos - ypos );
|
||||
flush_page_flag = false;
|
||||
}
|
||||
|
||||
dispos = dispos % 60;
|
||||
|
||||
_dis_buff_ptr->setTextColor(_color);
|
||||
_dis_buff_ptr->setTextSize(_fontSize);
|
||||
|
||||
if( flush_page_flag )
|
||||
{
|
||||
_dis_buff_ptr->fillSprite(_bkcolor);
|
||||
|
||||
for (size_t i = 0; i < _line_y_limit; i++)
|
||||
{
|
||||
_dis_buff_ptr->drawString((char *)discharbuff[(dispos + i) % 60], 0, i * _font_y_size);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_dis_buff_ptr->drawChar(chardata, ( xpos - 1 ) * _font_x_size, dis_y_pos * _font_y_size );
|
||||
}
|
||||
_dis_buff_ptr->pushSprite(_win_x_pos, _win_y_pos);
|
||||
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
size_t TFTTerminal::write(const uint8_t *buffer, size_t size)
|
||||
{
|
||||
|
||||
while ((size != 0) && (*buffer != '\0'))
|
||||
{
|
||||
if ((*buffer == '\r') || (*buffer == '\n'))
|
||||
{
|
||||
xpos = 0;
|
||||
ypos++;
|
||||
ypos = ypos % 60;
|
||||
memset(discharbuff[ypos % 60], 0, 55);
|
||||
buffer++;
|
||||
size--;
|
||||
continue;
|
||||
}
|
||||
else if(xpos >= _line_x_limit)
|
||||
{
|
||||
xpos = 0;
|
||||
ypos++;
|
||||
ypos = ypos % 60;
|
||||
memset(discharbuff[ypos % 60], 0, 55);
|
||||
}
|
||||
discharbuff[ypos][xpos] = *buffer;
|
||||
xpos++;
|
||||
buffer++;
|
||||
size--;
|
||||
}
|
||||
|
||||
if ((dispos <= ypos) && ((ypos - dispos) > _line_y_limit))
|
||||
{
|
||||
dispos = ypos - _line_y_limit;
|
||||
}
|
||||
else if ((dispos > ypos) && ((60 - (dispos - ypos)) > _line_y_limit))
|
||||
{
|
||||
dispos = 60- ( _line_y_limit - ypos );
|
||||
}
|
||||
|
||||
dispos = dispos % 60;
|
||||
|
||||
_dis_buff_ptr->setTextColor(_color);
|
||||
_dis_buff_ptr->setTextSize(_fontSize);
|
||||
_dis_buff_ptr->fillSprite(_bkcolor);
|
||||
//_dis_buff_ptr->fillRect(_win_x_pos, _win_y_pos, _win_w, _win_h, _bkcolor);
|
||||
for (size_t i = 0; i < _line_y_limit; i++)
|
||||
{
|
||||
_dis_buff_ptr->drawString((char *)discharbuff[(dispos + i) % 60], 0, i * _font_y_size);
|
||||
}
|
||||
_dis_buff_ptr->pushSprite(_win_x_pos, _win_y_pos);
|
||||
return 1;
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
#ifndef _TFTTERMINAL_H_
|
||||
#define _TFTTERMINAL_H_
|
||||
|
||||
#include <M5Stack.h>
|
||||
#include <Print.h>
|
||||
|
||||
class TFTTerminal : public Print
|
||||
{
|
||||
private:
|
||||
TFT_eSprite *disptr;
|
||||
char discharbuff[60][55];
|
||||
uint32_t xpos = 0,ypos = 0, dispos = 0;
|
||||
TFT_eSprite* _dis_buff_ptr = NULL;
|
||||
uint16_t _bkcolor = TFT_BLACK;
|
||||
uint16_t _color = TFT_GREEN;
|
||||
|
||||
uint16_t _win_x_pos = 0,_win_y_pos = 0,_win_w = 320,_win_h = 240;
|
||||
uint16_t _font_x_size = 6,_font_y_size = 8;
|
||||
uint8_t _fontSize = 0;
|
||||
uint16_t _line_x_limit = 53,_line_y_limit = 30;
|
||||
|
||||
public:
|
||||
TFTTerminal(TFT_eSprite *dis_buff_ptr);
|
||||
~TFTTerminal();
|
||||
|
||||
void setcolor( uint16_t color, uint16_t bk_color );
|
||||
void setGeometry(uint16_t x, uint16_t y, uint16_t w, uint16_t h );
|
||||
void setFontsize(uint8_t size);
|
||||
|
||||
size_t write(uint8_t) ;
|
||||
size_t write(const uint8_t *buffer, size_t size);
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
@@ -7,21 +7,18 @@
|
||||
* 获取更多资料请访问:https://docs.m5stack.com/zh_CN/unit/uhf_rfid
|
||||
*
|
||||
* describe: uhf_rfid.
|
||||
* date:2021/8/30
|
||||
* date:2021/9/1
|
||||
*******************************************************************************
|
||||
Please connect to PORT-B,Press buttonA or buttonB to Send message if received message, screen will display
|
||||
请连接端口B,按钮A或按钮B发送消息,如果收到消息,屏幕将显示
|
||||
*/
|
||||
#include <M5Stack.h>
|
||||
#include "RFID_command.h"
|
||||
#include <M5GFX.h>
|
||||
|
||||
#include "TFTTerminal.h"
|
||||
TFT_eSprite TerminalBuff = TFT_eSprite(&M5.Lcd);
|
||||
TFTTerminal terminal(&TerminalBuff);
|
||||
M5GFX display;
|
||||
M5Canvas canvas(&display);
|
||||
|
||||
UHF_RFID RFID;
|
||||
|
||||
|
||||
String comd = " ";
|
||||
CardpropertiesInfo card;
|
||||
ManyInfo cards;
|
||||
@@ -35,16 +32,18 @@ TestInfo Test;
|
||||
void setup()
|
||||
{
|
||||
M5.begin();
|
||||
display.begin();
|
||||
display.setTextSize(2);
|
||||
canvas.setColorDepth(1); // mono color
|
||||
canvas.createSprite(display.width(), display.height());
|
||||
canvas.setTextSize((float)canvas.width() / 160);
|
||||
canvas.setTextScroll(true);
|
||||
|
||||
RFID._debug = 0;
|
||||
Serial2.begin(115200, SERIAL_8N1, 16, 17);//16.17
|
||||
if (RFID._debug == 1)Serial.begin(115200, SERIAL_8N1, 21, 22);
|
||||
M5.Lcd.fillRect(0, 0, 340, 280, BLACK);
|
||||
|
||||
TerminalBuff.createSprite(280,200);
|
||||
terminal.setGeometry(20,30,300,200);
|
||||
terminal.setFontsize(1);
|
||||
|
||||
// UHF_RFID set UHF_RFID设置
|
||||
RFID.Set_transmission_Power(2600);
|
||||
RFID.Set_the_Select_mode();
|
||||
@@ -53,7 +52,7 @@ void setup()
|
||||
RFID.clean_data();
|
||||
|
||||
// Prompted to connect to UHF_RFID 提示连接UHF_RFID
|
||||
terminal.println("Please connect UHF_RFID to Port C");
|
||||
display.println("Please connect UHF_RFID to Port C");
|
||||
|
||||
// Determined whether to connect to UHF_RFID 判断是否连接UHF_RFID
|
||||
String soft_version;
|
||||
@@ -69,7 +68,7 @@ void setup()
|
||||
}
|
||||
|
||||
// The prompt will be RFID card close 提示将RFID卡靠近
|
||||
terminal.println("Please approach the RFID card you need to use");
|
||||
display.println("Please approach the RFID card you need to use");
|
||||
|
||||
}
|
||||
|
||||
@@ -83,62 +82,58 @@ void loop()
|
||||
|
||||
// A read/write operation specifies a particular card 读写操作需指定某一张卡
|
||||
// comd = RFID.Set_the_select_parameter_directive("30751FEB705C5904E3D50D70");
|
||||
// terminal.println(comd);
|
||||
// canvas.println(comd);
|
||||
// RFID.clean_data();
|
||||
|
||||
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Query the card information once 查询一次卡的信息例子
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
||||
card = RFID.A_single_poll_of_instructions();
|
||||
if (card._ERROR.length() != 0)
|
||||
{
|
||||
Serial.print(card._ERROR);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(card._EPC.length() == 24)
|
||||
{
|
||||
terminal.println("RSSI :" + card._RSSI);
|
||||
terminal.println("PC :" + card._PC);
|
||||
terminal.println("EPC :" + card._EPC);
|
||||
terminal.println("CRC :" + card._CRC);
|
||||
terminal.println(" ");
|
||||
}
|
||||
}
|
||||
RFID.clean_data(); //Empty the data after using it 使用完数据后要将数据清空
|
||||
|
||||
if (card._ERROR.length() != 0){
|
||||
Serial.println(card._ERROR);
|
||||
}else{
|
||||
if(card._EPC.length() == 24){
|
||||
canvas.println("RSSI :" + card._RSSI);
|
||||
canvas.println("PC :" + card._PC);
|
||||
canvas.println("EPC :" + card._EPC);
|
||||
canvas.println("CRC :" + card._CRC);
|
||||
canvas.println(" ");
|
||||
}
|
||||
}
|
||||
RFID.clean_data(); //Empty the data after using it 使用完数据后要将数据清空
|
||||
|
||||
|
||||
/*Other feature usage examples 其他功能使用例子*/
|
||||
|
||||
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Read multiple RFID cards at once 一次读取多张RFID卡
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
||||
// cards = RFID.Multiple_polling_instructions(6);
|
||||
// for (size_t i = 0; i < cards.len; i++)
|
||||
// {
|
||||
// if(cards.card[i]._EPC.length() == 24)
|
||||
// {
|
||||
// terminal.println("RSSI :" + cards.card[i]._RSSI);
|
||||
// terminal.println("PC :" + cards.card[i]._PC);
|
||||
// terminal.println("EPC :" + cards.card[i]._EPC);
|
||||
// terminal.println("CRC :" + cards.card[i]._CRC);
|
||||
// }
|
||||
// }
|
||||
// terminal.println(" ");
|
||||
// RFID.clean_data();
|
||||
|
||||
/* cards = RFID.Multiple_polling_instructions(6);
|
||||
for (size_t i = 0; i < cards.len; i++)
|
||||
{
|
||||
if(cards.card[i]._EPC.length() == 24)
|
||||
{
|
||||
canvas.println("RSSI :" + cards.card[i]._RSSI);
|
||||
canvas.println("PC :" + cards.card[i]._PC);
|
||||
canvas.println("EPC :" + cards.card[i]._EPC);
|
||||
canvas.println("CRC :" + cards.card[i]._CRC);
|
||||
}
|
||||
}
|
||||
canvas.println(" ");
|
||||
RFID.clean_data();
|
||||
*/
|
||||
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Used to get the SELECT parameter 用于获取Select参数
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
||||
// Select = RFID.Get_the_select_parameter();
|
||||
// if(Select.Mask.length() != 0)
|
||||
// {
|
||||
// terminal.println("Mask :" + Select.Mask);
|
||||
// terminal.println("SelParam :" + Select.SelParam);
|
||||
// terminal.println("Ptr :" + Select.Ptr);
|
||||
// terminal.println("MaskLen :" + Select.MaskLen);
|
||||
// terminal.println("Truncate :" + Select.Truncate);
|
||||
// terminal.println(" ");
|
||||
// canvas.println("Mask :" + Select.Mask);
|
||||
// canvas.println("SelParam :" + Select.SelParam);
|
||||
// canvas.println("Ptr :" + Select.Ptr);
|
||||
// canvas.println("MaskLen :" + Select.MaskLen);
|
||||
// canvas.println("Truncate :" + Select.Truncate);
|
||||
// canvas.println(" ");
|
||||
// }
|
||||
// RFID.clean_data();
|
||||
|
||||
@@ -148,15 +143,15 @@ void loop()
|
||||
// Cardinformation = RFID.NXP_Change_EAS(0x00000000);
|
||||
// if(Cardinformation._UL.length() != 0)
|
||||
// {
|
||||
// terminal.println("UL :" + Cardinformation._UL);
|
||||
// terminal.println("PC :" + Cardinformation._PC);
|
||||
// terminal.println("EPC :" + Cardinformation._EPC);
|
||||
// terminal.println("Parameter :" + Cardinformation._Parameter);
|
||||
// terminal.println("ErrorCode :" + Cardinformation._ErrorCode);
|
||||
// terminal.println("Error :" + Cardinformation._Error);
|
||||
// terminal.println("Data :" + Cardinformation._Data);
|
||||
// terminal.println("Successful :" + Cardinformation._Successful);
|
||||
// terminal.println(" ");
|
||||
// canvas.println("UL :" + Cardinformation._UL);
|
||||
// canvas.println("PC :" + Cardinformation._PC);
|
||||
// canvas.println("EPC :" + Cardinformation._EPC);
|
||||
// canvas.println("Parameter :" + Cardinformation._Parameter);
|
||||
// canvas.println("ErrorCode :" + Cardinformation._ErrorCode);
|
||||
// canvas.println("Error :" + Cardinformation._Error);
|
||||
// canvas.println("Data :" + Cardinformation._Data);
|
||||
// canvas.println("Successful :" + Cardinformation._Successful);
|
||||
// canvas.println(" ");
|
||||
// }
|
||||
// RFID.clean_data();
|
||||
|
||||
@@ -167,15 +162,15 @@ void loop()
|
||||
// Query = RFID.Get_the_Query_parameter();
|
||||
// if(Query.QueryParameter.length() != 0)
|
||||
// {
|
||||
// terminal.println("QueryParameter :" + Query.QueryParameter);
|
||||
// terminal.println("DR :" + Query.DR);
|
||||
// terminal.println("M :" + Query.M);
|
||||
// terminal.println("TRext :" + Query.TRext);
|
||||
// terminal.println("Sel :" + Query.Sel);
|
||||
// terminal.println("Session :" + Query.Session);
|
||||
// terminal.println("Targetta :" + Query.Target);
|
||||
// terminal.println("Q :" + Query.Q);
|
||||
// terminal.println(" ");
|
||||
// canvas.println("QueryParameter :" + Query.QueryParameter);
|
||||
// canvas.println("DR :" + Query.DR);
|
||||
// canvas.println("M :" + Query.M);
|
||||
// canvas.println("TRext :" + Query.TRext);
|
||||
// canvas.println("Sel :" + Query.Sel);
|
||||
// canvas.println("Session :" + Query.Session);
|
||||
// canvas.println("Targetta :" + Query.Target);
|
||||
// canvas.println("Q :" + Query.Q);
|
||||
// canvas.println(" ");
|
||||
// }
|
||||
// RFID.clean_data();
|
||||
|
||||
@@ -186,10 +181,10 @@ void loop()
|
||||
// Read = RFID.Read_receive_demodulator_parameters();
|
||||
// if(Read.Mixer_G.length()!= 0)
|
||||
// {
|
||||
// terminal.println("Mixer_G :" + Read.Mixer_G);
|
||||
// terminal.println("IF_G :" + Read.IF_G);
|
||||
// terminal.println("Thrd :" + Read.Thrd);
|
||||
// terminal.println(" ");
|
||||
// canvas.println("Mixer_G :" + Read.Mixer_G);
|
||||
// canvas.println("IF_G :" + Read.IF_G);
|
||||
// canvas.println("Thrd :" + Read.Thrd);
|
||||
// canvas.println(" ");
|
||||
// }
|
||||
// RFID.clean_data();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user