Мне нужно добавить функциональность к коду, который я уже сделал. мне нужно слушать на 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]);
}
}
Да, это именно то, что я хотел сделать ,, самое смешное в том, что, делая в па бит «не «хороший» способ был таким же для целевого программного обеспечения на устройстве Android: я просто использовал что-то вроде этого: Serial1.print («55FFFFFF»); Push_dump_byte_array (mfrc522.uid.uidByte, mfrc522.uid.size); Serial1 .print («FFAA») ;, Поэтому я думаю, что для этого приложения Java нет никакой разницы между построением строки. –
Теперь нужно добавить функцию, которая прослушивает Serial1, и когда она получает точный данных в качестве запросов от java-приложение от устройства android через UART: ((байт) 0xff, (байт) 0xca, (байт) 0x00, 0x00, (байт) 0x00 getUID) он отправляет данные из Void Push_dump_byte_array() из примера, уже указанного выше. –