Arduino dtg printer code - Arduino - Киберфорум
Sun Mar 31 2024 14:44:38 GMT+0000 (Coordinated Universal Time)
Saved by @fathulla666
#define encoder_a 2 //keep this on and interrupt pin #define encoder_b 3 //keep this on and interrupt pin #define motor_step 9 #define motor_direction 8 #define motor_en 10 // #define senzor_front 6 // sensor depan #define senzor_rear 7 // sensor samping #define load_button 4 #define eject_button 5 volatile long motor_position, encoder; int home_position = 0; int load_position = 0; int pe_load = 0; void setup() { pinMode(encoder_a, INPUT); pinMode(encoder_b, INPUT); // disable pullup as we aren't using an open collector encoder digitalWrite(encoder_a, LOW); digitalWrite(encoder_b, LOW); //set up the various outputs pinMode(motor_step, OUTPUT); pinMode(motor_direction, OUTPUT); pinMode(motor_en, OUTPUT);// digitalWrite(motor_en, HIGH);// // then the senzors inputs pinMode(senzor_front, INPUT_PULLUP); pinMode(senzor_rear, INPUT_PULLUP); pinMode(load_button, INPUT_PULLUP); pinMode(eject_button, INPUT_PULLUP); //-------------------------------------------------- // encoder pin on interrupt 0 (pin 2) attachInterrupt(0, encoderPinChangeA, CHANGE); // encoder pin on interrupt 1 (pin 3) attachInterrupt(1, encoderPinChangeB, CHANGE); encoder = 0; // ------------------------------------------------- } // ------------------------------------------------- void encoderPinChangeA(){ if (digitalRead(encoder_a) == digitalRead(encoder_b)){ encoder--; } else{ encoder++; } } void encoderPinChangeB(){ if (digitalRead(encoder_a) != digitalRead(encoder_b)){ encoder--; } else{ encoder++; } } // ------------------------------------------------- void loop() { // Control platen position of boot up and move to front if (home_position == 0) { digitalWrite(motor_direction, HIGH); TurnStepper(); if (digitalRead(senzor_front) == LOW) { home_position = 1; } } // eject platen if (digitalRead(eject_button) == LOW) { home_position = 0; } // load platen if (digitalRead(load_button) == LOW) { load_position = 1; } if (load_position == 1) { digitalWrite(motor_direction, LOW); TurnStepper(); if (digitalRead(senzor_rear) == LOW) { load_position = 0; pe_load = 1; } } // ------------------------------------------------- if (encoder > 0){ digitalWrite(motor_direction, HIGH); // output direction HIGH digitalWrite(motor_step, HIGH); // output step HIGH digitalWrite(motor_step, LOW); // output step LOW _delay_us(900); // tunggu 200 microsecond motor_position++; // posisi motor bergeser tambah satu point encoder = 0; // reset ke 0 } else if (encoder < 0){ digitalWrite(motor_direction, LOW); // output direction LOW digitalWrite(motor_step, HIGH); // output step HIGH digitalWrite(motor_step, LOW); // output step LOW _delay_us(900); // tunggu 200 microsecond motor_position--; // posisi motor bergeser tambah satu point encoder = 0; // reset ke 0 } // ------------------------------------------------- } void TurnStepper() { digitalWrite(motor_step, HIGH); delayMicroseconds(1000); // speed motor digitalWrite(motor_step, LOW); delayMicroseconds(1000); // speed delay, the lower it is the faster }
Comments