Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
GP2Y1010AU0F.cpp
00001 #include "mbed.h" 00002 00003 class GP2Y1010AU0F 00004 { 00005 public: 00006 GP2Y1010AU0F(PinName aout, PinName iled): _iled(iled), _aout(aout), _aout_at_no_dust(0.7) { 00007 }; 00008 00009 void measure() { 00010 _measurement_ready = false; 00011 _measure(); 00012 }; 00013 00014 bool getVoltage(float & value) { 00015 if (_measurement_ready == false) return NULL; 00016 else { 00017 float dust_density = 0; 00018 dust_density = ((float)_last_measurement)/(65535.0f/3.3f/9.25f); 00019 value = dust_density; 00020 return true; 00021 } 00022 }; // ug / m^3 00023 00024 float convertVoltageToMg(float voltage) { 00025 voltage -= _aout_at_no_dust; // [V] from 0 00026 voltage /= _dust_sensitivity; // [0.1mg] == [100ug] / m^3 00027 voltage *= 100.0f; 00028 return voltage; 00029 } 00030 00031 void tryTosetAoutAtNoDust(float newNoDustVoltage) { 00032 if (newNoDustVoltage < _aout_at_no_dust) 00033 _aout_at_no_dust = (newNoDustVoltage + 5*_aout_at_no_dust) / 6; 00034 // printf("Aout at no dust: %.3f\r\n", _aout_at_no_dust); 00035 } 00036 00037 float getAoutAtNoDust() { 00038 return _aout_at_no_dust; 00039 } 00040 00041 private: 00042 AnalogIn _aout; 00043 DigitalOut _iled; 00044 Timeout _turnILEDOffTimeout; 00045 Timeout _sampleAOUTTimeout; 00046 Timeout _measurementReadyTimeout; 00047 unsigned short _last_measurement; 00048 bool _measurement_ready; 00049 static const float _dust_sensitivity = 0.5; // [V] / [mg/m^3] 00050 float _aout_at_no_dust; // [V] ? 00051 00052 void _measure() { 00053 _sampleAOUTTimeout.attach(callback(this, &GP2Y1010AU0F::_sampleAOUT), .00028); 00054 _turnILEDOffTimeout.attach(callback(this, &GP2Y1010AU0F::_turnILEDOff), .00032); 00055 _measurementReadyTimeout.attach(callback(this, &GP2Y1010AU0F::_ready), .037); 00056 00057 _turnILEDOn(); 00058 }; 00059 void _turnILEDOn() { 00060 _iled.write(1); 00061 // pc.printf("O"); 00062 }; 00063 void _turnILEDOff() { 00064 _iled.write(0); 00065 00066 // pc.printf("C\r\n"); 00067 }; 00068 void _sampleAOUT() { 00069 _last_measurement = _aout.read_u16(); 00070 // pc.printf("S"); 00071 }; 00072 void _ready() { 00073 _measurement_ready = true; 00074 }; 00075 };
Generated on Fri Jul 15 2022 02:07:20 by
1.7.2