Arrays 如何将特定于常量的字节添加到从arduino上的缓冲区读取的例程中
我需要在我已经完成的代码中添加一个功能。 我需要收听Serial1(arduino leonardo的硬件端口,蓝牙接口已连接),当运行come应用程序的外部android设备出现类似字符串时,需要UID:Arrays 如何将特定于常量的字节添加到从arduino上的缓冲区读取的例程中,arrays,string,arduino,communication,uart,Arrays,String,Arduino,Communication,Uart,我需要在我已经完成的代码中添加一个功能。 我需要收听Serial1(arduino leonardo的硬件端口,蓝牙接口已连接),当运行come应用程序的外部android设备出现类似字符串时,需要UID: (byte) 0xff, (byte) 0xca, (byte) 0x00, 0x00, (byte) 0x00 getUID 我需要执行下面代码中的最后一个例程来发送特定数据: 此例程的构造必须使我能够作为一个字符串发送: 第一部分:4个字节,这4个字节的第一个字节必须是“0x55”
(byte) 0xff, (byte) 0xca, (byte) 0x00, 0x00, (byte) 0x00
getUID
我需要执行下面代码中的最后一个例程来发送特定数据:
此例程的构造必须使我能够作为一个字符串发送:
- 第一部分:4个字节,这4个字节的第一个字节必须是“0x55”,接下来的3个字节可能只是0xFF
- 第二部分:缓冲区中的数据将包含4或7字节的序列号李>
- 第三部分:2个字节,其中第一个字节为通用0xff,第二个字节必须为0xAA
#include <SPI.h>
#include <MFRC522.h>
#include <Keyboard.h>
#define RST_PIN 9
#define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN);
void setup() {
Serial.begin(9600);
while (!Serial);
Serial1.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
}
void readFromBTSerial1() {
if(Serial1.available() > 0) {
incomingByte = Serial1.read()
Push_dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
}
}
void loop() {
if ( ! mfrc522.PICC_IsNewCardPresent())
return;
if ( ! mfrc522.PICC_ReadCardSerial())
return;
Keyboard_dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Bluetooth_dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial_dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println();
// while ( mfrc522.PICC_ReadCardSerial());
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
void Serial_dump_byte_array(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? "0" : "");
Serial.print(buffer[i], HEX);
}
}
void Keyboard_dump_byte_array(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Keyboard.print(buffer[i] < 0x10 ? "0" : "");
Keyboard.print(buffer[i], HEX);
}
}
void Bluetooth_dump_byte_array(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial1.print(buffer[i] < 0x10 ? "0" : "");
Serial1.print(buffer[i], HEX);
}
}
char Header[4] = {0x55, 0xFF, 0xFF, 0xFF};
char Endpoint[2] = {0xFF, 0xAA};
void Push_dump_byte_array(byte *buffer, byte bufferSize) {
for(int i = 0; i<4; ++i){
Serial1.print(Header[i]);
}
for(byte i = 0; i < bufferSize; i++) {
Serial1.print(buffer[i] < 0x10 ? "0" : "");
Serial1.print(buffer[i], HEX);
}
for(int i = 0; i<2; ++i){
Serial1.print(Endpoint[i]);
}
}
#包括
#包括
#包括
#定义RST_引脚9
#定义SS_引脚10
MFRC522 MFRC522(不锈钢插脚、RST插脚);
无效设置(){
Serial.begin(9600);
而(!串行);
Serial1.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
}
void readFromBTSerial1(){
如果(Serial1.available()>0){
incomingByte=Serial1.read()
推送转储字节数组(mfrc522.uid.uidByte,mfrc522.uid.size);
}
}
void循环(){
如果(!mfrc522.PICC_IsNewCardPresent())
返回;
如果(!mfrc522.PICC_ReadCardSerial())
返回;
键盘转储字节数组(mfrc522.uid.uidByte,mfrc522.uid.size);
蓝牙转储字节数组(mfrc522.uid.uidByte,mfrc522.uid.size);
串行转储字节数组(mfrc522.uid.uidByte,mfrc522.uid.size);
Serial.println();
//而(mfrc522.PICC_ReadCardSerial());
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
无效串行转储字节数组(字节*缓冲区,字节缓冲区大小){
for(字节i=0;i 对于(int i=0;i如果我理解正确,您需要发送|0x55 | 0xFF | 0xFF | 0xFF |缓冲区| 0xFF | 0xAA |
,对吗?您可以这样做
// If you may need to change the values use global variables
char firstPart[4] = {0x55, 0xFF, 0xFF, 0xFF};
char lastPart[2] = {0xFF, 0xAA};
void Push_dump_byte_array(byte *buffer, byte bufferSize) {
for(int i = 0; i<4; ++i){
Serial1.print(firstPart[i]);
}
for(byte i = 0; i < bufferSize; i++) {
Serial1.print(buffer[i] < 0x10 ? "0" : "");
Serial1.print(buffer[i], HEX);
}
for(int i = 0; i<2; ++i){
Serial1.print(lastPart[i]);
}
}
//如果需要更改值,请使用全局变量
字符第一部分[4]={0x55,0xFF,0xFF,0xFF};
char lastPart[2]={0xFF,0xAA};
无效推送转储字节数组(字节*缓冲区,字节缓冲区大小){
对于(inti=0;iYes),这正是我想要做的,有趣的是,在安卓设备上,目标软件的效果有点“不好”:我只是使用了类似的东西:Serial1.print(“55FFFFFF”);Push_dump_byte_array(mfrc522.uid.uidByte,mfrc522.uid.size);Serial1.print(“FFAA”),所以我认为对于java应用程序来说,字符串的构造没有区别。现在要做的最后一件事是添加一个函数,监听Serial1,当它通过UART从android设备从java应用程序获得请求的确切数据时:((字节)0xff,(字节)0xca,(字节)0x00,0x00,(字节)0x00 getUID)它从上面已回答的示例中的Void Push_dump_byte_array()发回数据。