2016-01-27 4 views
0

Мне нужно добавить функциональность к коду, который я уже сделал. мне нужно слушать на Serial1 (аппаратный порт Arduino Leonardo с интерфейсом с поддержкой BLUETOOTH подключили), и когда придет строку подобное от внешнего устройства андроид работает прийти приложение, которое нужно UID:Как добавить постоянные конкретные байты в процедуру, которая читает из буфера на arduino

(byte) 0xff, (byte) 0xca, (byte) 0x00, 0x00, (byte) 0x00 
getUID 

I нужно, чтобы сделать эту последнюю процедуру в коде ниже, чтобы отправить конкретные данные:

Построение этой процедуры должны дать мне возможность отправить в одну строку:

  • Первая часть: 4 байта и первый байт из этих 4 байтов должен быть «0x55», а следующие 3 байта могут быть равны 0xFF,
  • Вторая часть: будут данные из буфера, которые будут содержать 4 или 7 байтов серийного номера.
  • Третья часть: 2 байта, где сначала общий 0xff, а второй - 0xAA.

Так кадр посылается в ответ на этот вопрос должен выглядеть следующим образом:

| 0x55 | 0xFF | 0xFF | 0xFF | BUFFER | 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]); 
    } 
} 

ответ

0

Если я вас правильно понял, что вам нужно отправить |0x55|0xFF|0xFF|0xFF|BUFFER|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]); 
    } 
} 

Я просто установил код, для (байт, а для (INT

+0

Да, это именно то, что я хотел сделать ,, самое смешное в том, что, делая в па бит «не «хороший» способ был таким же для целевого программного обеспечения на устройстве Android: я просто использовал что-то вроде этого: Serial1.print («55FFFFFF»); Push_dump_byte_array (mfrc522.uid.uidByte, mfrc522.uid.size); Serial1 .print («FFAA») ;, Поэтому я думаю, что для этого приложения Java нет никакой разницы между построением строки. –

+0

Теперь нужно добавить функцию, которая прослушивает Serial1, и когда она получает точный данных в качестве запросов от java-приложение от устройства android через UART: ((байт) 0xff, (байт) 0xca, (байт) 0x00, 0x00, (байт) 0x00 getUID) он отправляет данные из Void Push_dump_byte_array() из примера, уже указанного выше. –