Code seems to lock up.


first post please go easy on me....

i've been writing code operate 12v retractable antenna, close chicken coop door, based on solar input level.  retract needs 12v constant signal, extend needs 12v constant in addition 2nd 12v signal.

so far setup seems working - point. if start system solar sensor covered actuates 2 12v relays , extends antenna(closing door).  if start system light on solar sensor retracts antenna - should.  problem doesn't seem loop.  sets relays , never shuts them down. want disengage relays once antenna has reached it's position (open or closed) not have continuous draw on battery. should re-evaluating light level every loop - if take away light should close door (extend antenna).

my code has quite few delays in think should ok don't believe need multitasking , in end need run program every 15 minutes. (most of delays have been time trimmed considerably trouble shooting purposes)  there lot of rem'd out statements pertaining roof i'd open based on temperature - that's same setup coop door , problem day!)

thanks help...

code: [select]


  #include <dht.h> //load temp sensor library
  dht dht;

#define thermo 10  //sets pin temperature sensordht11_pin

  // set values input/outputs:
int door12vc=11;  // accuates door open 12v constant:
int door12vs=12; // accuates door open 12v switched:
int solarsw=a0;  // solar switch - daylight sensor:
int solarlvl=0;  // variable store daylight value
//int thermo=10;   // temperature sensor
int temp = 0;      // variable store temperature value
//int roofopen=9;  // accuates roof open motor relays:
//int roofclose=8; // accuates roof close motor relays:
//int dopensw=7;   // switch sense door open:
//int dclosesw=6;  // switch sense door closed:
//int ropensw=5;   // switch sense roof open:
//int rclosesw=4;  // switch sense roof closed:
int buzz=3;      // audible feedback:
int doormaxtrvltime=50000; //5 sec door open_close:
//int roofmaxtrvltime=300000; //30 sec roof open_close:
int timer=1000; //900000=15minutes:



void setup() {
  // put setup code here, run once:
  serial.begin(9600);  // set baud rate communicate
  pinmode(door12vc,output);
  pinmode(door12vs,output);
  pinmode(solarsw,input);
  pinmode(thermo,input);
//  pinmode(roofopen,output);
//  pinmode(roofclose,output);
 // pinmode(dopensw,input);
 // pinmode(dclosesw,input);
 // pinmode(ropensw,input);
 // pinmode(rclosesw,input);
  pinmode(buzz,output);
 
 
 
  // ensures door closer off
 digitalwrite(door12vs, high); // turn off doorcloser - closer tries retract
 // delay(100); // time cycle relay
 digitalwrite(door12vc, high); // turn off closer - stops retract
 

}

void loop() {
  // put main code here, run repeatedly:
 
    temp = analogread(thermo);  // stores value of temp sensor:
 serial.print("temperature value = ");
 serial.println(temp);
   delay(2000);

 
  solarlvl = analogread(solarsw);   // stores value of sunlight:
 serial.print("solar level = ");
  serial.println(solarlvl);
   delay(2000);

  int chk = dht.read11(thermo);
  serial.print("temperature = ");
  serial.println(dht.temperature*1.8+32);
  serial.print("humidity = ");
  serial.println(dht.humidity);
  delay(1000);

/* section opens/closes door based on light level*/

  if (solarlvl < 250) //set level close door
{
 digitalwrite(buzz,high); // turn on doorclose alarm
 delay(1000);
 digitalwrite(buzz,low); // turn off doorclose alarm
 delay(2000);
 digitalwrite(buzz,high); // turn on doorclose alarm
 delay(1000);
 digitalwrite(buzz,low); // turn off doorclose alarm
 delay(2000);  // delay before doorclose
 digitalwrite(door12vc, low); // turn on 12v doorcloser -retracts
 delay(100); // time start closer
 digitalwrite(door12vs, low); // turn on 12v extend closer
 delay(doormaxtrvltime);// time extend door closer
 digitalwrite(door12vs, high); // turn off doorcloser - closer tries retract
 delay(100); // time cycle relay
 digitalwrite(door12vc, high); // turn off closer - stops retract
 loop();
}
 
 if (solarlvl > 260) // set level open door
{
 digitalwrite(door12vc, low); // retract closer
 delay(doormaxtrvltime);
 digitalwrite(door12vc, high); // turn off closer
 loop();
}
delay(timer);//  sets time wait before re-running routine

/* section opens / closes roof based on temperature
  if (thermo < 180) //set level close roof
{
 
 digitalwrite(roofclose, high); // turn on roofclose relay
 delay(roofmaxtrvltime);
 digitalwrite(roofclose, low); // turn off roofclose relay
}
 if (thermo > 200) // set level open roof
{
 digitalwrite(roofopen, high); // turn on roofopen relay
 delay(roofmaxtrvltime);
 digitalwrite(roofopen, low); // turn off roofopen relay
}
*/

// void subroutinename() {
  // run subroutines here:
}



you seem recursively calling loop function within itself. why?
this cause stack overflow.

replace loop(); return;

pieter


Arduino Forum > Using Arduino > Programming Questions > Code seems to lock up.


arduino

Comments

Popular posts from this blog

Flip address is out of range arduino uno r3

Arduino Uno not uploading

Indesign and MathType fonts