that_one_nigga_you_k

Untitled

May 1st, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.97 KB | None | 0 0
  1. #define A1 10 // pinos dos motores
  2. #define A2 8
  3. #define EA 2 // pino de enconder
  4. #define EB 3 // pino de enconder
  5. #define ANG 90 // angulo que você quer que gire
  6. #define KP 5
  7.  
  8. int i = 0, a, b, leitura;
  9.  
  10. void setup() {
  11. pinMode(A2, OUTPUT); // pino do motor como saída
  12. pinMode(EA, INPUT); //pinos de enconder como entrada
  13. pinMode(EB, INPUT);
  14. attachInterrupt(digitalPinToInterrupt(2), pulsos, CHANGE);
  15.  
  16. /* essas duas interrupções chamam a função "pulsos" toda vez
  17. que o pino 2 ou 3 sofrerem alterações/*
  18.  
  19. attachInterrupt(digitalPinToInterrupt(3), pulsos, CHANGE);
  20. Serial.begin(9600);
  21. a = digitalRead(EA); //para ter uma leitura de verdade precisa ter a primeira leitura no setup, e aqui ela está
  22. b = digitalRead(EB);
  23. }
  24.  
  25. void loop() {
  26.  
  27. float setpoint = ANG; // "setpoint" em inglês é ponto de referência, que é o angulo que queremos que ele gire
  28.  
  29. float valorAtual = ang_puls(); // pega o valor do angulo retornado pela função lá embaixo
  30. float erro = setpoint - valorAtual;
  31. int sinalControlador = abs(erro * KP); // "abs é uma função que transforma qualquer que seja o numero em positivo
  32. if (erro >= 0) {
  33. if (sinalControlador > 255) {
  34. sinalControlador = 255;
  35. }
  36. analogWrite(A1, sinalControlador);
  37. digitalWrite(A2, 0);
  38. }
  39.  
  40. else {
  41. if (sinalControlador > 255) {
  42. sinalControlador = 255;
  43. }
  44. analogWrite(A1, 255 - sinalControlador);
  45. digitalWrite(A2, 1);
  46. }
  47.  
  48. Serial.println(ang_puls());
  49. }
  50.  
  51. void pulsos() {
  52. if (a == b) {
  53. if (a != digitalRead(EA)) {
  54. i++;
  55. a = digitalRead(EA);
  56. }
  57. if (b != digitalRead(EB)) {
  58. i--;
  59. b = digitalRead(EB);
  60. }
  61. }
  62.  
  63. else {
  64. if (a != digitalRead(EA)) {
  65. i--;
  66. a = digitalRead(EA);
  67. }
  68. if (b != digitalRead(EB)) {
  69. i++;
  70. b = digitalRead(EB);
  71. }
  72. }
  73. }
  74.  
  75. // função que transforma os pulsos em angulo e retorna esse valor
  76. float ang_puls() {
  77. return i * 7.5;
  78. }
Add Comment
Please, Sign In to add comment