Go Down

Topic: Mi código pasa la verificación pero no funciona (Read 195 times) previous topic - next topic

Adiego

May 06, 2018, 09:31 am Last Edit: May 06, 2018, 04:08 pm by surbyte
Hola, tengo un código el cual consta de varios códigos unidos, lo que pasa es que al momento de subirlo no funciona. sin embargo cuando se prueba por separado si lo hace, cuento con un arduino Mega.
he leído algunos foros que tiene un problema parecido al mio pero no me funciona.
gracias.


-agrego el código-
Code: [Select]

// servo
#include <Servo.h>
 #define Pecho 11
#define Ptrig 12
long duracion, distancia;
int ledrojo= 6;
int ledverde= 7;
Servo servoMotor;
//sensor de luz

int pinLed1 = 2;       // Pines donde se conectan los leds
int pinLed2 = 8;
int pinLed3 = 9;
int pinLDR = 0;       // Pin analogico de entrada para el LDR
int valorLDR = 0;
//sensor de llama
const int buzzer1= 53;
const int sensor= 52;
//alarma PIR
const int buzzer2= 13;
const int PIRPin= 3;

void setup(){
  //servo
                               // Iniciamos el monitor serie para mostrar el resultado
  Serial.begin(9600);
pinMode(ledrojo, OUTPUT);
pinMode(ledverde, OUTPUT);
 
                                // Iniciamos el servo para que empiece a trabajar con el pin 9
  servoMotor.attach(9);
  servoMotor.write(0);

                                //ultrasonico
    pinMode (Pecho, INPUT);
   pinMode (Ptrig, OUTPUT);
 

   //LEDS DE LDR
   pinMode(pinLed1, OUTPUT);
  pinMode(pinLed2, OUTPUT);
  pinMode(pinLed3, OUTPUT);

  // sensor de llama
  pinMode(buzzer1, OUTPUT);
  pinMode(sensor,INPUT);
 
  // sensor PIR
  pinMode(buzzer2, OUTPUT);
  pinMode(PIRPin, INPUT);  

}
void loop () {
  //servo
  digitalWrite(Ptrig, LOW);
  delayMicroseconds(2);
  digitalWrite(Ptrig, HIGH);
  delayMicroseconds(10);
  digitalWrite(Ptrig, LOW);

   duracion = pulseIn(Pecho, HIGH);
  distancia = (duracion/2)/29;
   Serial.print(distancia);
  Serial.println("cm");
  if ((distancia >5 ) or (distancia<0))
  {
     servoMotor.write(0);
digitalWrite(ledrojo, HIGH);
digitalWrite(ledverde, LOW);
    // Esperamos 1 segundo
     delay(1000);
  
  }
  else
  {
                                    // Desplazamos a la posición 180º
     servoMotor.write(90);
digitalWrite(ledverde, HIGH);
digitalWrite(ledrojo, LOW);
                                   // Esperamos 1 segundo
    delay(1000);
  
  
    // luces LDR
    
    digitalWrite(pinLed1, LOW);
  digitalWrite(pinLed2, LOW);
  digitalWrite(pinLed3, LOW);
   valorLDR= analogRead(pinLDR);
   Serial.println(valorLDR);
  
  if(valorLDR < 10)                  // Encender los leds apropiados de acuerdo al valor de ADC
  {
    digitalWrite(pinLed1, HIGH);
  }
  if(valorLDR < 10)
  {
    digitalWrite(pinLed2, HIGH);
  }
  if(valorLDR <10)
  {
    digitalWrite(pinLed3, HIGH);
  }
  
  delay(200);                                // Esperar unos milisegundos antes de actualizar
  
  //sensor de llama

   {if (digitalRead(sensor))
          digitalWrite( buzzer1 , HIGH);
      else
          digitalWrite( buzzer1 , LOW);
   }
  //sensor PIR

int value= digitalRead(PIRPin);
 
  if (value == HIGH)
  {
    digitalWrite(buzzer2, HIGH);
    delay(12000);
    digitalWrite(buzzer2, LOW);
    delay(4000);
  }
  else
  {
    digitalWrite(buzzer1, LOW);
  }
}
}




Moderador: Título editado.

surbyte

Este programa es un gran caos de varios códigos como bien has explicado pero tu principal problema es que no has sido ordenado.

1) cuando presentas algo en un foro, lo haces al menos identando debidamente el código para que sea fácil su lectura.  Con el IDE haces Ctrl+T o vas a herramientas ->Auto Formato
2) Es importante entender que haces y por esa razón los códigos deben comentarse porque de lo contrario nosotros tenemos que perder mas tiempo para responderte.

Yo ahora puedo modificar cosas a mi gusto pero mira estos errores que aún no resuelven tu problema

tienes un Servo en el pin 9 y luego defines el pin 9 para un pinLed3. Entonces que haces con el servo o el sensor LDR?

Cosas como esta
Code: [Select]
      if (value == HIGH)
      {
          digitalWrite(buzzer2, HIGH);
          delay(12000);
          digitalWrite(buzzer2, LOW);
          delay(4000);
      }


no se pueden usar donde hay sensores porque por 18000 mseg el sistema quedará detenido cuando esa variable value este en HIGH.

Solución para esto es usar millis(). Ve a Documentación => indice de temas tutoriales => millis()

El código tiene muchos delays() y ya te he dicho que eso detiene la ejecución de todo el código.

Ahora veamos el error puntual.

Bueno el código compila

Quote
AVR Memory Usage
----------------
Device: atmega2560

Program:    5506 bytes (2.1% Full)
(.text + .data + .bootloader)

Data:        352 bytes (4.3% Full)
(.data + .bss + .noinit)


 [SUCCESS] Took 22.31 seconds


 [SUMMARY]
Environment uno              [SKIP]
Environment megaatmega2560   [SUCCESS]
 [SUCCESS] Took 22.33 seconds
tal vez tu error fue no usar un MEGA 2560 y hayas usado un UNO.

Code: [Select]
// servo
#include <Servo.h>
#define Pecho       11
#define Ptrig       12
long duracion, distancia;
int ledrojo       = 6;
int ledverde      = 7;
Servo servoMotor;
//sensor de luz

int pinLed1       = 2;       // Pines donde se conectan los leds
int pinLed2       = 8;
int pinLed3       = 9;       // <== pin compartido por SERVO
int pinLDR        = A0;       // <== CORREGÏ esto a A0 y tu pusiste 0 solamente
int valorLDR      = 0;
//sensor de llama
const int buzzer1 = 53;
const int sensor  = 52;

//alarma PIR
const int buzzer2 = 13;
const int PIRPin  = 3;

void setup(){
  //servo
  // Iniciamos el monitor serie para mostrar el resultado
  Serial.begin(9600);
  pinMode(ledrojo, OUTPUT);
  pinMode(ledverde, OUTPUT);
 
  // Iniciamos el servo para que empiece a trabajar con el pin 9
  servoMotor.attach(9);       // <== pin compartido por SERVO
  servoMotor.write(0);

                                //ultrasonico
  pinMode (Pecho, INPUT);
  pinMode (Ptrig, OUTPUT);
 

  //LEDS DE LDR
  pinMode(pinLed1, OUTPUT);
  pinMode(pinLed2, OUTPUT);
  pinMode(pinLed3, OUTPUT);

  // sensor de llama
  pinMode(buzzer1, OUTPUT);
  pinMode(sensor,INPUT);
 
  // sensor PIR
  pinMode(buzzer2, OUTPUT);
  pinMode(PIRPin, INPUT); 

}
void loop () {
  //servo
  digitalWrite(Ptrig, LOW);
  delayMicroseconds(2);
  digitalWrite(Ptrig, HIGH);
  delayMicroseconds(10);
  digitalWrite(Ptrig, LOW);

  duracion = pulseIn(Pecho, HIGH);
  distancia = (duracion/2)/29;
  Serial.print(distancia);
  Serial.println("cm");
  if ((distancia >5 ) or (distancia<0)) {
      servoMotor.write(0);
      digitalWrite(ledrojo, HIGH);
      digitalWrite(ledverde, LOW);
      // Esperamos 1 segundo
      delay(1000);
  }
  else  {
                                    // Desplazamos a la posición 180º
      servoMotor.write(90);
      digitalWrite(ledverde, HIGH);
      digitalWrite(ledrojo, LOW);
                                   // Esperamos 1 segundo
      delay(1000);


      // luces LDR

      digitalWrite(pinLed1, LOW);
      digitalWrite(pinLed2, LOW);
      digitalWrite(pinLed3, LOW);
      valorLDR= analogRead(pinLDR);
      Serial.println(valorLDR);
   
      if (valorLDR < 10) {                 // Encender los leds apropiados de acuerdo al valor de ADC
          digitalWrite(pinLed1, HIGH);
      }
      if (valorLDR < 10)
      {
          digitalWrite(pinLed2, HIGH);
      }
      if (valorLDR <10)
      {
          digitalWrite(pinLed3, HIGH);
      }

      delay(200);                                // Esperar unos milisegundos antes de actualizar

      //sensor de llama

      {if (digitalRead(sensor))
          digitalWrite( buzzer1 , HIGH);
      else
          digitalWrite( buzzer1 , LOW);
      }
      //sensor PIR

      int value= digitalRead(PIRPin);

      if (value == HIGH)
      {
          digitalWrite(buzzer2, HIGH);
          delay(12000);
          digitalWrite(buzzer2, LOW);
          delay(4000);
      }
      else {
          digitalWrite(buzzer1, LOW);
      }
  }
}

Go Up