Hatkat

Arduino Motors

Sep 16th, 2023
872
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.14 KB | None | 0 0
  1. #include <Stepper.h>
  2. #include <Servo.h>
  3. #include <LiquidCrystal_I2C.h>
  4. #include <Wire.h>
  5.  
  6. int rpm = 2048;
  7. LiquidCrystal_I2C lcd(0x27, 16, 2);
  8. Stepper motor(rpm, 10, 12, 11, 13);
  9. int pinLedR = 3;
  10. int pinLedA = 2;
  11. int pinSound = 4;
  12. int lecturaBoton = A0;
  13. int pinServo = 5;
  14. int pinPotenciometro = A1;
  15. int ejeX = A2;
  16. int ejeY = A3;
  17. Servo miServo;
  18.  
  19. // Variables de uso
  20. int velocidadMotor = 1;
  21. int estadoBoton;
  22. int angulo;
  23. int vrJoystick;
  24. int tempEjeY;
  25. int wait = 50;
  26. int voltajePotenciometro;
  27. bool verificarSonido;
  28. int stepState = 1;
  29.  
  30. void setup() {
  31.   pinMode(pinLedA, OUTPUT);
  32.   pinMode(pinLedR, OUTPUT);
  33.   pinMode(pinSound, OUTPUT);
  34.   pinMode(pinPotenciometro, INPUT);
  35.   pinMode(ejeX, INPUT);
  36.   pinMode(ejeY, INPUT);
  37.   Serial.begin(9600);
  38.   lcd.init();
  39.   lcd.backlight();
  40.   miServo.attach(pinServo);
  41.   motor.setSpeed(1);
  42.   lcd.setCursor(0, 1);
  43.   lcd.print("Giro motor: <-");
  44. }
  45.  
  46. void moverMotor(int step) {
  47.   tempEjeY = analogRead(ejeY);
  48.   while (tempEjeY < 529 || tempEjeY > 532) {
  49.     motor.step(step);
  50.     tempEjeY = analogRead(ejeY);
  51.     //velocidadMotor = (((2. / 1023.) * tempEjeY) - 3.) * -1;
  52.     motor.setSpeed(abs(15));
  53.   }
  54.   digitalWrite(10, LOW);
  55.   digitalWrite(11, LOW);
  56.   digitalWrite(12, LOW);
  57.   digitalWrite(13, LOW);
  58. }
  59.  
  60. bool moverServo() {
  61.   vrJoystick = analogRead(ejeX);
  62.   angulo = (179. / 1022.) * (vrJoystick - 1022.) * -1;
  63.   miServo.write(angulo);
  64.   if (angulo == 0 || angulo >= 178) {
  65.     return true;
  66.   } else {
  67.     return false;
  68.   }
  69. }
  70.  
  71. void sonar(bool verificador) {
  72.   if (verificador) {
  73.     if (angulo >= 179) {
  74.       digitalWrite(pinLedA, 0);
  75.       digitalWrite(pinSound, 1);
  76.       digitalWrite(pinLedR, 1);
  77.       delay(wait);
  78.       digitalWrite(pinSound, 0);
  79.       digitalWrite(pinLedR, 0);
  80.       delay(wait);
  81.       lcd.setCursor(0, 0);
  82.       lcd.print("Valor minimo");
  83.     } else if (angulo == 0) {
  84.       digitalWrite(pinLedR, 0);
  85.       digitalWrite(pinSound, 1);
  86.       digitalWrite(pinLedA, 1);
  87.       delay(wait);
  88.       digitalWrite(pinSound, 0);
  89.       digitalWrite(pinLedA, 0);
  90.       delay(wait);
  91.       lcd.setCursor(0, 0);
  92.       lcd.print("Valor maximo");
  93.     }
  94.   } else {
  95.     digitalWrite(pinSound, 0);
  96.     digitalWrite(pinLedR, 0);
  97.     digitalWrite(pinLedA, 0);
  98.   }
  99. }
  100.  
  101. void cambiarDireccionMotor(int pinLectura) {
  102.   if (pinLectura == 0) {
  103.     if (stepState == 1) {
  104.       lcd.setCursor(0, 1);
  105.       lcd.print("Giro motor: ->");
  106.       digitalWrite(pinSound, 1);
  107.       delay(150);
  108.       digitalWrite(pinSound, 0);
  109.       delay(150);
  110.       stepState = -1;
  111.       lcd.setCursor(0, 1);
  112.     } else {
  113.       lcd.setCursor(0, 1);
  114.       lcd.print("Giro motor: <-");
  115.       stepState = 1;
  116.       digitalWrite(pinSound, 1);
  117.       delay(150);
  118.       digitalWrite(pinSound, 0);
  119.       delay(150);
  120.     }
  121.   }
  122. }
  123.  
  124. void loop() {
  125.   Serial.println(angulo);
  126.   lcd.setCursor(0, 0);
  127.   lcd.print("Angulo mtr: " + String(angulo) + "  ");
  128.   cambiarDireccionMotor(analogRead(lecturaBoton));
  129.   moverMotor(stepState);
  130.   verificarSonido = moverServo();
  131.   sonar(verificarSonido);
  132.   voltajePotenciometro = analogRead(pinPotenciometro);
  133.   wait = (450. / 700.) * voltajePotenciometro + 50.;
  134. }
  135.  
Advertisement
Add Comment
Please, Sign In to add comment