Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Stepper.h>
- #include <EEPROM.h>
- #define STEPS 2048 // 32 (Fullsteps) * (Reduction ratio)
- #define COIL1 8
- #define COIL2 9
- #define COIL3 10
- #define COIL4 11
- #define analog A0
- Stepper stepper(STEPS, COIL1, COIL2, COIL3, COIL4); // Create an instance off the stepper class:
- int pos = 0; // inicial position off stepper
- int val = 0; // Valor lido de A0
- int estabiliza = 0; // Controle para o motor ficar parado devido flutuacoes em A0
- #define botA 4 // Botao para salvar posicao A do step
- #define botB 5 // Botao para salvar posicao B do step
- #define botC 6 // Botao para salvar posicao C do step
- #define botD 7 // Botao para salvar posicao D do step
- int eeAddress = 0; // EEPROM endereco inicial
- //--------------------------------------------
- void setup()
- {
- stepper.setSpeed(4); // Speed of motor to 4 rpm
- Serial.begin(57600);
- pinMode(botA, INPUT_PULLUP);
- pinMode(botB, INPUT_PULLUP);
- pinMode(botC, INPUT_PULLUP);
- pinMode(botD, INPUT_PULLUP);
- EEPROM.get(eeAddress, val);
- }
- //--------------------------------------------
- void loop()
- {
- if (digitalRead(botA) == LOW) // Se botao A foi apertado
- {
- delay(20); // Debouncing
- if (digitalRead(botA) == LOW) // Se botao A continua apertado
- {
- EEPROM.put(eeAddress, val); // Salva na EEPROM 0
- }
- }
- if (digitalRead(botB) == LOW) // Se botao B foi apertado
- {
- delay(20); // Debouncing
- if (digitalRead(botB) == LOW) // Se botao B continua apertado
- {
- EEPROM.put(eeAddress + 2, val); // Salva na EEPROM 2
- }
- }
- if (digitalRead(botC) == LOW) // Se botao C foi apertado
- {
- delay(20); // Debouncing
- if (digitalRead(botC) == LOW) // Se botao C continua apertado
- {
- EEPROM.put(eeAddress + 4, val); // Salva na EEPROM 4
- }
- }
- if (digitalRead(botD) == LOW) // Se botao D foi apertado
- {
- delay(20); // Debouncing
- if (digitalRead(botD) == LOW) // Se botao D continua apertado
- {
- EEPROM.put(eeAddress + 6, val); // Salva na EEPROM 6
- }
- }
- val = analogRead(analog); // Le Ao e salva em val
- /* Serial.print(val);
- Serial.print(" ");
- Serial.print(pos);
- Serial.print(" ");*/
- Serial.println(val - pos);
- if (val != abs(pos)) // Se de haver movimento do motor
- {
- if (estabiliza == 0) // Se nao esta establizado (diferenca de 2)
- {
- if ((val - pos) > 0) // Se deve mover FW
- {
- stepper.step(1); // Move a step toward the pot reading
- pos++; // put a couple of plus characters after pos.
- }
- if ((val - pos) < 0) // Se deve mover BW
- {
- stepper.step(-1); // Move a step toward the pot reading
- pos--; // put a couple of plus characters after pos.
- }
- }
- if (abs(val - pos) == 0) // Se chegou no ponto solicitado FW
- {
- estabiliza = 1; // Informa establizdo
- }
- if (estabiliza == 1) // Se está establizado
- {
- digitalWrite(COIL1, LOW); // Turn Off coils to reduce motor heating
- digitalWrite(COIL2, LOW);
- digitalWrite(COIL3, LOW);
- digitalWrite(COIL4, LOW);
- if (abs(val - pos) > 2) // Se necessita mover + que 2
- {
- estabiliza = 0; // Desliga establizado
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement