Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define A1 10 // pinos dos motores
- #define A2 8
- #define EA 2 // pino de enconder
- #define EB 3 // pino de enconder
- #define ANG 90 // angulo que você quer que gire
- #define KP 5
- int i = 0, a, b, leitura;
- void setup() {
- pinMode(A2, OUTPUT); // pino do motor como saída
- pinMode(EA, INPUT); //pinos de enconder como entrada
- pinMode(EB, INPUT);
- attachInterrupt(digitalPinToInterrupt(2), pulsos, CHANGE);
- /* essas duas interrupções chamam a função "pulsos" toda vez
- que o pino 2 ou 3 sofrerem alterações/*
- attachInterrupt(digitalPinToInterrupt(3), pulsos, CHANGE);
- Serial.begin(9600);
- a = digitalRead(EA); //para ter uma leitura de verdade precisa ter a primeira leitura no setup, e aqui ela está
- b = digitalRead(EB);
- }
- void loop() {
- float setpoint = ANG; // "setpoint" em inglês é ponto de referência, que é o angulo que queremos que ele gire
- float valorAtual = ang_puls(); // pega o valor do angulo retornado pela função lá embaixo
- float erro = setpoint - valorAtual;
- int sinalControlador = abs(erro * KP); // "abs é uma função que transforma qualquer que seja o numero em positivo
- if (erro >= 0) {
- if (sinalControlador > 255) {
- sinalControlador = 255;
- }
- analogWrite(A1, sinalControlador);
- digitalWrite(A2, 0);
- }
- else {
- if (sinalControlador > 255) {
- sinalControlador = 255;
- }
- analogWrite(A1, 255 - sinalControlador);
- digitalWrite(A2, 1);
- }
- Serial.println(ang_puls());
- }
- void pulsos() {
- if (a == b) {
- if (a != digitalRead(EA)) {
- i++;
- a = digitalRead(EA);
- }
- if (b != digitalRead(EB)) {
- i--;
- b = digitalRead(EB);
- }
- }
- else {
- if (a != digitalRead(EA)) {
- i--;
- a = digitalRead(EA);
- }
- if (b != digitalRead(EB)) {
- i++;
- b = digitalRead(EB);
- }
- }
- }
- // função que transforma os pulsos em angulo e retorna esse valor
- float ang_puls() {
- return i * 7.5;
- }
Add Comment
Please, Sign In to add comment