logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] Kod Arduino do sterowania trzema silnikami krokowymi z wykorzystaniem przycisków

Dawdek45 02 Gru 2020 20:02 393 2
REKLAMA
  • #1 19085346
    Dawdek45
    Poziom 2  
    Posty: 3
    Witam
    Od kilku dni próbuje napisać działający kod do arduino sterujący trzema silnikami krokowymi mianowicie dwa z nich mają działać gdy przycisk jest wciśnięty a trzeci po przyciśnięciu przycisku ma obracać się przez sekundę w lewo a potem sekundę w prawo.
    Każdy ma działać niezależnie od innych
    Proszę o pomoc ponieważ próbowałem już wszystkiego i nadal nie do końca działa.

    oto kod na którym skończyłem:

    #define ENT 8

    #define DIRx 2
    #define STPx 5
    #define butX 9

    #define DIRy 3
    #define STPy 6
    #define butY 10

    #define DIRz 4
    #define STPz 7
    #define butZ 11


    int stanSTEP_X = LOW;
    int stanSTEP_Y = LOW;
    int stanSTEP_Z = LOW;
    int stanDir_Z = LOW;
    unsigned long speedx = 10;
    unsigned long speedy = 10;
    unsigned long speedz = 10;
    unsigned long tim1 = 10;
    unsigned long licz = 1;
    unsigned long tims = 1;

    unsigned long zapCzasTim1 = 0;
    unsigned long zapCzasTims = 0;

    unsigned long aktualnyCzas = 0;
    unsigned long zapCzasX = 0;
    unsigned long zapCzasY = 0;
    unsigned long zapCzasZ = 0;

    int one = 1;
    int klik = 0;

    void setup() {
    Serial.begin(9600);
    digitalWrite(13, OUTPUT);
    pinMode(ENT, OUTPUT);

    //Y
    digitalWrite(DIRy, LOW);
    pinMode(DIRy, OUTPUT);
    pinMode(STPy, OUTPUT);
    pinMode(butY, INPUT_PULLUP);

    //X
    digitalWrite(DIRx, LOW);
    pinMode(DIRx, OUTPUT);
    pinMode(STPx, OUTPUT);
    pinMode(butX, INPUT_PULLUP);


    //Z
    digitalWrite(DIRz, LOW);
    pinMode(DIRz, OUTPUT);
    pinMode(STPz, OUTPUT);
    pinMode(butZ, INPUT_PULLUP);


    }

    void loop(){
    aktualnyCzas = millis();

    if (digitalRead(butY) == LOW ^ digitalRead(butX)== LOW ^ digitalRead(butZ)== LOW ^ (klik == 1)){
    digitalWrite (ENT , LOW); }else{ digitalWrite (ENT , HIGH);}



    //button X ---------------------------------------
    if (digitalRead(butX) == LOW) {
    digitalWrite (ENT , LOW);
    speedx = 1;
    digitalWrite(STPx, stanSTEP_X); }

    //button Y ---------------------------------------
    if (digitalRead(butY) == LOW) {
    digitalWrite (ENT , LOW);
    speedy = 1;
    digitalWrite(STPy, stanSTEP_Y); }


    //ify od X Y Z ------------------------------------------
    if (aktualnyCzas - zapCzasX >= speedx) {
    zapCzasX = aktualnyCzas;
    stanSTEP_X = !stanSTEP_X;
    }

    if (aktualnyCzas - zapCzasY >= speedy) {
    zapCzasY = aktualnyCzas;
    stanSTEP_Y = !stanSTEP_Y;
    }

    if (aktualnyCzas - zapCzasZ >= speedz) {
    zapCzasZ = aktualnyCzas;
    stanSTEP_Z = !stanSTEP_Z;
    }

    //silnik Z ---------------------------------------

    if (aktualnyCzas - zapCzasTims >= tims && (licz < 3000000)) {
    zapCzasTims = aktualnyCzas;
    licz --;
    }

    if ((licz == 0)){ one = 1; stanDir_Z = LOW; }
    if ((licz == 1)){ klik = 0;}
    if ((licz == 2 ) && (stanDir_Z == LOW)) { stanDir_Z = HIGH; }


    Serial.print(one);
    Serial.print(klik);
    Serial.print("--");
    Serial.print(licz);
    Serial.println("");

    if (digitalRead(butZ) == LOW && (one == 1)) {
    klik = 1;
    tims = 1000;
    licz = 3;
    one --;
    }
    if (klik == 1){
    digitalWrite (ENT , LOW);
    speedz = 3;
    digitalWrite(STPz, stanSTEP_Z);
    digitalWrite(DIRz, stanDir_Z);
    }
    }
  • REKLAMA
  • Pomocny post
    #2 19085415
    kicajbas
    Poziom 32  
    Posty: 1288
    Pomógł: 216
    Ocena: 144
    Witam
    Zaznaczam że nie programuję ARDUINO, ale chcąc otrzymać pomoc określenie:
    Dawdek45 napisał:
    Proszę o pomoc ponieważ próbowałem już wszystkiego i nadal nie do końca działa.

    nic nikomu nie powie.
    Nawet gdyby to był "czysty" C musiałbym to wszystko popodłączać, zaprogramować i porównać pracę układu do Twojego opisu co chciałeś uzyskać.
    Raz że kody wpisujemy za pomocą okienka "Code" a dwa to opisujemy co chcemy uzyskać a co nam wybuchło i nie działa - może znajdzie się osoba która to wyłapie.

    Pozdr.
  • #3 20608039
    Dawdek45
    Poziom 2  
    Posty: 3
    szybko
REKLAMA