1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
| void ActionMoteur(int sens) {
if (sens == 0) //Stop
{
digitalWrite(pinFermetureVanne, LOW);
digitalWrite(pinOuvertureVanne, LOW);
}
else if (sens < 0) //Fermeture
{
digitalWrite(pinFermetureVanne, HIGH);
digitalWrite(pinOuvertureVanne, LOW);
}
else if (sens > 0) //Ouverture
{
digitalWrite(pinFermetureVanne, LOW);
digitalWrite(pinOuvertureVanne, HIGH);
}
}
void Asservissement() {
int erreur = consigne - detectionA;
consigne = consigne - detectionA;
if (erreur > 0)
{
ActionMoteur(sensMoteur);
}
else {
ActionMoteur(0);
}
detectionA = 0;
detectionB = 0;
}
void encodeurA() {
if (millis() - previousdetectionA >intervalledetection)
{
previousdetectionA = millis();
detectionA++;
if (sensMoteur > 0)
{
positionVanne++;
}
else if (sensMoteur < 0)
{
positionVanne--;
}
}
//return true;
}
void encodeurB() {
if (millis() - previousdetectionB > intervalledetection)
{
previousdetectionB = millis();
detectionB++;
}
}
// the setup function runs once when you press reset or power the board
void setup() {
//Heltec.begin(true /*DisplayEnable Enable*/, true /*Heltec.LoRa Disable*/, true /*Serial Enable*/, BAND);
//Wire.begin(SDA_OLED, SCL_OLED);
//Heltec.display->clear();
//Moteur
pinMode(pinOuvertureVanne, OUTPUT);
pinMode(pinFermetureVanne, OUTPUT);
//Fin de course
pinMode(pinVanneFerme, INPUT);
pinMode(pinVanneOuverte, INPUT);
//roue encodeuse
pinMode(pinEncodeurA, INPUT);
attachInterrupt(pinEncodeurA, encodeurA, RISING); //RISING FALLING CHANGE
#ifdef pinEncodeurB
Serial.println("Config encodeurB");
pinMode(pinEncodeurB, INPUT);
attachInterrupt(pinEncodeurB, encodeurB, RISING);
#endif // pinEncodeurB
detectionA = 0;
detectionB = 0;
}
void loop() {
endstopClosed = digitalRead(pinVanneFerme);
endstopOpen = digitalRead(pinVanneOuverte);
if (Serial.available()) {
//Serial.println(Serial.readString());
sensMoteur = 1;
consigne = 0;
while (Serial.available())
{
byte_read = Serial.read();
if (byte_read == 45)
{
sensMoteur = -1;
}
if (is_a_number(byte_read))
{
consigne = ascii2int(consigne, byte_read);
}
}
Asservissement();
} |
Partager