Új hozzászólás Aktív témák

  • Imy

    veterán

    Olyan problémám lenne, hogy egy nyomógombbal akarom elindítani, majd esetleg egy hosszú nyomással leállítani a motort, ami a következő program szerint fut:

    /*
    */

    #include <Stepper.h>
    #define STEPS 100
    #define IN1 8
    #define IN2 9
    #define IN3 10
    #define IN4 11

    Stepper small_stepper(STEPS, 8, 10, 9, 11);

    int Steps2Take = 0;
    long temps = 0;
    int Compteur;
    int Rotate_n_temp;
    int Rotate_n;
    int PSW = 5;
    int PSW_S = 0;

    void setup()
    {
    pinMode(13, OUTPUT);
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);

    pinMode(PSW, INPUT); // Push Switch
    }

    void loop()
    {

    if (digitalRead(PSW) == HIGH)
    {

    Push_b_on:

    Rotate_n=2;
    Rotate_n_temp = Rotate_n-1;
    digitalWrite(13, HIGH);
    delay(100);
    small_stepper.setSpeed(300);

    if (Compteur<=Rotate_n_temp){

    Steps2Take = -4096;
    temps = millis();
    small_stepper.step(Steps2Take);
    temps = millis()- temps ;
    digitalWrite(IN1, LOW);
    delay(2);
    digitalWrite(IN2, LOW);
    delay(2);
    digitalWrite(IN3, LOW);
    delay(2);
    digitalWrite(IN4, LOW);
    delay(2);
    delay(2000); //pause

    Steps2Take = 4096;
    temps = millis();
    small_stepper.step(Steps2Take);
    temps = millis()- temps ;
    Serial.println(temps);
    digitalWrite(IN1, LOW);
    delay(2);
    digitalWrite(IN2, LOW);
    delay(2);
    digitalWrite(IN3, LOW);
    delay(2);
    digitalWrite(IN4, LOW);
    delay(2);

    delay(2000); //pause

    // Glignotement de la LED
    digitalWrite(13, LOW);
    delay(100);
    digitalWrite(13, HIGH);
    delay(100);
    Compteur++; //Ajoute 1 au Compteur
    }
    else{
    digitalWrite(IN1, LOW);
    delay(2);
    digitalWrite(IN2, LOW);
    delay(2);
    digitalWrite(IN3, LOW);
    delay(2);
    digitalWrite(IN4, LOW);
    delay(2);

    Compteur=0;
    goto Push_b_on;
    }
    }

    else
    {
    digitalWrite(13, HIGH);
    delay(50);
    digitalWrite(13, LOW);
    delay(100);
    digitalWrite(13, HIGH);
    delay(50);
    digitalWrite(13, LOW);
    delay(100);
    }
    }

    Mivel soros futású a program, így a goto paranccsal nem ugrik vissza az elejére, azaz ha akkor nincs benyomva a gomb, akkor nem megy a motor.

    Hogyan lehetne megoldani, hogy a gomb egyszeri rövid nyomására elinduljon, és addig ne álljon le, amíg a gombot nem nyomom hosszan? (Leállítás kb 2sec nyomásra)

Új hozzászólás Aktív témák