// #include <math.h>
// #define PIN 9
// #define PI 3.1415926535897932384626433832795
// void setup() {
// pinMode(PIN, OUTPUT);
// Serial.begin(9600); // Inicia a comunicação serial
// }
// void loop() {
// for (int i = 0; i < 360; i++) {
// float radian = i * PI / 180.0;
// float sineWave = abs(sin(radian)) * 127.5 + 127.5; // Gera o módulo de uma onda senoidal entre 0 e 255
// Serial.println(sineWave); // Imprime o valor flutuante de sineWave
// analogWrite(PIN, (int)sineWave);
// delay(2); // Atraso para a próxima amostra
// }
// }
// #include <math.h>
// // Defina o pino PWM que você usará para gerar a onda
// const int pinPWM = 9;
// // Defina a frequência inicial da onda (em Hz)
// float frequencia = 100.0;
// // Defina a amplitude da onda (0-255 para um pino PWM de 8 bits)
// const int amplitude = 127;
// void setup() {
// // Configura o pino PWM como saída
// pinMode(pinPWM, OUTPUT);
// }
// void loop() {
// // Calcula o período da onda a partir da frequência
// float periodo = 1.0 / frequencia;
// // Gera a onda senoidal e envia para o pino PWM
// for (float angulo = 0; angulo < 2 * M_PI; angulo += 0.01) {
// // Calcula o valor da onda senoidal
// float valor = amplitude * (sin(angulo) + 1);
// // Envie o valor para o pino PWM
// Serial.println(valor);
// analogWrite(pinPWM, valor);
// // Aguarda pelo tempo de um ciclo completo da onda
// delayMicroseconds(periodo * 1000000);
// }
// }
// int F = 2;//hz //frequency of the signal
// int Fs = 500;//hz //sampling frequency
// int n = 500;//samples //number of samples
// float t;//sec //Time instance
// int sampling_interval;
// byte samples[500]; // to store the samples
// void setup() {
// Serial.begin(9600);
// // pinMode(10, OUTPUT);
// for (int n = 0; n < 500; n++)
// {
// t = (float) n / Fs; //creating time isntance to find the 500 samples
// samples[n] = (byte) (127.0 * sin(2 * 3.14 * t) + 127.0 ); //calculating the sin value at each time instance
// }
// sampling_interval = 1000000 / (F * n);
// Serial.println(sampling_interval);
// //sampling interval Ts = 1/frequency x number of sample (Ts = 1/Fn or Ts = T/n)x1000000 to convert it in µS
// delay(3000);
// for (int j = 0; j < 500; j++){
// Serial.println(samples[j]);
// }
// delay(3000);
// }
// void loop() {
// for (int j = 0; j < 500; j++) {
// // analogWrite(10, samples[j]);
// Serial.println(samples[j]);
// delayMicroseconds(sampling_interval); //time interval
// }
// }
int F = 20; //frequency of the signal
int Fs = 10000; //sampling frequency
int n = 1500; //number of samples
float t; //Time instance
int sampling_interval;
byte samples[1500]; // to store the samples
void setup() {
Serial.begin(9600);
pinMode(10, OUTPUT);
for (int n = 0; n < 1500; n++)
{
t = (float) n / Fs; //creating time instance to find the 1500 samples
samples[n] = (byte) (127.0 * sin(2 * 3.14 * t) + 127.0 ); //calculating the sin value at each time instance
}
sampling_interval = 1000000 / (F * n);
//sampling interval Ts = 1/frequency x number of sample (Ts = 1/Fn or Ts = T/n)x1000000 to convert it in µS
}
void loop() {
for (int j = 0; j < 1500; j++) {
analogWrite(10, samples[j]);
Serial.println(samples[j]);
delayMicroseconds(sampling_interval); //time interval
}
}