Scientific task box V1
Dependents: Scientific_RTOS Scientific_RTOS
BOX.cpp@2:f8120bb54b69, 2019-06-10 (annotated)
- Committer:
- Alessio_Zaino
- Date:
- Mon Jun 10 12:49:50 2019 +0000
- Revision:
- 2:f8120bb54b69
- Parent:
- 0:01deb85101c9
- Child:
- 3:442e7d2ab496
still developing
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Alessio_Zaino | 0:01deb85101c9 | 1 | #include "BOX.h" |
Alessio_Zaino | 0:01deb85101c9 | 2 | |
Alessio_Zaino | 2:f8120bb54b69 | 3 | BOX::BOX (PinName pinCLK_HX711, PinName pinDAT_HX711, PinName pin_temp, PinName pin_cond, int HX711_coefficent):ds1820(pin_temp),balance(pinDAT_HX711, pinCLK_HX711) |
Alessio_Zaino | 0:01deb85101c9 | 4 | { |
Alessio_Zaino | 0:01deb85101c9 | 5 | _pinCLK = pinCLK_HX711; |
Alessio_Zaino | 0:01deb85101c9 | 6 | _pinDAT = pinDAT_HX711; |
Alessio_Zaino | 0:01deb85101c9 | 7 | _pintemp = pin_temp; |
Alessio_Zaino | 0:01deb85101c9 | 8 | _pincond = pin_cond; |
Alessio_Zaino | 0:01deb85101c9 | 9 | _coefficent = HX711_coefficent; |
Alessio_Zaino | 0:01deb85101c9 | 10 | |
Alessio_Zaino | 0:01deb85101c9 | 11 | |
Alessio_Zaino | 0:01deb85101c9 | 12 | } |
Alessio_Zaino | 0:01deb85101c9 | 13 | |
Alessio_Zaino | 2:f8120bb54b69 | 14 | |
Alessio_Zaino | 2:f8120bb54b69 | 15 | |
Alessio_Zaino | 2:f8120bb54b69 | 16 | |
Alessio_Zaino | 2:f8120bb54b69 | 17 | |
Alessio_Zaino | 2:f8120bb54b69 | 18 | BOX::~BOX(){} |
Alessio_Zaino | 2:f8120bb54b69 | 19 | |
Alessio_Zaino | 2:f8120bb54b69 | 20 | |
Alessio_Zaino | 2:f8120bb54b69 | 21 | void BOX::initialize(){ |
Alessio_Zaino | 2:f8120bb54b69 | 22 | |
Alessio_Zaino | 2:f8120bb54b69 | 23 | check=ds1820.begin(); |
Alessio_Zaino | 2:f8120bb54b69 | 24 | |
Alessio_Zaino | 2:f8120bb54b69 | 25 | } |
Alessio_Zaino | 0:01deb85101c9 | 26 | |
Alessio_Zaino | 0:01deb85101c9 | 27 | float BOX::get_temp() |
Alessio_Zaino | 0:01deb85101c9 | 28 | { |
Alessio_Zaino | 2:f8120bb54b69 | 29 | int result=0; |
Alessio_Zaino | 2:f8120bb54b69 | 30 | float temp=0; |
Alessio_Zaino | 2:f8120bb54b69 | 31 | ds1820.startConversion(); // start temperature conversion from analog to digital |
Alessio_Zaino | 2:f8120bb54b69 | 32 | wait(1.0); // let DS1820 complete the temperature conversion |
Alessio_Zaino | 2:f8120bb54b69 | 33 | result = ds1820.read(temp); // read temperature from DS1820 and perform cyclic redundancy check (CRC) |
Alessio_Zaino | 2:f8120bb54b69 | 34 | switch (result) { |
Alessio_Zaino | 2:f8120bb54b69 | 35 | case 0: // no errors -> 'temp' contains the value of measured temperature |
Alessio_Zaino | 2:f8120bb54b69 | 36 | |
Alessio_Zaino | 2:f8120bb54b69 | 37 | break; |
Alessio_Zaino | 2:f8120bb54b69 | 38 | |
Alessio_Zaino | 2:f8120bb54b69 | 39 | case 1: // no sensor present -> 'temp' was not updated |
Alessio_Zaino | 2:f8120bb54b69 | 40 | printf("no sensor present\n\r"); |
Alessio_Zaino | 2:f8120bb54b69 | 41 | break; |
Alessio_Zaino | 2:f8120bb54b69 | 42 | |
Alessio_Zaino | 2:f8120bb54b69 | 43 | case 2: // CRC error -> 'temp' was not updated |
Alessio_Zaino | 2:f8120bb54b69 | 44 | printf("CRC error\r\n"); |
Alessio_Zaino | 2:f8120bb54b69 | 45 | |
Alessio_Zaino | 2:f8120bb54b69 | 46 | default: |
Alessio_Zaino | 2:f8120bb54b69 | 47 | break; |
Alessio_Zaino | 2:f8120bb54b69 | 48 | |
Alessio_Zaino | 2:f8120bb54b69 | 49 | |
Alessio_Zaino | 2:f8120bb54b69 | 50 | } |
Alessio_Zaino | 2:f8120bb54b69 | 51 | |
Alessio_Zaino | 2:f8120bb54b69 | 52 | |
Alessio_Zaino | 2:f8120bb54b69 | 53 | return temp; |
Alessio_Zaino | 0:01deb85101c9 | 54 | } |
Alessio_Zaino | 0:01deb85101c9 | 55 | |
Alessio_Zaino | 2:f8120bb54b69 | 56 | |
Alessio_Zaino | 2:f8120bb54b69 | 57 | |
Alessio_Zaino | 0:01deb85101c9 | 58 | int BOX::get_resistance() |
Alessio_Zaino | 0:01deb85101c9 | 59 | { |
Alessio_Zaino | 0:01deb85101c9 | 60 | AnalogIn cond_value(_pincond); // reads voltage on the conductimeter pin. |
Alessio_Zaino | 0:01deb85101c9 | 61 | float meas_v; |
Alessio_Zaino | 0:01deb85101c9 | 62 | float current; |
Alessio_Zaino | 0:01deb85101c9 | 63 | float resistance; |
Alessio_Zaino | 0:01deb85101c9 | 64 | _tmp = 0; |
Alessio_Zaino | 0:01deb85101c9 | 65 | for(int i = 0; i < 20; i++) |
Alessio_Zaino | 0:01deb85101c9 | 66 | { |
Alessio_Zaino | 0:01deb85101c9 | 67 | meas_v = cond_value.read(); // Read the analog input value (value from 0.0 to 1.0 = full ADC conversion range) |
Alessio_Zaino | 0:01deb85101c9 | 68 | current = (1 - meas_v) / (2000000); // kvl and V/R to get current |
Alessio_Zaino | 0:01deb85101c9 | 69 | _tmp = (meas_v / current); // Ohm law gives us the soil resistence |
Alessio_Zaino | 0:01deb85101c9 | 70 | resistance = resistance + _tmp; |
Alessio_Zaino | 0:01deb85101c9 | 71 | } |
Alessio_Zaino | 0:01deb85101c9 | 72 | return (int) (resistance / 20); |
Alessio_Zaino | 0:01deb85101c9 | 73 | } |
Alessio_Zaino | 0:01deb85101c9 | 74 | |
Alessio_Zaino | 0:01deb85101c9 | 75 | void BOX::tare(unsigned char times) |
Alessio_Zaino | 0:01deb85101c9 | 76 | { |
Alessio_Zaino | 0:01deb85101c9 | 77 | balance.setTare(balance.averageValue(times)); |
Alessio_Zaino | 0:01deb85101c9 | 78 | } |
Alessio_Zaino | 0:01deb85101c9 | 79 | |
Alessio_Zaino | 0:01deb85101c9 | 80 | int BOX::get_weight() |
Alessio_Zaino | 0:01deb85101c9 | 81 | { |
Alessio_Zaino | 0:01deb85101c9 | 82 | return (int) (balance.getGram() / _coefficent); |
Alessio_Zaino | 0:01deb85101c9 | 83 | } |