/*
  DigitalReadSerial
 Reads a digital input on pin 2, prints the result to the serial monitor

 This example code is in the public domain.
 */

// digital pin 2 has a pushbutton attached to it. Give it a name:
//int pushButton = 2;

int gpstime = random(100,1000);
int latitude = random(0, 100);
int longitude = random(0,100);
int fixquality = random(-0,1);
int numsats = random(10,16);
int hozaccuracy= random(5,50);
int altitude = random(1000,3000);
int height = altitude + 100;
int timesinceupdate = random(10,1000);
int DGPS = random(1,2);
int checksum =random(0,8);

int exacttime = gpstime;
int energy1 = random(10000,20000);
int energy2 = random(10050,19950);
int altitudereal = altitude + random(-100,100);
int altaccuracy = random(1,100);

int humidity = random (60,70);
int humaccuracy = random (1,20);


int xgrav = random(0,10);
int ygrav = random(0,10);
int zgrav = random(0,10);

int mxgrav = random(0,10);
int mygrav = random(0,10);
int mzgrav = random(0,10);

int tempval1 = random(10,35);
int tempval2 = tempval1 + 1;

int uptime = random(1,1000);

int deviceid = random(1,10000);

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(115200);

  }

// the loop routine runs over and over again forever:
void loop() {
  // read the input pin:
  //int buttonState = digitalRead(pushButton);
  // print out the state of the button:
  Serial.println("{");
  Serial.println("    \"GPS data\": {");
  Serial.print("      \"GPSTime\": ");
  Serial.print(gpstime);
  Serial.println(','); 
  Serial.print("      \"Latitude\": ");
  Serial.print(latitude);
  Serial.println(','); 
  Serial.print("      \"Longitude\": ");
  Serial.print(longitude);
  Serial.println(',');
  Serial.print("      \"FixQuality\": ");
  Serial.print(fixquality);
  Serial.println(',');
  Serial.print("      \"Numberofsats\": ");
  Serial.print(numsats);
  Serial.println(',');
  Serial.print("      \"HorizontalAccuracy\": ");
  Serial.print(hozaccuracy);
  Serial.println(',');
  Serial.print("      \"Altitude\": ");
  Serial.print(altitude);
  Serial.println(',');
  Serial.print("      \"Height\": ");
  Serial.print(height);
  Serial.println(',');
  Serial.print("      \"TimeSinceUpdate\": ");
  Serial.print(timesinceupdate);
  Serial.println(',');
  Serial.print("      \"DGPS\": ");
  Serial.print(DGPS);
  Serial.println(',');
  Serial.print("      \"Checksum\": ");
  Serial.print(checksum);
  Serial.println(); 
  Serial.println("    },");
  

  Serial.print("    \"Timing\": ");
  Serial.print(exacttime);
  Serial.println(','); 
  
  Serial.println("    \"Energy\": {");
  Serial.print("      \"Energy1\":[ ");
  Serial.print(energy1);
  Serial.print(',');
    Serial.print(energy1);
  Serial.print(',');
    Serial.print(energy1);
  Serial.print(',');
    Serial.print(energy1);
  Serial.print(',');
    Serial.print(energy1);
  Serial.print(',');
    Serial.print(energy1);
  Serial.print(',');
    Serial.print(energy1);
  Serial.print(',');
    Serial.print(energy1);
  Serial.print(',');
    Serial.print(energy1);
  Serial.print(',');
    Serial.print(energy1);
  Serial.println("],");  
  Serial.print("      \"Energy2\":[ ");
  Serial.print(energy2);
  Serial.print(',');
    Serial.print(energy2);
  Serial.print(',');
    Serial.print(energy2);
  Serial.print(',');
    Serial.print(energy2);
  Serial.print(',');
    Serial.print(energy2);
  Serial.print(',');
    Serial.print(energy2);
  Serial.print(',');
    Serial.print(energy2);
  Serial.print(',');
    Serial.print(energy2);
  Serial.print(',');
    Serial.print(energy2);
  Serial.print(',');
    Serial.print(energy2);    
  Serial.println(']');
    Serial.println("    },");

  Serial.print("    \"Altitude\": "); 
  Serial.print(altitudereal);
  Serial.println(",");

  Serial.print("    \"Humidity\": "); 
  Serial.print(humidity);
  Serial.println(",");

  Serial.println("    \"GravitationalOrientation\": {"); 
  Serial.print("     \"Xaxis\": ");
  Serial.print(xgrav);
  Serial.println(",");
  Serial.print("     \"Yaxis\": ");
  Serial.print(ygrav);
  Serial.println(",");
  Serial.print("     \"Zaxis\": ");
  Serial.print(zgrav);
  Serial.println();
  Serial.println("    },");  

  Serial.println("    \"MagneticOrientation\": {"); 
  Serial.print("     \"Xaxis\": ");
  Serial.print(mxgrav);
  Serial.println(",");
  Serial.print("     \"Yaxis\": ");
  Serial.print(mygrav);
  Serial.println(",");
  Serial.print("     \"Zaxis\": ");
  Serial.print(mzgrav);
  Serial.println();
  Serial.println("    },");

  Serial.println("    \"Temperature\": {"); 
  Serial.print("     \"Temperature1\": ");
  Serial.print(tempval1);
  Serial.println(",");
  Serial.print("     \"Temperature2\": ");
  Serial.print(tempval2);
  Serial.println();
  Serial.println("    },");


  Serial.print("    \"DeviceUptime\": "); 
  Serial.print(uptime);
  Serial.println(",");
  
  Serial.print("    \"DeviceID\": "); 
  Serial.print(deviceid);
  Serial.println();

  Serial.println("}");

  
  //increment and modify things
  gpstime++;
  exacttime++;
  energy1= energy1 + random(-100,100);
  energy2= energy2 + random(-100,100);
  altitudereal = altitudereal + random(-10,10);
  humidity=random(60,70);
  uptime++;
  
  delay(1);        // delay in between reads for stability
}


