Aide sur mon projet

Bonjour à tous, j'espère que vous allez bien. J'aurai besoin d'aide pour mon projet, je dois gérer l'angle de l'aiguille d'une horloge en utilisant Arduino mais je ne sais pas comment faire. Je vous transmets le code en pièce jointe de ce message. Merci beaucoup pour votre aide.
String mySt = "";
char myChar;
boolean stringComplete = false;
boolean motor_start = false;
const byte pin_a = 2;
const byte pin_b = 3;
const byte pin_bwd = 8;
const byte pin_fwd = 9;
const byte pin_pwm = 11;
const byte sensor_IR = 4;
double pv_speed = 0;
double e_speed = 0;
double e_speed_pre = 0;
double e_speed_sum = 0;
unsigned int pwm_pulse = 0;
long int RPM = 0;
volatile long tempo, contador = 0;
int timer1_counter;
int flag_IR = 0;
int encoder = 0;
int m_direction = 0;
// set values [Ziegler–Nichols method]
double set_speed = 30;
double kp = 3;
double ki = 0;
double kd = 0;
void setup() {
Serial.begin(9600);
pinMode(pin_a, INPUT_PULLUP);
//pinMode(pin_b, INPUT_PULLUP);
pinMode(sensor_IR, INPUT);
pinMode(pin_fwd, OUTPUT);
pinMode(pin_bwd, OUTPUT);
pinMode(pin_pwm, OUTPUT);
attachInterrupt(digitalPinToInterrupt(pin_a), detect_encoder, RISING);
while (!Serial) {
;
}
analogWrite(pin_pwm, 0);
digitalWrite(pin_fwd, 0);
digitalWrite(pin_bwd, 0);
}
void loop() {
if (stringComplete) {
mySt = "";
stringComplete = false;
}
if (mySt == "i") {
digitalWrite(pin_fwd, 1);
digitalWrite(pin_bwd, 0);
motor_start = true;
}
if (mySt == "p") {
digitalWrite(pin_fwd, 0);
digitalWrite(pin_bwd, 0);
motor_start = false;
RPM = 0;
contador = 0;
e_speed = 0;
e_speed_pre = 0;
e_speed_sum = 0;
pwm_pulse = 0;
}
if (motor_start) {
controlador_PID();
}
mySt = "";
delay(500);
}
void detect_encoder() {
if (digitalRead(pin_a) == HIGH) {
contador++;
}
}
void controlador_PID() {
detachInterrupt(digitalPinToInterrupt(detect_encoder));
if (motor_start) {
RPM = contador * 0.058;
pv_speed = RPM;
RPM = 0;
contador = 0;
if (Serial.available() <= 0) {
Serial.println(pv_speed);
}
e_speed = set_speed - pv_speed;
//Serial.println(e_speed);
double P = e_speed * kp;
double I = e_speed_sum * ki;
double D = (e_speed - e_speed_pre) * kd;
//Serial.println("P: " + String(P) + " I: " + String(I) + " D: " + String(D));
pwm_pulse = P + I + D;
e_speed_pre = e_speed;
e_speed_sum += e_speed;
if (pwm_pulse >= 0 && pwm_pulse <= 255) {
analogWrite(pin_pwm, pwm_pulse);
//Serial.println(pwm_pulse);
}
attachInterrupt(digitalPinToInterrupt(sensor_IR), detect_encoder, RISING);
}
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
if (inChar != '\n') {
mySt += inChar;
}
if (inChar == '\n') {
stringComplete = true;
}
}
}

Post mis dans la mauvaise section, on parle anglais dans les forums généraux, je viens de déplacer le post dans la section francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone".

Bonjour et bienvenue.
Quelques soucis de présentation :

Le titre doit être représentatif du sujet du message.
Code non indenté. "Control T à faire dans l'IDE avant copie.
Code non entre balise code : image

Conséquence : code difficilement lisible, donc peu d'aide à espérer.

Tu peux éditer ton premier message
Pour le titre en cliquant sur l'icône "crayon" à gauche du titre
Pour le contenu du message, en cliquant sur l'icône "crayon" qui se trouve en dessous du message.
Inutile de créé un autre message.

Lire :