Components and supplies
Arduino Nano
Apps and platforms
rogerbit.
Project description
Code
Source code
js
Source code
1#include <Servo.h> 2const int X_PIN_A0 = A0; // Pin analógico para el eje X 3const int Y_PIN_A1 = A1; // Pin analógico para el eje Y 4const int BOTON_PIN_12 = 12; // Pin digital para el botón 5const int LASER_PIN5 = 5; // Pin digital para el control del láser 6int estado = 0; 7Servo servoX; 8Servo servoY; 9int servoXPosPrev = 90; // Posición anterior del servo X 10int servoYPosPrev = 90; // Posición anterior del servo Y 11int servoIncrement = 1; // Incremento de posición para el serv 12void setup() { 13 pinMode(BOTON_PIN_12, INPUT_PULLUP); // Configurar el pin del botón como entrada con resistencia pull-up interna 14 pinMode(LASER_PIN5, OUTPUT); // Configurar el pin del control del láser 15 servoX.attach(10); // Conectar el servo X al pin 10 16 servoY.attach(11); // Conectar el servo Y al pin 11 17 Serial.begin(9600); // Velocidad del puerto serial 18} 19void loop() { 20 // Leer los valores de los ejes X e Y 21 int xValue = analogRead(X_PIN_A0); 22 int yValue = analogRead(Y_PIN_A1); 23 // Convertir los valores a la posición del servo (0 a 180 grados) 24 int servoXPos = map(xValue, 0, 1023, 0, 180); 25 // Convertir los valores a la posición del servo (70 a 180 grados) 26 int servoYPos = map(yValue, 0, 1023, 70, 180); 27 28 // Mover los servos suavemente 29 if (servoXPos != servoXPosPrev) { 30 if (servoXPos > servoXPosPrev) { 31 for (int pos = servoXPosPrev; pos <= servoXPos; pos += servoIncrement) { 32 servoX.write(pos); 33 delay(5); // Ajusta el retraso para controlar la velocidad del movimiento 34 } 35 } else { 36 for (int pos = servoXPosPrev; pos >= servoXPos; pos -= servoIncrement) { 37 servoX.write(pos); 38 delay(5); // Ajusta el retraso para controlar la velocidad del movimiento 39 } 40 } 41 servoXPosPrev = servoXPos; 42 } 43 44 if (servoYPos != servoYPosPrev) { 45 if (servoYPos > servoYPosPrev) { 46 for (int pos = servoYPosPrev; pos <= servoYPos; pos += servoIncrement) { 47 servoY.write(pos); 48 delay(5); // Ajusta el retraso para controlar la velocidad del movimiento 49 } 50 } else { 51 for (int pos = servoYPosPrev; pos >= servoYPos; pos -= servoIncrement) { 52 servoY.write(pos); 53 delay(5); // Ajusta el retraso para controlar la velocidad del movimiento 54 } 55 } 56 servoYPosPrev = servoYPos; 57 } 58 // Leer el estado del botón 59 bool botonEstado = digitalRead(BOTON_PIN_12); 60if (botonEstado == LOW) {//Si el botón ha sido precionado se cumple esta condición 61if(estado ==0){//Si la variable estado es igual a 0 se cumple esta condición 62digitalWrite(LASER_PIN5, HIGH); 63estado =1;//Asignamos el valor 1 a la variable "estado" 64} else{ 65 digitalWrite(LASER_PIN5, LOW); 66 estado =0; 67 } 68while(botonEstado == LOW){ 69botonEstado = digitalRead(BOTON_PIN_12);//Leemos el estado del botón nuevamente para ver si sigue precionado 70 } 71 } 72 // Mostrar los valores en el terminal serial 73 Serial.print("Eje X: "); 74 Serial.println(xValue); 75 Serial.print("Eje Y: "); 76 Serial.println(yValue); 77 Serial.print("Botón: "); 78 Serial.println(botonEstado); 79 delay(100); // Leve pausa entre las lecturas 80}
Comments
Only logged in users can leave comments