22-03-2020, 14:54
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ść..
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;
}
}