Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何将特定于常量的字节添加到从arduino上的缓冲区读取的例程中_Arrays_String_Arduino_Communication_Uart - Fatal编程技术网

Arrays 如何将特定于常量的字节添加到从arduino上的缓冲区读取的例程中

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”

我需要在我已经完成的代码中添加一个功能。 我需要收听Serial1(arduino leonardo的硬件端口,蓝牙接口已连接),当运行come应用程序的外部android设备出现类似字符串时,需要UID:

(byte) 0xff, (byte) 0xca, (byte) 0x00, 0x00, (byte) 0x00 
getUID
我需要执行下面代码中的最后一个例程来发送特定数据:

此例程的构造必须使我能够作为一个字符串发送:

  • 第一部分:4个字节,这4个字节的第一个字节必须是“0x55”,接下来的3个字节可能只是0xFF
  • 第二部分:缓冲区中的数据将包含4或7字节的序列号
  • 第三部分:2个字节,其中第一个字节为通用0xff,第二个字节必须为0xAA
因此,为回答问题而发送的帧应如下所示:

| 0x55 | 0xFF | 0xFF | 0xFF |缓冲区| 0xFF | 0xAA |

有人能告诉我如何在下面的草图中实现该功能吗?我刚刚开始我的C/C++世界之旅,我有点沮丧

 #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()发回数据。