• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
prosty program ale gdzies jest blad.
#1
Wink 
witam, panowie prosty program z silnicxzkiem krokowym typowym arduino 28byj ,,dodam ze hobbistycznie się ucze arduino,,w ramach wolnej chwili. 
program ma dzialac tak ze jeśli wcisne przycisk silnik ma się obracać do czasu az ten przycisk zostanie zwolniony, a kolejna czesc programu ma odliczas czas ,,millis,, i po np. tu 5 sekundach ma obrucis cie o zadana liczbe krokow,, tutaj o 340.. ale cos niedziala w tej drugiej części ,,możecie zerknąć i poprawke wnieść..


Cytat:#define STEPPER_PIN_1 9
#define STEPPER_PIN_2 10
#define STEPPER_PIN_3 11
#define STEPPER_PIN_4 12
int step_number = 0;
const int  przycisk = 13 ;
unsigned long  poczatekCzasu = 0 ;
unsigned long  czas = 0 ;
void setup() {
  pinMode(STEPPER_PIN_1, OUTPUT);
  pinMode(STEPPER_PIN_2, OUTPUT);
  pinMode(STEPPER_PIN_3, OUTPUT);
  pinMode(STEPPER_PIN_4, OUTPUT);
  pinMode (przycisk, INPUT);
  
}

void loop() {
  if (digitalRead (przycisk) == HIGH)
  {
    OneStep(false);
    delay(2);
  }
  else{
    czas = millis ();
    (czas - poczatekCzasu >5000 ) ;
    for (int i=0 ; i <341 ; i++)
      OneStep (false);
    delay(2);
    poczatekCzasu = czas  ;
  }

}


void OneStep(bool dir){
  if(dir){
    switch(step_number){
    case 0:
      digitalWrite(STEPPER_PIN_1, HIGH);
      digitalWrite(STEPPER_PIN_2, LOW);
      digitalWrite(STEPPER_PIN_3, LOW);
      digitalWrite(STEPPER_PIN_4, LOW);
      break;
    case 1:
      digitalWrite(STEPPER_PIN_1, LOW);
      digitalWrite(STEPPER_PIN_2, HIGH);
      digitalWrite(STEPPER_PIN_3, LOW);
      digitalWrite(STEPPER_PIN_4, LOW);
      break;
    case 2:
      digitalWrite(STEPPER_PIN_1, LOW);
      digitalWrite(STEPPER_PIN_2, LOW);
      digitalWrite(STEPPER_PIN_3, HIGH);
      digitalWrite(STEPPER_PIN_4, LOW);
      break;
    case 3:
      digitalWrite(STEPPER_PIN_1, LOW);
      digitalWrite(STEPPER_PIN_2, LOW);
      digitalWrite(STEPPER_PIN_3, LOW);
      digitalWrite(STEPPER_PIN_4, HIGH);
      break;
    } 
  }
  else{
    switch(step_number){
    case 0:
      digitalWrite(STEPPER_PIN_1, LOW);
      digitalWrite(STEPPER_PIN_2, LOW);
      digitalWrite(STEPPER_PIN_3, LOW);
      digitalWrite(STEPPER_PIN_4, HIGH);
      break;
    case 1:
      digitalWrite(STEPPER_PIN_1, LOW);
      digitalWrite(STEPPER_PIN_2, LOW);
      digitalWrite(STEPPER_PIN_3, HIGH);
      digitalWrite(STEPPER_PIN_4, LOW);
      break;
    case 2:
      digitalWrite(STEPPER_PIN_1, LOW);
      digitalWrite(STEPPER_PIN_2, HIGH);
      digitalWrite(STEPPER_PIN_3, LOW);
      digitalWrite(STEPPER_PIN_4, LOW);
      break;
    case 3:
      digitalWrite(STEPPER_PIN_1, HIGH);
      digitalWrite(STEPPER_PIN_2, LOW);
      digitalWrite(STEPPER_PIN_3, LOW);
      digitalWrite(STEPPER_PIN_4, LOW);


    } 
  }
  step_number++;
  if(step_number > 3){
    step_number = 0;
  }
}
 
Odpowiedź
#2
Hm pewnie brakuje nawiasów klamrowych { } w loop w sekcji po else.
 
Odpowiedź
#3
(22-03-2020, 20:03)Agregacik napisał(a): Hm pewnie brakuje nawiasów klamrowych  {  }  w loop w sekcji po else.
hej dzięki za reakcje ale nawiasy sa tam 2 chyba ze mówisz o dodatkowych ??
 
Odpowiedź
#4
Tak mówię o dodatkowych. Zapewne powinno być tam jeszcze if przed nawiasami okrągłymi i potem nawias { otwierający ciało funkcji i nawias } zamykający ciało funkcji. W pętli for też powinny być dwa nawiasy taki { i taki }.
Tu do poczytania o sterowaniu kodem https://plociennik.info/index.php/sterow...aniem-kodu
 
Odpowiedź
#5
Kod:
else{
    czas = millis ();
    (czas - poczatekCzasu >5000 ) ;

A to co to?
 
Odpowiedź
#6
Właśnie o to mi się rozchodziło. Pewnie if brakuje i jeszcze czegoś. No ale niech sam do tego dojdzie to bardziej zapisze się w pamięci.
 
Odpowiedź
#7
wlasnie nad tym pracuje.. dzięki za pomoc wiem gdzie szukac :]
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości