Ayuda con unir códigos

hola espero que todos esten bien , necesito ayuda porfavor con un codigo ,lo explico:
Bueno tengo un codigo ya unido con leds que parpadean un led que prende con un pulsador y un servomotor pero necesito agregarle a ese codigo un sensor ultrasonico que controla 3 leds con una cierta distancia , pero al unir los codigos hay falles en los otros , porfavor ayuda .

A continuacion mostrare ambos codigos , el primero codigo tiene unido unas luces led que parpadean . un led que se activa con un pulsador y un servomotor y el segundo codigo es solamente el sensor ultrasonico .

Primer codigo

#define pinLED1 8 // Definimos pin 8
#define pinLED2 12 // Definimos pin 12
#define pinLED3 13 // Definimos pin 13

Servo myServo; // Crea un objeto Servo
const int buttonPin = 2; // Pin al que está conectado el botón
const int servoPin = 9; // Pin al que está conectado el servomotor

unsigned long previousMillis = 0; // Almacena el tiempo anterior
const long interval = 100; // Intervalo para el parpadeo de LEDs
int ledIndex = 0; // Índice del LED que parpadea

void setup() {
// Configuración de los LEDs
pinMode(pinLED1, OUTPUT);
pinMode(pinLED2, OUTPUT);
pinMode(pinLED3, OUTPUT);

// Configuración del servomotor
myServo.attach(servoPin); // Conecta el servomotor al pin digital 9
pinMode(buttonPin, INPUT_PULLUP); // Configura el pin del botón como entrada con resistencia pull-up
}

void loop() {
// Control del parpadeo de los LEDs
unsigned long currentMillis = millis();

if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;

// Apagar todos los LEDs
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);

// Encender el LED correspondiente
if (ledIndex == 0) {
  digitalWrite(pinLED1, HIGH);
} else if (ledIndex == 1) {
  digitalWrite(pinLED2, HIGH);
} else if (ledIndex == 2) {
  digitalWrite(pinLED3, HIGH);
}

ledIndex = (ledIndex + 1) % 3; // Ciclo a través de los LEDs

}

// Control del servomotor con el botón
if (digitalRead(buttonPin) == LOW) {
moverServo(0, 180); // Mueve el servomotor de 0 a 180 grados
delay(500); // Pausa breve para evitar múltiples activaciones
moverServo(180, 0); // Mueve el servomotor de 180 a 0 grados
delay(500); // Pausa breve para evitar múltiples activaciones
}
}

// Función para mover el servomotor
void moverServo(int startAngle, int endAngle) {
int step = (startAngle < endAngle) ? 1 : -1;
for (int angle = startAngle; angle != endAngle + step; angle += step) {
myServo.write(angle);
delay(15); // Ajusta este tiempo según la velocidad deseada
}
}

Segundo código

long readUltrasonicDistance(int triggerPin, int echoPin)
{
pinMode(triggerPin, OUTPUT); // Clear the trigger
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
// Sets the trigger pin to HIGH state for 10 microseconds
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
// Reads the echo pin, and returns the sound wave travel time in microseconds *0.01723
return (pulseIn(echoPin, HIGH)*0.01723);

}

void setup()
{
Serial.begin(9600);

pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
}

void loop()
{
cm =readUltrasonicDistance(7, 6);

Serial.print(cm);
Serial.println("cm");

if (cm > 250) {
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
if (cm <= 250 && cm > 175) {
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
if (cm <= 175 && cm > 100) {
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}
if (cm <= 100) {
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
}

delay(100); // Wait for 100 millisecond(s)
}

Moderador:
Por favor, lee las Normas del foro
Edita tu título, usa uno que no tenga justamente lo que se considera un título inútil.
Ver en las normas punto 5.
5. Piensa un título y descriptivo
Trata de resumir tu problema con un título inteligente, útil e informativo.
Un título útil salta a la vista de las personas que podrían conocer la respuesta. Los títulos inútiles son los que deberías evitar.
Por otro lado edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado/editado, lo cortas y click en (<CODE/>)


Te respondo pero corrige todo lo que te he mencionado.
Usar un código con delay funciona. Usar otro con delay tmb. Pero cuando los unes no? por qué será? Porque delay no hace nada, detiene el código entonces lo que funciona de un modo en 1 código no lo hace en otro.
Solución, ve a Documentación y lee sobre millis() y máquina de estados.
O si quieres seguir como estas minimiza el uso de delays.

Hola @simoney1

Solo te diré ( aparte de que sigas las indicaciones de @Surbyte ) .
Para empezar; unifica en un solo setup y loop sus dobles instrucciones.

Animo !!!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.