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)
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
Post a Comment