//====================================================================
//  GENERAL FUNCTION SECTION
//====================================================================
//  I2C DECIVES SCANNER
//--------------------------------------------------------------------

  void scanI2C() 
  {
    byte error, address;
    int nDevices;
  
    Serial.println(" -> Scanning I2C Devices ...");
  
    nDevices = 0;
    for(address = 1; address < 127; address++ ) 
    {
      // The i2c_scanner uses the return value of
      // the Write.endTransmisstion to see if
      // a device did acknowledge to the address.
      Wire.beginTransmission(address);
      error = Wire.endTransmission();
  
      if (error == 0)
      {
        Serial.print(" --> Device Found At Address 0x");
        if (address<16) 
          Serial.print("0");
        Serial.print(address,HEX);
        Serial.println("  !");
  
        nDevices++;
      }
      else if (error==4) 
      {
        Serial.print(" --> Unknown error at address 0x");
        if (address<16) 
          Serial.print("0");
        Serial.println(address,HEX);
      }    
    }
    if (nDevices == 0)
      Serial.println(" --> No I2C devices found\n");
    else
      Serial.println(" --> done");
  }

//--------------------------------------------------------------------
//  Float Number Mapping Function
//--------------------------------------------------------------------
  
  double mapf(double val, double in_min, double in_max, double out_min, double out_max) {
    return (val - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
  }
