Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Versão StepMotor
- #include <AccelStepper.h>
- //#define releK1 2 // Port para o rele K1 (CW)
- //#define releK2 3 // Port para o rele K2 (CCW)
- #define motorStep 2 // Port para o rele K1 (CW)
- #define motorDir 3 // Port para o rele K2 (CCW)
- #define pinEnable 9
- // Criação do instante do motor
- AccelStepper motor(AccelStepper::DRIVER, motorStep, motorDir);
- #define bot1 4 // Port para o botao b1 liga ou desliga
- #define bot2 5 // Port para o botao b2 temporario para o rele K1 (CW)
- #define bot3 6 // Port para o botao b2 temporario para o rele K1 (CW)
- #define fc1 7 // Port para o botao fim de curso (CW)
- #define fc2 8 // Port para o botao fim de curso (CCW)
- #define ANALOG_IN A0
- int analogico = 0;
- int velocidade = 0;
- #define LIGA LOW
- #define DESLIGA HIGH
- unsigned long tempoBot = 0;
- unsigned long Ovrfw = 1000;
- byte systemControl = 0b10010000; // Inicia desligado e CW
- // bit 0 = CC/CCW = 0b0000 000X;
- // bit 1 = bot2 = 0b0000 00X0;
- // bit 2 = bot3 = 0b0000 0X00;
- // bit 3 = = 0b0000 X000;
- // bit 4 = FC1 = 0b000X 0000;
- // bit 5 = FC2 = 0b00X0 0000;
- // bit 6 = = 0b0X00 0000;
- // bit 7 = Desligado = 0bX000 0000;
- //-----------------------------------------------
- void setup()
- {
- Serial.begin(115200);
- // digitalWrite(releK1, DESLIGA); // Desliga o port evitando movimento indesejado
- // digitalWrite(releK2, DESLIGA); // Desliga o port evitando movimento indesejado
- // pinMode( releK1, OUTPUT); // Difinicao de port como saida
- // pinMode( releK2, OUTPUT); // Difinicao de port como saida
- pinMode( motorStep, OUTPUT); // Difinicao de port como saida
- pinMode( motorDir, OUTPUT); // Difinicao de port como saida
- pinMode(pinEnable, OUTPUT);
- pinMode( bot1, INPUT_PULLUP); // Difinicao de ports como entrada
- pinMode( bot2, INPUT_PULLUP);
- pinMode( bot3, INPUT_PULLUP);
- pinMode( fc1, INPUT_PULLUP);
- pinMode( fc2, INPUT_PULLUP);
- tempoBot = millis();
- motor.setMaxSpeed(1000);
- motor.setSpeed(50);
- digitalWrite(pinEnable, LOW);
- }
- //-----------------------------------------------
- void loop()
- {
- statusBot();
- statusFC();
- ligaSystem();
- analogico = analogRead(ANALOG_IN);
- //Serial.println(analogico);
- velocidade = map(analogico, 0 , 255, 24, 160);
- //Serial.println(velocidade);
- }
- //-----------------------------------------------
- void statusBot()
- {
- // --------------------------------------------------------------- botao 1
- if (digitalRead(bot1) == LOW) // Se o bot1 estiver pressionado botao b1 liga ou desliga
- {
- // delay(10); // Tempo de debouncing
- tempoBot = millis();
- while (digitalRead(bot1) == LOW) // Se o bot1 continua pressionado
- {
- if (millis() - tempoBot >= Ovrfw) // Tempo para decidir ligado ou desligado
- {
- bitSet(systemControl, 7); // Permite desligar o sistema (bit 7)
- bitClear(systemControl, 0); // Permite desligar o sistema (bit 0)
- bitSet(systemControl, 4); // Permite ligar o sistema CW (bit 4)
- bitClear(systemControl, 5); // Permite ligar o sistema CW (bit 5)
- while (digitalRead(bot1) == LOW)
- {}
- }
- else // Se o bot1 foi liberado antes de 3 segundos
- {
- bitSet(systemControl, 0); // Permite ligar o sistema (bit 0)
- bitClear(systemControl, 7); // Permite ligar o sistema (bit 7)
- }
- }
- }
- // --------------------------------------------------------------- botao 2
- if ((systemControl != 0x10) and (systemControl != 0x11))
- {
- if (digitalRead(bot2) == LOW) // Se o bot2 estiver pressionado
- {
- // delay(10); // Tempo de debouncing
- if (digitalRead(bot2) == LOW) // Se o bot2 continua pressionado
- {
- if (digitalRead(fc1) == HIGH) // Se o fc1 estiver liberado
- {
- bitSet(systemControl, 1); // Permite pulsar o sistema CW (bit 1)
- }
- else // Se o bot3 estiver liberado
- {
- bitClear(systemControl, 1); // Permite desligar o CW (bit 1)
- }
- }
- }
- else // Se o bot3 estiver liberado
- {
- bitClear(systemControl, 1); // Permite desligar o CW (bit 1)
- }
- // --------------------------------------------------------------- botao 3
- if (digitalRead(bot3) == LOW) // Se o bot3 estiver pressionado
- {
- // delay(10); // Tempo de debouncing
- if (digitalRead(bot3) == LOW) // Se o bot3 continua pressionado
- {
- if (digitalRead(fc2) == HIGH) // Se o fc2 estiver liberado
- {
- bitSet(systemControl, 2); // Permite pulsar o sistema CCW (bit 2)
- }
- else // Se o bot3 estiver liberado
- {
- bitClear(systemControl, 2); // Permite desligar o CCW (bit 2)
- }
- }
- }
- else // Se o bot3 estiver liberado
- {
- bitClear(systemControl, 2); // Permite desligar o CCW (bit 2)
- }
- }
- }
- //----------------------------------------------
- void statusFC()
- {
- // --------------------------------------------------------------- FC 1
- if (digitalRead(fc1) == LOW) // Se o fc1 estiver pressionado
- {
- // delay(10); // Tempo de debouncing
- if (digitalRead(fc1) == LOW) // Se o fc1 continua pressionado
- {
- bitClear(systemControl, 0); // Permite ligar o sistema CW (bit 0)
- }
- }
- // --------------------------------------------------------------- FC 2
- if (digitalRead(fc2) == LOW) // Se o fc2 estiver pressionado
- {
- // delay(10); // Tempo de debouncing
- if (digitalRead(fc2) == LOW) // Se o fc2 continua pressionado
- {
- bitSet(systemControl, 0); // Permite ligar o sistema CCW (bit 0)
- }
- }
- }
- //----------------------------------------------
- void ligaSystem()
- {
- //Serial.println(systemControl, HEX);
- switch (systemControl)
- {
- case 0x10: //
- // digitalWrite(releK2, DESLIGA); // Desliga K2 (evita curto circuito)
- // digitalWrite(releK1, LIGA); // Liga K1 CW
- motor.setSpeed(velocidade);
- // Serial.println(velocidade);
- motor.runSpeed();
- break;
- case 0x11: //
- // digitalWrite(releK1, DESLIGA); // Desliga K1 (evita curto circuito)
- // digitalWrite(releK2, LIGA); // Liga K2 CCW
- motor.setSpeed(-velocidade);
- // Serial.println(velocidade);
- motor.runSpeed();
- break;
- case 0x90: //
- // digitalWrite(releK1, DESLIGA); // Desliga K1
- // digitalWrite(releK2, DESLIGA); // Desliga K2
- motor.stop();
- break;
- case 0x91: //
- // digitalWrite(releK1, DESLIGA); // Desliga K1
- // digitalWrite(releK2, DESLIGA); // Desliga K2
- motor.stop();
- break;
- case 0x92: //
- // digitalWrite(releK2, DESLIGA); // Desliga K2 (evita curto circuito)
- // digitalWrite(releK1, LIGA); // Liga K1 CW
- motor.setSpeed(-velocidade);
- motor.runSpeed();
- break;
- case 0x93: //
- // digitalWrite(releK2, DESLIGA); // Desliga K2 (evita curto circuito)
- // digitalWrite(releK1, LIGA); // Liga K1 CW
- motor.setSpeed(-velocidade);
- motor.runSpeed();
- break;
- case 0x94: //
- // digitalWrite(releK2, LIGA); // Desliga K2 (evita curto circuito)
- // digitalWrite(releK1, DESLIGA); // Liga K1 CW
- motor.setSpeed(velocidade);
- motor.runSpeed();
- break;
- case 0x95: //
- // digitalWrite(releK2, LIGA); // Desliga K2 (evita curto circuito)
- // digitalWrite(releK1, DESLIGA); // Liga K1 CW
- motor.setSpeed(velocidade);
- motor.runSpeed();
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement