HELP!, Arduino keeps rebooting


i'm trying finish project school (due @ 5pm today)

my adruino uno keeps rebooting unknow reason....
power supply lab supply 12v set 1.1amps (dvrs need ~350ma ea) total running 500-600ma

binary sketch size: 15758 bytes (of 32256 byte maximum)

code: [select]

#include <newsoftserial.h>
#include <tinygps.h>
#include <liquidcrystal.h>


tinygps gps;
newsoftserial gps(9, 8);
newsoftserial mdvrrec(12, 13);  //serial unit records ***correct
newsoftserial mdvroverlay(10, 11); //serial unit draws data on screen *** correct
liquidcrystal lcd(7, 6, 5, 4, 3, 2);

 long lat, lon;
 float flat, flon;
 unsigned long age, date, time, chars;
 int year;
 byte month, day, hour, minute, second, hundredths;
 unsigned short sentences, failed;
 int time_zone = 7;
 
int timer;  
int i;
void gpsdump(tinygps &gps);
bool feedgps();
void printfloat(double f, int digits = 2);
int bytegps=-1;
int k=0;

int flag =0; //rec triggering
long time_alive =0;
long time_check;
int speed=0;

int altitude=0;



int incomingbyte=0;  //for serial command passing
int serin;;// serial command passing
int j =0;
byte index = 0; // index array; store character


//=========================================================================================
void setup() {
// put setup code here, run once:
 serial.begin(4800);  // serial pc
  gps.begin(4800);
 mdvrrec.begin(115200);  // serial mdvr records -rev 0.10
// mdvrrec.begin(57600); // revs 0.20 +
 mdvroverlay.begin(57600);  // serial mdvr overlay generator

 lcd.begin(16, 2);
 serial.println("booting....");
 serial.println("sofware build date: 12/16/2011");

 pinmode(a0, output);
 pinmode(a1, output);
 pinmode(a4, output);
 pinmode(a5, output);
 
 overlay_boot();
 recboot();
 delay(450); // need mdvrs powered in time take commands
 osd_setup();
 serial.println("booting complete...");
 digitalwrite(a0, high); // turns off red led
}
//=========================================================================================
void recboot(){
     serial.println("booting recording unit");
     digitalwrite(a4,high); //boot mdvr
     delay(1500);
     digitalwrite(a4,low); //boot mdvr
}
//=========================================================================================
void overlay_boot(){
     serial.println("booting overlay generator");
     digitalwrite(a5,high); //boot mdvr
     delay(1500);
     digitalwrite(a5,low); //boot mdvr
}
//=========================================================================================

void osd_setup(){
 int delay=180; //200 start, 150 works every time// effect boot time
   delay(delay);
   serial.println("osd start");
   mdvroverlay.print(" \r"); // clears invalid data in input string
   delay(delay);
   mdvroverlay.print(" \r");// clears invalid data in input string
   delay(delay);
   mdvroverlay.print(" \r");// clears invalid data in input string
   delay(delay);
   mdvroverlay.print("t4 4 42 00\r"); //
   delay (delay);
   mdvroverlay.print("embtxtoffset 0 400 400\r"); // sets overlay top row (x,y) real time clock
   delay(delay);
   mdvroverlay.print("embtxtoffset 0 400 400\r"); // sets overlay top row (x,y) real time clock
   delay(delay);
   mdvroverlay.print("osdtxtoffset 1 30 25\r"); // sets overlay top row (x,y) latitude
   delay(delay);
   mdvroverlay.print("osdtxtoffset 2 30 50\r"); // sets overlay bottom row (x,y) longatude
   delay(delay);
   mdvroverlay.print("osdtxtoffset 3 30 400\r");  // sets ovelay bottom row (x,y) speed
   delay(delay);
   mdvroverlay.print("osdtxtoffset 4 30 75\r");  // sets ovelay bottom row (x,y) alt
   delay(delay);
   mdvroverlay.print("osdtxtenable 0 1\r"); // turns overlay string 0 on
   delay(delay);
   mdvroverlay.print("osdtxtenable 1 1\r"); // turns overlay sting 1 on
   delay(delay);  
   mdvroverlay.print("osdtxtenable 2 1\r"); // turns overlay sting 1 on
   delay(delay);
   mdvroverlay.print("osdtxtenable 3 1\r"); // turns overlay sting 1 on
   delay(delay);
   mdvroverlay.print("osdtxtenable 4 1\r"); // turns overlay sting 1 on
   delay(delay);
   mdvroverlay.print("osdtxtsize 0 20 20 \r"); // turns overlay string 0 on
   delay(delay);
   mdvroverlay.print("osdtxtsize 1 20 20 \r"); // turns overlay sting 1 on
   delay(delay);
   mdvroverlay.print("osdtxtsize 2 20 20 \r"); // turns overlay sting 1 on
   delay(delay);
   mdvroverlay.print("osdtxtsize 3 20 20 \r"); // turns overlay sting 1 on
   delay(delay);
   mdvroverlay.print("osdtxtsize 4 20 20 \r"); // turns overlay sting 1 on
   delay(delay);
   mdvroverlay.print("osdtxtcolor 0 3\r"); // sets sting 1  to blue
   delay (delay);
   mdvroverlay.print("osdtxtcolor 1 3\r"); // set sting 0 on blue
   delay (delay);
   mdvroverlay.print("osdtxtcolor 2 3\r"); // set sting 0 on blue
   delay (delay);
   mdvroverlay.print("osdtxtcolor 3 3\r"); // set sting 0 on blue
   delay (delay);
   mdvroverlay.print("osdtxtcolor 4 3\r"); // set sting 0 on blue
   delay (delay);
   //mdvroverlay.print("vcallback 1\r"); //
   delay (delay);
   mdvroverlay.print("embtxtrtcauto 1 \r"); //
   delay (delay);
   mdvroverlay.print("t4 4 42 00\r"); //
   delay (delay);
   mdvroverlay.print("embtxtenable 0 1\r"); //
   delay (delay);
   mdvrrec.print(" \r");
   delay(delay);
   mdvrrec.print(" \r");
   delay(delay);
   mdvrrec.print("overlay \r");
  serial.println("osd end");
   delay(delay);
}

//=========================================================================================
void mdvr_print(long lat, long lon, int altitude, int speed)
{
   int delay=100;
  // int k =0;
   if (k == 0){
        mdvroverlay.print("osdtxtload 1 "); mdvroverlay.print("latitude: ");mdvroverlay.print(lat);mdvroverlay.print("\r");//load data string
        ++k;
   }
        //delay(delay);
    else if(k==1){
      mdvroverlay.print("osdtxtload 2 ");mdvroverlay.print("longatude: ");mdvroverlay.print(lon);mdvroverlay.print("\r");
      ++k;
    }
        //delay(delay);
    else if (k==2){
      mdvroverlay.print("osdtxtload 3 "); mdvroverlay.print("speed: "); mdvroverlay.print(speed); mdvroverlay.print(" mph\r");
      ++k;
    }
       // delay(delay);
     else if  (k==3){
       mdvroverlay.print("osdtxtload 4 "); mdvroverlay.print("altitude: ");mdvroverlay.print(altitude); mdvroverlay.print("ft\r");
       ++k;
     }
     else
     {
       k=0;
     }
       // delay(delay);
}

//=========================================================================================

void loop() {
    if (serial.available()) { //direct arduino
           incomingbyte = serial.read(); // wait bit entire message arrive
           delay(100); // read available characters
       
       if(incomingbyte==49){ //1 command
           while (serial.available() > 0) {
           serin = serial.read(); //read serial
           serial.print(serin, byte); //eco commands
           mdvrrec.print(serin, byte); //pass commands
         }
       }
       if (incomingbyte==50){ //2comand
           while (serial.available() > 0) {
           serin = serial.read(); //read serial
           serial.print(serin, byte); //eco commands
           mdvroverlay.print(serin, byte); //pass commands
         }
       }
       mdvrrec.print("\r");
       serial.println("");
   }
   // end pass through

 digitalwrite(a1, high); // turns orange led off
 //digitalwrite(a0, high); // turns red led off
 bytegps=gps.read();
  if (bytegps == -1) {       // see if port empty yet
    delay(100);
  }
 //ssdigitalwrite(a0, low); // turns redled on
 
 bool newdata = false;
 unsigned long start = millis();

 // every 5 seconds print update
 while (millis() - start < 20)
 {
   if (feedgps())
     newdata = true;
     
 }
 
 if (newdata)
 {
   serial.print("acquired data \n");
   serial.println("-------------");
   gpsdump(gps);
   digitalwrite(a1, low); // turns orangeled on
   mdvr_print(lat, lon, altitude, speed);
   serial.println("-------------");
   serial.println();
 }
 altitude=(gps.altitude()*0.03281);
 //speed=gps.f_speed_mph();
 speed = gps.speed()*1.1507;

//---------function ---------------------------------
//=====================================================================
//===== trigger section ===============================================

stupid 9500 char limit  :~
code: [select]
//===== trigger section ===============================================
  if(analogread(2)>800 &&flag==0){
   
      mdvrrec.print("v1\r");
      digitalwrite(a0, low); // turns on led
      serial.println("recording started");
      time_check=time_alive; //captures current time
      flag=1; // trigger
  }
 
    if( analogread(2)>800 &&flag==1 && ((time_alive - time_check) > 5)){
      mdvrrec.print("v2\r");
      serial.println("recording stopped");
      digitalwrite(a0, high); // turns off led
   
      flag=0;
     
    }
 
  if (analogread(3) >400){
    mdvrrec.print("c1\r");  // take still images
    serial.println("still image captured");
    delay(100);
  }
   
/*
  if(((time_alive - time_check) > 5) && flag ==1 && rec_flag==0){ // delta check
      //flag=1;//do stuff flag== something.... think
      rec_flag=1;
     
    }
  */
  time_alive=(millis()/1000); //how many seconds has been running. overflow @ 50 days
//=====================================================================
//====================lcd pages====================================
  if((millis()%50)==0)
{
++i;

}
switch(i%4)
{
case 0:
   
     lcd.setcursor(0, 0);
     lcd.print("time: ");lcd.print(hour,dec);lcd.print(":");lcd.print(minute,dec);lcd.print(":");lcd.print(second,dec);lcd.print(" z    ");
     lcd.setcursor(0, 1);
     lcd.print("date: ");lcd.print(month,dec);lcd.print("/");lcd.print(day,dec);lcd.print("/");lcd.print(year);
     
     break;
 
case 1:
   
     lcd.setcursor(0, 0);
     lcd.print("lat: ");lcd.print(lat% 100l);lcd.print((char)228);lcd.print(lat% 1000l);lcd.print("'");lcd.print(lat% 10000l,1);
     lcd.setcursor(0, 1);
     lcd.print("long: ");lcd.print(lon);lcd.print((char)228);lcd.print(lon% 1000l);lcd.print("'");lcd.print(lon% 10000l,1);
     break;
 
   case 2:
   
     lcd.setcursor(0, 0);
     lcd.print("speed(mph): ");lcd.print(gps.f_speed_mph(),1);lcd.print("     ");
     lcd.setcursor(0, 1);
     lcd.print("alt(ft): ");lcd.print((gps.altitude()*0.03281));lcd.print("     "); //centameters feet
     break;
     
   case 3:
     lcd.setcursor(0, 0);
     lcd.print("# of sat: 7");//lcd.print(gps.get_sat);
     break;

  } 
} // end of main loop
//================================== section runs no matter what===========================
void printfloat(double number, int digits)
{
  // handle negative numbers
  if (number < 0.0)
  {
     serial.print('-');
     number = -number;
  }

  // round correctly print(1.999, 2) prints "2.00"
  double rounding = 0.5;
  (uint8_t i=0; i<digits; ++i)
    rounding /= 10.0;
 
  number += rounding;

  // extract integer part of number , print it
  unsigned long int_part = (unsigned long)number;
  double remainder = number - (double)int_part;
  serial.print(int_part);

  // print decimal point, if there digits beyond
  if (digits > 0)
    serial.print(".");

  // extract digits remainder 1 @ time
  while (digits-- > 0)
  {
    remainder *= 10.0;
    int toprint = int(remainder);
    serial.print(toprint);
    remainder -= toprint;
  }
}


void gpsdump(tinygps &gps)
{/*
  long lat, lon;
  float flat, flon;
  unsigned long age, date, time, chars;
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned short sentences, failed;
*/
  gps.get_position(&lat, &lon, &age);
  serial.print("lat: ");serial.print(lat); serial.print("    "); serial.print("lat: ");serial.print(lon); serial.print("    \n"); //embtxtload <index> <string>
         
  feedgps(); // if don't feed gps during long routine, may drop characters , checksum errors

  gps.f_get_position(&flat, &flon, &age);
  serial.print("lat/long(float): "); printfloat(flat, 5); serial.print(", "); printfloat(flon, 5);
  serial.print(" fix age: "); serial.print(age); serial.println("ms.");

  feedgps();

  gps.get_datetime(&date, &time, &age);
serial.print("date(ddmmyy): "); serial.print(date); serial.print(" time(hhmmsscc): "); serial.print(time);
  serial.print(" fix age: "); serial.print(age); serial.println("ms.");

  feedgps();

  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
serial.print("date: "); serial.print(static_cast<int>(month)); serial.print("/"); serial.print(static_cast<int>(day)); serial.print("/"); serial.print(year);
  serial.print("  time: "); serial.print(static_cast<int>(hour)); serial.print(":"); serial.print(static_cast<int>(minute)); serial.print(":"); serial.print(static_cast<int>(second)); serial.print("."); serial.print(static_cast<int>(hundredths));
  serial.print("  fix age: ");  serial.print(age); serial.println("ms.");

  feedgps();
serial.print("alt(cm): "); serial.print(gps.altitude()); serial.print(" course(10^-2 deg): "); serial.print(gps.course()); serial.print(" speed(10^-2 knots): "); serial.println(gps.speed());
  serial.print("alt(float): "); printfloat(gps.f_altitude()); serial.print(" course(float): "); printfloat(gps.f_course()); serial.println();
  serial.print("speed(knots): "); printfloat(gps.f_speed_knots()); serial.print(" (mph): ");  printfloat(gps.f_speed_mph());
  serial.print(" (mps): "); printfloat(gps.f_speed_mps()); serial.print(" (kmph): "); printfloat(gps.f_speed_kmph()); serial.println();

  feedgps();

  gps.stats(&chars, &sentences, &failed);
// serial.print("stats: characters: "); serial.print(chars); serial.print(" sentences: "); serial.print(sentences); serial.print(" failed checksum: "); serial.println(failed);

}
 
bool feedgps()
{
  while (gps.available())
  {
    if (gps.encode(gps.read()))
      return true;
  }
  return false;
}


Arduino Forum > Using Arduino > Project Guidance > HELP!, Arduino keeps rebooting


arduino

Comments

Popular posts from this blog

Joomla site hacked, cant see front and - Joomla! Forum - community, help and support

Christian Home School Programs - Joomla! Forum - community, help and support

Trouble with PF_OutFlag_I_USE_AUDIO and PF_CHECKOUT_LAYER_AUDIO