uint16_t LUTtriac[101];
void setup() {
Serial.begin(115200);
Serial.printf("%.20f\n",M_PI);
#define GRIDFREQUENCE 50 // 50Hz
const double dureeDemiCycle = 1000000.0 / GRIDFREQUENCE / 2;
Serial.println("const uint16_t LUTtriac[101] = {10000,");
for (int i = 1; i < 101; i++) {
double cibleP = (double)i / 100.0; // Puissance voulue de 0.0 à 1.0
double alpha = M_PI / 2.0; // Point de départ (milieu)
double pas = alpha / 2.0;
// Recherche par dichotomie pour trouver l'angle alpha correspondant à la puissance
for (int j = 0; j < 17; j++) { // plus de variation au dela de 17 approximations
double pActuelle = (1.0 / M_PI) * (M_PI - alpha + (sin(2.0 * alpha) / 2.0));
if (pActuelle < cibleP) alpha -= pas; else alpha += pas;
pas /= 2.0; // affine
}
// Conversion de l'angle (0 à PI) en temps (0 à 10000 µs)
LUTtriac[i] = (uint16_t)((alpha / M_PI) * dureeDemiCycle);
// Affichage formaté
Serial.printf("%4d",LUTtriac[i]);
if (i < 100) Serial.print(", ");
if (i % 20 == 0 && i != 0) Serial.println();
}
Serial.println("};");
}
void loop() {}