diff --git a/earthquake/earthquake.ino b/earthquake/earthquake.ino
index be4bab14aa196709e7d934c45de8079485bfb4bc..89eb10abfe89b9c92db1bbe5ea1b64e3689d7d4b 100644
--- a/earthquake/earthquake.ino
+++ b/earthquake/earthquake.ino
@@ -5,40 +5,52 @@
 #include "Wire.h"
 #endif
 
-int inPin = 8;         // the number of the input pin
-int outPin = 12;       // the number of the output pin
+/*--------------------
+ * WiFi Configuration
+ *--------------------*/
 
-int state = HIGH;      // the current state of the output pin
-int reading;           // the current reading from the input pin
-int previous = LOW;    // the previous reading from the input pin
+#define SSID "hm" //SSID
+#define PASS "abcdefgh" //Password
 
-// the follow variables are long's because the time, measured in miliseconds,
-// will quickly become a bigger number than can be stored in an int.
-long time = 0;         // the last time the output pin was toggled
-long debounce = 200;   // the debounce time, increase if the output flickers
+/*--------------------
+ * Pin const
+ *--------------------*/
 
-//LCD
-LiquidCrystal lcd(0, 1, 8, 9, 10, 11); /// REGISTER SELECT PIN,ENABLE PIN,D4 PIN,D5 PIN, D6 PIN, D7 PIN
+// Toggle button
+const int inPin = 8;        // the number of the input pin
+const int outPin = 12;      // the number of the output pin
+const int ledPin = 5;       // LED connected to digital pin 5
 
-//SEVEN SEGMENT
-const int latchPin = 7; //to IC pin 12
-const int dataPin = 3; //to IC pin 14
-const int clockPin = 4; //to IC pin 11
+// 7 segment
+const int latchPin = 7;     //to IC pin 12
+const int dataPin = 3;      //to IC pin 14
+const int clockPin = 4;     //to IC pin 11
 const int seismicPin = A0;
+
+/*--------------------
+ * Global variable
+ * --------------------*/
+
+// Toggle button
+int state = HIGH;           // the current state of the output pin
+int reading;                // the current reading from the input pin
+int previous = LOW;         // the previous reading from the input pin
+long time = 0;              // the last time the output pin was toggled
+long debounce = 200;        // the debounce time, increase if the output flickers
+
+// LCD
+// LiquidCrystal lcd(0, 1, 8, 9, 10, 11); /// REGISTER SELECT PIN,ENABLE PIN,D4 PIN,D5 PIN, D6 PIN, D7 PIN
+
+// Seven Segment
 const byte digit[] = {64, 121, 36, 48, 25, 18, 2, 120, 0, 16};
 byte magnitude;
 int lastSeismoDetected;
 int loopNumber;
 
-//ACCELEROMETER/GYRO
+// Gyro Sensor
 MPU6050 mpu;
-#define OUTPUT_READABLE_WORLDACCEL
-#define INTERRUPT_PIN 2  // use pin 2 on Arduino Uno & most boards
-#define LED_PIN 13 // (Arduino is 13, Teensy is 11, Teensy++ is 6)
-#define WAVE_TIMEOUT 100
-#define TIME_WAVE_STORE 100
-int waveDuration = 0;
-bool blinkState = false;
+#define INTERRUPT_PIN 2       // use pin 2 on Arduino Uno
+#define TIME_WAVE_STORE 100   //
 // MPU control/status vars
 bool dmpReady = false;  // set true if DMP init was successful
 uint8_t mpuIntStatus;   // holds actual interrupt status byte from MPU
@@ -51,61 +63,163 @@ Quaternion q;           // [w, x, y, z]         quaternion container
 VectorInt16 aa;         // [x, y, z]            accel sensor measurements
 VectorInt16 aaReal;     // [x, y, z]            gravity-free accel sensor measurements
 VectorInt16 aaWorld;    // [x, y, z]            world-frame accel sensor measurements
-VectorInt16 aaWorldPrev[TIME_WAVE_STORE];    // [x, y, z]            world-frame accel sensor measurements
+VectorInt16 aaWorldPrev[TIME_WAVE_STORE];
 VectorFloat gravity;    // [x, y, z]            gravity vector
 float euler[3];         // [psi, theta, phi]    Euler angle container
 float ypr[3];           // [yaw, pitch, roll]   yaw/pitch/roll container and gravity vector
-bool isChangeStore[TIME_WAVE_STORE];
-int periode;
-int frequency;
+bool isChangeStore[TIME_WAVE_STORE];  // Store is has a change within TIME_WAVE_STORE time before
 double amplitude;
+int magnitudeC;
 //INTERRUPT DETECTION ROUTINE
-volatile bool mpuInterrupt = false;     // indicates whether MPU interrupt pin has gone high
+volatile bool mpuInterrupt = false; // indicates whether MPU interrupt pin has gone high
+
+/*--------------------
+ * Declaration
+ *--------------------*/
+
+boolean connectWiFi();
+void dmpDataReady();
+void toggleButtonInit();
+void sevenSegmentInit();
+void lcdInit();
+void gyroInit();
+void changeShift();
+bool isChange();
+double magnitudeConvert();
+void displaySevenSegment(int);
+void ledActive();
+void ledDeactive();
+void gyroOn();
+void gyroOff();
+
+void setup() {
+  
+  Serial.begin(115200);
+  while(!Serial);
+  Serial.println("AT");
+
+  while(!connectWiFi());
+  Serial.println("CONNECT");
+  
+  // Toggle button
+  toggleButtonInit();
+  
+  // Seven Segment
+  sevenSegmentInit();
+
+  lastSeismoDetected = -10000;
+  loopNumber = 0;
+  amplitude = 0;
+
+  // LCD
+  lcdInit();
+  
+  // Gyro Sensor
+  gyroInit();
+
+}
+
+void loop() {
+  loopNumber++;
+
+  //  //LCD
+  //  lcd.print("   circuit digest");//print name
+  //  lcd.setCursor(0, 1); // set the cursor to column 0, line 2
+  //  lcd.print("ic tronic");//print name
+  //  delay(250);//delay of 0.75sec
+  //  lcd.scrollDisplayLeft();//shifting data on LCD
+  //  lcd.setCursor(0, 0);// set the cursor to column 0, line1
+
+  //  int measurement = analogRead(seismicPin);
+  //  float seismoMag = measurement / 2000000000.0 * 5.0;
+  //  Serial.print("measurment = "); Serial.println(measurement);
+  //  Serial.print("magnitude = "); Serial.println(seismoMag);
+  //  if (seismoMag > 2 && loopNumber - lastSeismoDetected > 10000) {
+  //    lastSeismoDetected = loopNumber;
+  //    // detected
+  //    // send post to http://jauhararifin.cf:8888/api/earthquakes
+  //    // header : content-type = application/x-www-form-urlencoded
+  //    // data = "lat=1&long=1&date=2016-12-06 PM 22:03:36.000Z&strength=" + seismoMag
+  //  }
+  reading = digitalRead(inPin);
+  if (reading == HIGH && previous == LOW && millis() - time > debounce) {
+    if (state == HIGH)
+      state = LOW;
+    else
+      state = HIGH;
+    time = millis();    
+  }
+  digitalWrite(outPin, state);
+  previous = reading;
+
+  if(state == HIGH){
+    gyroOn();
+  } else {
+    gyroOff();
+  }
+  
+}
+
+
+/*--------------------
+ * Implementation
+ *--------------------*/
+
+boolean connectWiFi() {
+  Serial.println("AT+CWMODE=1");
+  delay(2000);
+  String cmd = "AT+CWJAP=\"";
+  cmd += SSID;
+  cmd += "\",\"";
+  cmd += PASS;
+  cmd += "\"";
+  Serial.println(cmd);
+  delay(5000);
+  if (Serial.find((char*)"OK"))
+  {
+    return true;
+  }
+  else
+  {
+    return false;
+  }
+}
+
 void dmpDataReady() {
   mpuInterrupt = true;
 }
 
-void setup() {
+
+void toggleButtonInit(){
   pinMode(inPin, INPUT);
   pinMode(outPin, OUTPUT);
-  
-  //SEVEN SEGMENT
+}
+
+void sevenSegmentInit(){
   pinMode(latchPin, OUTPUT);
   pinMode(dataPin, OUTPUT);
   pinMode(clockPin, OUTPUT);
   magnitude = 0;
+}
 
-  lastSeismoDetected = -10000;
-  loopNumber = 0;
-  periode = 0;
-  frequency = 0;
-  amplitude = 0;
+void lcdInit(){}
 
-  //LCD
-  lcd.begin(16, 2);
+void gyroInit(){
   
-  //ACCELEROMETER/GYRO
+  magnitudeC = 0;
   // join I2C bus (I2Cdev library doesn't do this automatically)
-#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
-  Wire.begin();
-  Wire.setClock(400000); // 400kHz I2C clock. Comment this line if having compilation difficulties
-#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
-  Fastwire::setup(400, true);
-#endif
-  // initialize serial communication
-  // (115200 chosen because it is required for Teapot Demo output, but it's
-  // really up to you depending on your project)
-  Serial.begin(115200);
-  while (!Serial); // wait for Leonardo enumeration, others continue immediately
-  // NOTE: 8MHz or slower host processors, like the Teensy @ 3.3V or Arduino
-  // Pro Mini running at 3.3V, cannot handle this baud rate reliably due to
-  // the baud timing being too misaligned with processor ticks. You must use
-  // 38400 or slower in these cases, or use some kind of external separate
-  // crystal solution for the UART timer.
+  #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
+    Wire.begin();
+    Wire.setClock(400000);  // 400kHz I2C clock. Comment this line if having compilation difficulties
+  #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
+    Fastwire::setup(400, true);
+  #endif
+  
   // initialize device
   Serial.println(F("Initializing I2C devices..."));
   mpu.initialize();
   pinMode(INTERRUPT_PIN, INPUT);
+  
   // verify connection
   Serial.println(F("Testing device connections..."));
   Serial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed"));
@@ -113,7 +227,7 @@ void setup() {
   // load and configure the DMP
   Serial.println(F("Initializing DMP..."));
   devStatus = mpu.dmpInitialize();
-  // supply your own gyro offsets here, scaled for min sensitivity
+
   mpu.setXGyroOffset(220);
   mpu.setYGyroOffset(76);
   mpu.setZGyroOffset(-85);
@@ -144,9 +258,6 @@ void setup() {
     Serial.print(devStatus);
     Serial.println(F(")"));
   }
-  // configure LED for output
-  pinMode(LED_PIN, OUTPUT);
-
 }
 
 void changeShift() {
@@ -157,6 +268,7 @@ void changeShift() {
   aaWorldPrev[TIME_WAVE_STORE-1] = aaWorld;
 }
 
+
 bool isChange(){
   int offset = 200;
   int i;
@@ -175,9 +287,8 @@ bool isChange(){
 }
 
 double magnitudeConvert() {
-  // assume the epicentral distance is 1km
+  // assume the epicentral distance is 0.5km
   return log10(amplitude)-0.83+1.73*log10(0.5);
-//  return log10(amplitude)-2.48+2.76*log10(0.5);
 }
 
 void displaySevenSegment(int val){
@@ -186,47 +297,35 @@ void displaySevenSegment(int val){
     digitalWrite(latchPin, HIGH);
 }
 
-void accelerometerOn(){
-  //ACCELERO/GYRO
-  // if programming failed, don't try to do anything
+void ledActive(){
+  Serial.print("LED : ");
+  Serial.println(magnitudeC);
+  int fadeValue = floor(((float)magnitudeC/10)*255);
+  Serial.print("Fade Value : "); Serial.println(fadeValue);
+  analogWrite(ledPin, fadeValue);
+}
+
+void ledDeactive(){
+  analogWrite(ledPin, 0);
+}
+
+void gyroOn(){
   if (!dmpReady) return;
-  // wait for MPU interrupt or extra packet(s) available
-  while (!mpuInterrupt && fifoCount < packetSize) {
-    // other program behavior stuff here
-    // .
-    // .
-    // .
-    // if you are really paranoid you can frequently test in between other
-    // stuff to see if mpuInterrupt is true, and if so, "break;" from the
-    // while() loop to immediately process the MPU data
-    // .
-    // .
-    // .
-  }
-  // reset interrupt flag and get INT_STATUS byte
+  while (!mpuInterrupt && fifoCount < packetSize);    // wait for MPU interrupt or extra packet(s) available
+  
   mpuInterrupt = false;
   mpuIntStatus = mpu.getIntStatus();
-  // get current FIFO count
   fifoCount = mpu.getFIFOCount();
-  // check for overflow (this should never happen unless our code is too inefficient)
-  if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
-    // reset so we can continue cleanly
+  if ((mpuIntStatus & 0x10) || fifoCount == 1024) {   // check for overflow 
     mpu.resetFIFO();
     Serial.println(F("FIFO overflow!"));
-    // otherwise, check for DMP data ready interrupt (this should happen frequently)
   } else if (mpuIntStatus & 0x02) {
-    // wait for correct available data length, should be a VERY short wait
-    while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();
-
-    // read a packet from FIFO
-    mpu.getFIFOBytes(fifoBuffer, packetSize);
+    while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();  // wait for correct available data length, should be a VERY short wait
 
-    // track FIFO count here in case there is > 1 packet available
-    // (this lets us immediately read more without waiting for an interrupt)
+    mpu.getFIFOBytes(fifoBuffer, packetSize);         // read a packet from FIFO
     fifoCount -= packetSize;
 
-    // display initial world-frame acceleration, adjusted to remove gravity
-    // and rotated based on known orientation from quaternion
+    // display initial world-frame acceleration, adjusted to remove gravity and rotated based on known orientation from quaternion
     mpu.dmpGetQuaternion(&q, fifoBuffer);
     mpu.dmpGetAccel(&aa, fifoBuffer);
     mpu.dmpGetGravity(&gravity, &q);
@@ -242,69 +341,21 @@ void accelerometerOn(){
     // blink LED to indicate activity
     changeShift();
     bool check = isChange();
-    digitalWrite(LED_PIN, check);
     if(check){
-      int magnitudeC = (int) magnitudeConvert();
+      magnitudeC = (int) magnitudeConvert();
       Serial.println(amplitude);
       Serial.println(magnitudeC);
       displaySevenSegment(magnitudeC%10);
+      ledActive();
     } else {
+      ledDeactive();
       amplitude = 0;
       displaySevenSegment(0);
     }
   }
 }
 
-void accelerometerOff(){
+void gyroOff(){
   displaySevenSegment(0);
-  digitalWrite(LED_PIN, LOW);
-}
-
-void loop() {
-  loopNumber++;
-
-  //  //SEVEN SEGMENT
-  //  digitalWrite(latchPin, LOW);
-  //  shiftOut(dataPin, clockPin, MSBFIRST, digit[9]);
-  //  digitalWrite(latchPin, HIGH);
-  //  magnitude = (magnitude+1)%10;
-  //  delay(250);
-
-  //  //LCD
-  //  lcd.print("   circuit digest");//print name
-  //  lcd.setCursor(0, 1); // set the cursor to column 0, line 2
-  //  lcd.print("ic tronic");//print name
-  //  delay(250);//delay of 0.75sec
-  //  lcd.scrollDisplayLeft();//shifting data on LCD
-  //  lcd.setCursor(0, 0);// set the cursor to column 0, line1
-
-  //  int measurement = analogRead(seismicPin);
-  //  float seismoMag = measurement / 2000000000.0 * 5.0;
-  //  Serial.print("measurment = "); Serial.println(measurement);
-  //  Serial.print("magnitude = "); Serial.println(seismoMag);
-  //  if (seismoMag > 2 && loopNumber - lastSeismoDetected > 10000) {
-  //    lastSeismoDetected = loopNumber;
-  //    // detected
-  //    // send post to http://jauhararifin.cf:8888/api/earthquakes
-  //    // header : content-type = application/x-www-form-urlencoded
-  //    // data = "lat=1&long=1&date=2016-12-06 PM 22:03:36.000Z&strength=" + seismoMag
-  //  }
-  reading = digitalRead(inPin);
-  if (reading == HIGH && previous == LOW && millis() - time > debounce) {
-    if (state == HIGH)
-      state = LOW;
-    else
-      state = HIGH;
-
-    time = millis();    
-  }
-  digitalWrite(outPin, state);
-  previous = reading;
-
-  if(state == HIGH){
-    accelerometerOn();
-  } else {
-    accelerometerOff();
-  }
-  
+  ledDeactive();
 }