Olá, estou há alguns dias estudando o funcionamento do Arduino Uno e, para questão de estudo, gostaria de ajuda em um sketch para geração de pulsos quadrados PWM, que sejam lidos pelo terminal para que eu possa gerar gráficos de Tensão X Tempo. Este gerado pelas ondas quadradas como mostram os exemplo de inúmeros livros. No entanto, esses programas são criados para serem lidos com ajudo de um osciloscópio. Eu, no caso, gostaria de gerar dados no terminal, salvá-los em .txt e gerar esses gráficos em Origin ou Excel.
Para critério de estudo, estou jogando o valor de 255 (5V) no pino ~6 e lendo o valor da tensão no pino A0, transformando o valor digital em analógico por meio de um fio de cobre ligando os dois pinos.
Com um pouco de pesquisa em sites e em livros, acabei tendo algumas ideias para gerar um sketch simples, onde posso mudar os valores dos ciclos, entre 25%, 50% e 75%, para que eu possa vizualizá-los na forma de gráficos, pegando os valores de tempo e tensão pelo serial do Arduino.
Para isso, criei a varável micro, onde defino o valor do ciclo de pulso em 5V e o restante em 0V. Nesse exemplo, quero gerar um pulso com 10% em 5V e 90% em 0V:
int analogPin = A0; //pino analogico
int pwmPin = 6; //pino PWM
int micro = 100; // 100 ~ 10% DutyCycle
void setup()
{
pinMode(pwmPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int mili = millis();
int dutyCycle = 255; // 5V
analogWrite(pwmPin, dutyCycle);
int rawReading = analogRead(analogPin);
float volts = rawReading / 204.6; // transformando o valor para 5V
Serial.print(mili); // pegando o valor do tempo
Serial.print(" ");
Serial.println(volts); // pegando o valor da tensao
delayMicroseconds(micro); // valor do ciclo em 5V
mili = millis();
dutyCycle = 0;
analogWrite(pwmPin, dutyCycle);
rawReading = analogRead(analogPin);
volts = rawReading / 204.6;
Serial.print(mili);
Serial.print(" ");
Serial.println(volts);
delayMicroseconds(1000-micro); // valor do ciclo em 0V
}
Problemas: a função millis(), não me traz valores exatos de tempo (para o gráfico Tensão x Tempo) e, mesmo que eu mude os valores da varável micro, parece que os gráficos ficam todos iguais. Gostaria de enxergar o valor do ciclo (10%, 25%, 50%...) mudando conforme eu mude os valores de micro. Como nunca mexi com a função millis(), posso estar fazendo algo bem errado...
Alguém tem alguma sugestão?
Obrigado!