Generador de funciones con arduino leonardo y android

Hola a todos amigos:

He empezado a realizar un proyecto en la universidad, que consiste en mostrar la forma de onda de un generador de funciones en una aplicación android (que he creado en app-inventor) por bluetooth con un arduino leonardo.

El código es muy sencillo, solo consiste en leer el puerto analógico A0 y enviarlo por bluetooth a mi celular.

El problema es que una vez conectado el generador de funciones (entre A0 y GND) al arduino y mandar la señal a mi celular (graficando una señal sinusidal de aproximadamente 0 y 5 volts), grafica en un principio, pero al variar la frecuencia no hace nada, incluso para algunas frecuencias realiza una especie de modulación.

Por favor amigos, necesito ayuda urgente. Se los agradecería bastante.
Saludos comunidad.

Y no se te ocurrió pensar que estas pasando por un cuello de botella debido a que alcanzaste con detrminada frecuencia lo máximo que puedes ver desde el Arduino sampleando, mas el envio de datos por BT a la aplicación en el Celular?

Soluciones: crea un buffer de datos, enviar una ráfaga de bytes 64 o 256 y preséntalos y en todo caso repítelos para dar tiempo a una segundo envio que refrezque lo anterior.

Si estas usando analogRead(A0) eso es muy lento y tendrás que ver como poner el AD en modo free wheeling o sea que se ponga a muestrear sin parar, y cada dato leido lo guardas en un buffer circular.

Te doy pautas para que las vayas desarrollando.

Buscando información en la red y encontré información sobre el buffer:

Adjunte el pin analógico A0 para poder leerlo, pero creo que aun tengo mis dudas

#include <CircularBuffer.h>

CircularBuffer<int, 400> buffer;

unsigned long time = 0;

#define SAMPLE_PIN A0

void setup() {
Serial.begin(9600);
pinMode(SAMPLE_PIN, INPUT);
time = millis();
}

void loop() {

int reading = analogRead(A0);
buffer.push(reading);

if (millis() - time >= 500) {
time = millis();
float avg = 0.0;
// the following ensures using the right type for the index variable
using index_t = decltype(buffer)::index_t;
for (index_t i = 0; i < buffer.size(); i++) {
avg += buffer[i] / buffer.size();
}

Serial.println(avg);
}
}

me equivoco en algún paso?