char message [16];
byte rx_byte = 0;
bool rx_bit = 0;
int bit_position = 0;
#include "arduinoFFT.h"
//int on_ric = 0;
int ok = 0;
int inizio = 0;
//int on_ric_ok = 0;
//int on = 0;
int ok_ = 0;
#define SAMPLES 128
#define SAMPLING_FREQUENCY 2000
arduinoFFT FFT = arduinoFFT();
unsigned int sampling_period_us;
unsigned long microseconds;
double vReal[SAMPLES];
double vImag[SAMPLES];
void setup() {
Serial.begin(115200);
sampling_period_us = round(1000000 * (1.0 / SAMPLING_FREQUENCY));
strcpy(message, "");
}
void loop() {
for (int i = 0; i < SAMPLES; i++) {
microseconds = micros();
vReal[i] = analogRead(A1);
vImag[i] = 0;
while (micros() < (microseconds + sampling_period_us)) {};
}
FFT.Windowing(vReal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
FFT.Compute(vReal, vImag, SAMPLES, FFT_FORWARD);
FFT.ComplexToMagnitude(vReal, vImag, SAMPLES);
double peak = FFT.MajorPeak(vReal, SAMPLES, SAMPLING_FREQUENCY);
for (int i = 0; i < SAMPLES / 2; i++) {
//Serial.println(vReal[i], 1);
}
if ((peak > 153.00f) && (peak < 154.00f ))
{
//ok = ok ++;
ok = 1;
ok_ = 1;
// Serial.print("on");
}
if ((ok == 1) && (peak > 204.00f) && (peak < 205.00f ))
{
bool rx_bit = 0;
ok = 2;
ok_ = 1;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
//Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
// Serial.println(message);
Serial.print("0");
}
}
}
if ((ok == 2) && (peak > 223.00f) && (peak < 225.00f ))
{
bool rx_bit = 0;
ok_ = 1;
//rx_bit = 0;
ok = 3;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
// Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
// Serial.println(message);
Serial.print("0");
}
}
}
if ((ok == 3) && (peak > 246.00f) && (peak < 247.00f ))
{
//rx_bit = 0;
bool rx_bit = 0;
ok_ = 1;
ok = 4;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
// Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
// Serial.println(message);
Serial.print("0");
}
}
}
if ((ok == 4) && (peak > 266.00f) && (peak < 267.00f ))
{
// rx_bit = 0;
bool rx_bit = 0;
ok_ = 1;
ok = 4;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
// Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
// Serial.println(message);
Serial.print("0");
}
}
}
if ((ok == 4) && (peak > 284.00f) && (peak < 286.00f ))
{
// rx_bit = 0;
bool rx_bit = 0;
ok_ = 1;
ok = 5;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
// Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
// Serial.println(message);
Serial.print("0");
}
}
}
if ((ok == 5) && (peak > 306.00f) && (peak < 307.00f ))
{
bool rx_bit = 0;
ok_ = 1;
//rx_bit = 0;
ok = 6;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
// Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
// Serial.println(message);
Serial.print("0");
}
}
}
if ((ok == 6) && (peak > 328.00f) && (peak < 329.00f ))
{
// rx_bit = 0;
bool rx_bit = 0;
ok_ = 1;
ok = 7;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
// Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
// Serial.println(message);
Serial.print("0");
}
}
}
if ((ok == 7) && (peak > 346.00f) && (peak < 347.00f ))
{
bool rx_bit = 0;
ok_ = 1;
// rx_bit == 0;
ok = 8;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
// Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
// Serial.println(message);
Serial.print("0");
}
}
}
if ((ok == 8) && (peak > 365.00f) && (peak < 367.00f ))
{
bool rx_bit = 0;
ok_ = 1;
// rx_bit = 0;
ok = 1;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
// Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
// Serial.println(message);
Serial.print("0");
}
}
}
if ((ok_ == 1) && (peak > 409.00f) && (peak < 410.00f ))
{
bool rx_bit = 1;
Serial.println("si");
// rx_bit = 1;
ok_ = 2;
ok = 1;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
// Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
// Serial.println(message);
Serial.print("1");
}
}
}
if ((ok_ == 2) && (peak > 428.00f) && (peak < 429.00f ))
{
bool rx_bit = 1;
// rx_bit = 1;
ok = 1;
ok_ = 3;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
// Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
// Serial.println(message);
Serial.print("1");
}
}
}
if ((ok_ == 3) && (peak > 451.00f) && (peak < 452.00f ))
{
bool rx_bit = 1;
// rx_bit == 1;
ok = 1;
ok_ = 4;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
//Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
// Serial.println(message);
Serial.print("1");
}
}
}
if ((ok_ == 4) && (peak > 470.00f) && (peak < 472.00f ))
{
bool rx_bit = 1;
//rx_bit = 1;
ok = 1;
ok_ = 5;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
//Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
//Serial.println(message);
Serial.print("1");
}
}
}
if ((ok_ == 5) && (peak > 491.00f) && (peak < 492.00f ))
{
bool rx_bit = 1;
//rx_bit = 1;
ok = 1;
ok_ = 6;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
// Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
// Serial.println(message);
Serial.print("1");
}
}
}
if ((ok_ == 6) && (peak > 500.00f) && (peak < 512.00f ))
{
bool rx_bit = 1;
//rx_bit = 1;
ok = 1;
ok_ = 7;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
// Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
// Serial.println(message);
Serial.print("1");
}
}
}
if ((ok_ == 7) && (peak > 532.00f) && (peak < 533.20f ))
{ bool rx_bit = 1;
// rx_bit = 1;
ok = 1;
ok_ = 8;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
//Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
//Serial.println(message);
}
}
}
if ((ok_ == 8) && (peak > 550.00f) && (peak < 551.20f ))
{
bool rx_bit = 1;
//rx_bit = 1;
ok_ = 1;
ok = 1;
if (rx_bit)
{
rx_byte |= (0x08 >> bit_position);
}
bit_position += 1;
if (bit_position == 8) {
strncat(message, &rx_byte, 1);
}
for (int e = 0; e < 8; e += 1) {
if (e < bit_position) {
//Serial.println(rx_byte & (0x80 >> e) ? "1" : "0");
// Serial.println(message);
Serial.print("1");
}
}
}
/* if ((ok > 0) &&(peak > 151.00f) && (peak < 152.00f ))
{
//ok = ok ++;
ok = 0;
Serial.print("off");
}
*/
//Serial.println(peak);
delay(5);
}
ho un problema con il decode, i bit si ricevono, pero mettendo un print di 1 o 0 dentro il ciclo for ho notato che mi stampa il valore 1 volta, poi sdoppiato e poi quadruplicato
come posso fare per avere i bit giusti come gli ricevo e convertirli in lettere in tempo reale?