/*
Buffer
Esse código, não armazena mais valores após o estouro do buffer
Autor: Fabrício Ribeiro
Data: 27/04/2025
Status: ok
*/
#define BUFFER_SIZE 100
uint8_t BUFFER[BUFFER_SIZE];
uint8_t BUFFER_POINT;
struct data{
uint8_t num1;
uint8_t num2;
uint8_t num3;
};
//Struct de 1 byte
struct Header{
byte H0:3; //3bits LSB
byte H3:1; //1bit
byte H4:1;
byte H5:1;
byte H6:1;
byte H7:1; //MSB
};
//Configurações
void setup(){
Serial.begin(115200);
//Enviando uma string para o buffer
clear_buffer();
char json[] = "{\"Temperatura\":\"20\",\"Pressao\":\"12\",\"Humidade\":\"90\"}";
put_buffer(json, sizeof(json)-1);
show_buffer();
//Enviando uma struct para o buffer
//clear_buffer();
data my_data;
my_data.num1 = 0x64; //Decimal
my_data.num2 = 0x65; //Decimal
my_data.num3 = 0x66; //Decimal
//Cria um array com o mesmo tamanho da struct
uint8_t array[sizeof(my_data)];
//Copia os dados da struct para o array
memcpy(&array, &my_data, sizeof(my_data));
put_buffer(array, sizeof(array));
show_buffer();
//Enviando um byte para o buffer
uint8_t dado=0x73;
uint8_t array1[sizeof(dado)];
memcpy(&array1, &dado, sizeof(dado));
put_buffer(array1, sizeof(array1));
show_buffer();
//Enviando 1 Byte configurado por bits
Header header;
header.H0 = 5;
//Cria um array com o mesmo tamanho da struct
uint8_t array2[sizeof(header)];
//Copia os dados da struct para o array
memcpy(&array2, &header, sizeof(header));
put_buffer(array2, sizeof(array2));
show_buffer();
}
//Loop principal
void loop(){
}
//Limpa o buffer
void clear_buffer(void){
BUFFER_POINT = 0;
for(byte i = 0; i < BUFFER_SIZE; i++){
BUFFER[i] = 0;
}
}
//Guarda valores no buffer
void put_buffer(uint8_t vetor[], uint16_t n){
if(BUFFER_POINT < BUFFER_SIZE){
for(byte i = 0; i < n; i++){
BUFFER[BUFFER_POINT] = vetor[i];
BUFFER_POINT++;
if(BUFFER_POINT == BUFFER_SIZE){
break;
}
}
}
}
//Mostra em hexadecimal os valores armazenados no buffer
void show_buffer(void){
for(byte i = 0; i < BUFFER_POINT; i++){
//Serial.print("0x");
Serial.print(BUFFER[i] < 16 ? "0" : "");
Serial.print(BUFFER[i], HEX);
Serial.print(" ");
}
Serial.println("");
}