// Define DAC pins
#define Stensao 25
#define Scorrente 26
#define potenciometro 4
#define frequencia 60.0
unsigned long timestamp_acionamento_start = 0;
unsigned long timestamp_acionamento_delta = 0;
unsigned long periodo = 1000000/frequencia;
unsigned long TEMPO_DEBOUNCE = 5; //ms
/* Função ISR (chamada quando há geração da interrupção) */
void IRAM_ATTR funcao_ISR_Tensao()
{
//if ( (micros() - timestamp_ultimo_acionamento) >= TEMPO_DEBOUNCE ) {
timestamp_acionamento_start = micros();
//Serial.println(timestamp_acionamento_start);
//}
//timestamp_ultimo_acionamento = millis();
}
void IRAM_ATTR funcao_ISR_Corrente()
{
//if ( (micros() - timestamp_ultimo_acionamento) >= TEMPO_DEBOUNCE ) {
timestamp_acionamento_delta = micros() - timestamp_acionamento_start;
//Serial.print(timestamp_acionamento_start);
//Serial.print(" / ");
//Serial.print(micros());
//Serial.print(" / ");
Serial.print(180/(timestamp_acionamento_delta/periodo));
Serial.println(" [us]");
//}
//timestamp_ultimo_acionamento = micros();
}
int potenciometroValue;
int tensao,corrente, phi;
void setup() {
Serial.begin(115200);
pinMode(Stensao, OUTPUT);
pinMode(Scorrente, OUTPUT);
// Configura o GPIO do botão como entrada
// configura interrupção externa no modo RISING para ele.
attachInterrupt( Scorrente, funcao_ISR_Corrente, RISING);
attachInterrupt( Stensao, funcao_ISR_Tensao, RISING);
}
void loop() {
potenciometroValue = analogRead( potenciometro );
//Serial.print("Valor: ");
//Serial.println(potenciometroValue);
//phi = int(potenciometroValue*180/(4095));
//Serial.println(phi);
// Calcula o seno e escreve em DAC_CH1
phi = 30;
for (int deg = 0; deg < 360; deg ++) {
tensao = int( 128 + 127 * sin( deg * PI / 180 ) );
corrente = int(128 + 127 * sin( (deg - phi) * PI / 180 ));
if (( tensao < 128)&&( corrente < 128)) {
digitalWrite(Stensao, LOW);
digitalWrite(Scorrente, LOW);
}else if ( ( tensao < 128)&& ( corrente >= 128) ){
digitalWrite(Stensao, LOW);
digitalWrite(Scorrente, HIGH);
}else if ( ( tensao >= 128)&& ( corrente < 128) ){
digitalWrite(Stensao, HIGH);
digitalWrite(Scorrente, LOW);
}else{
digitalWrite(Stensao, HIGH);
digitalWrite(Scorrente, HIGH);
}
delayMicroseconds(int(1000000/(360*frequencia)));
}
}