#include <TimerOne.h>
#include <Wire.h>
/*
Generador de Onda Cuadrada Simple
Ejemplo:
Cuando t=1000 ms la frecuencia es de: 1000Hz.
Cuando K=512 el Duty Cycle es de: 50%
K puede ser desde 0 hasta 1023
*/
unsigned long f , t=1000 , k=512;
byte k1;
void setup()
{
Serial.begin(115200);
// Arduino UNO solo pines 9 y 10 pueden utulizarse
pinMode(10, OUTPUT);
}
void loop()
{
/*
Timer1.initialize(microseconds);
Comiensa a usar el temporizador. Esta función debe llamarse primero.
"microsegundos" es el período de tiempo que tarda el temporizador.
*/
Timer1.initialize(t);
/*
Timer1.pwm(pin, duty);
Configure uno de los pines PWM del temporizador.
El valor de "duty" va de 0 a 1023, donde 0 hace que el pin esté siempre
en BAJO y 1023 hace que el pin esté siempre en ALTO.
*/
Timer1.pwm(10, k);
f=1000000/t; // calculamos la frecuencia
k1=k*100/1024; // calculamos % el Duty Cicle
// Mostramos la informacion en el Monitor Serie
/*
Serial.print("Frecuencia:");
Serial.println(f);
Serial.print("Duty-Cycle:");
Serial.println(k1);
*/
noInterrupts();
Serial.println(myDigitalRead(10));
interrupts();
delay(100);
}
int myDigitalRead(uint8_t pin)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
if (port == NOT_A_PIN) return LOW;
if (*portInputRegister(port) & bit) return HIGH;
return LOW;
}