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);
}
}
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);
}
}