//Лабораторна робота 3
//Аналогове виведення сигналів
//Варіант 7
#define LEDPin 13 //Пін з світлодіодом
#define PotentiometerPin A0 //Пін потенціометра
float A = 1.5;
float Tc = 0.5;
float tp = 1.0;
volatile float SiglalDAC; //Змінна для сигналу виводу
uint32_t tmr = 0; //таймер для затримки виводу і розрахунку сигналу
int PotentiometrSignal = 0; //поточне значення потенціометра
void setup() {
Serial.begin(9600);
//Ініціалізуємо входи і виходи
pinMode(LEDPin, OUTPUT);
pinMode(PotentiometerPin, INPUT);
}
void loop() {
if (millis() - tmr >= 1000) { //Затримка виводу на світлодіод
tmr = millis();
PotentiometrSignal = analogRead(PotentiometerPin);
analogWrite(LEDPin, map(PotentiometrSignal, 0, 1023, 0, 255));
}
SiglalDAC = GetDACSignal((float)(millis() - tmr)/1000); //Розрахунок сигналу
Serial.println(SiglalDAC);
}
float GetDACSignal(float t){ //Функція для розрахунку сигналу
if(t >= 0 && t <= (Tc /3)){
return ((3*A)/Tc)*t; //Вот это явно правильная формула, а в задании опечатка
}
if(t > (Tc /3) && t <= 2*(Tc /3)){
return A;
}
if(t > 2*(Tc /3) && t <= Tc){
return 3*A*(1-(t/Tc));
}
return 0;
}