Hauptprogramm
Dependencies: ILI9340_Driver_Lib PM2_Libary Lib_DFPlayerMini
Feuchtigkeitssensor/Chirp.cpp@30:39a53ed11b7d, 2021-05-05 (annotated)
- Committer:
- ackerden
- Date:
- Wed May 05 15:27:28 2021 +0000
- Revision:
- 30:39a53ed11b7d
- Parent:
- 29:91df2c5fb297
;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ackerden | 27:bbcd157dcd63 | 1 | #include "mbed.h" |
ackerden | 27:bbcd157dcd63 | 2 | #include "Chirp.h" |
ackerden | 27:bbcd157dcd63 | 3 | |
ackerden | 27:bbcd157dcd63 | 4 | Chirp chirp(D14, D15); |
ackerden | 29:91df2c5fb297 | 5 | const int addr7bit = 0x48; // 7 bit I2C address |
ackerden | 29:91df2c5fb297 | 6 | const int addr8bit = 0x48 << 1; // 8bit I2C address, 0x90 |
ackerden | 27:bbcd157dcd63 | 7 | |
ackerden | 27:bbcd157dcd63 | 8 | //Chirp Docs are at https://github.com/Miceuz/i2c-moisture-sensor and https://www.tindie.com/products/miceuz/i2c-soil-moisture-sensor/ |
ackerden | 27:bbcd157dcd63 | 9 | void getResults(); |
ackerden | 27:bbcd157dcd63 | 10 | Chirp::Chirp(PinName sda, PinName scl, char slave_adr) |
ackerden | 27:bbcd157dcd63 | 11 | :i2c_p(new I2C(sda, scl)), i2c(*i2c_p), address(slave_adr) |
ackerden | 27:bbcd157dcd63 | 12 | { |
ackerden | 27:bbcd157dcd63 | 13 | i2c.frequency(10000); |
ackerden | 27:bbcd157dcd63 | 14 | |
ackerden | 27:bbcd157dcd63 | 15 | } |
ackerden | 27:bbcd157dcd63 | 16 | |
ackerden | 27:bbcd157dcd63 | 17 | float Chirp::getCapacitance(){ |
ackerden | 27:bbcd157dcd63 | 18 | i2c.frequency(10000); |
ackerden | 27:bbcd157dcd63 | 19 | short capacitance = 0; |
ackerden | 29:91df2c5fb297 | 20 | char i2cData[2]; |
ackerden | 29:91df2c5fb297 | 21 | |
ackerden | 29:91df2c5fb297 | 22 | char dataReg = 0; //Capacitance is stored in 2 bytes at address 0 |
ackerden | 29:91df2c5fb297 | 23 | char cmd[2]; |
ackerden | 27:bbcd157dcd63 | 24 | |
ackerden | 29:91df2c5fb297 | 25 | i2cData[0] = 0x01; |
ackerden | 29:91df2c5fb297 | 26 | i2cData[1] = 0x00; |
ackerden | 29:91df2c5fb297 | 27 | int test = i2c.write(addr8bit, cmd, 2); |
ackerden | 29:91df2c5fb297 | 28 | printf("%i\n\n", test); |
ackerden | 29:91df2c5fb297 | 29 | ThisThread::sleep_for(500); |
ackerden | 29:91df2c5fb297 | 30 | cmd[0] = 0x00; |
ackerden | 29:91df2c5fb297 | 31 | i2c.write(addr8bit, cmd, 1); |
ackerden | 29:91df2c5fb297 | 32 | i2c.read(addr8bit, cmd, 2); |
ackerden | 29:91df2c5fb297 | 33 | float tmp = (float((cmd[0] << 8) | cmd[1]) / 256.0); |
ackerden | 29:91df2c5fb297 | 34 | printf("Temp = %.2f\n", tmp); |
ackerden | 27:bbcd157dcd63 | 35 | |
ackerden | 27:bbcd157dcd63 | 36 | |
ackerden | 29:91df2c5fb297 | 37 | int master = i2c.write(address, &dataReg, 1); |
ackerden | 29:91df2c5fb297 | 38 | printf("%i\n\n", master); |
ackerden | 29:91df2c5fb297 | 39 | int success = i2c.read(address, i2cData, 2); |
ackerden | 29:91df2c5fb297 | 40 | printf("%i\n\n", success); |
ackerden | 29:91df2c5fb297 | 41 | |
ackerden | 29:91df2c5fb297 | 42 | if(success != 1) |
ackerden | 27:bbcd157dcd63 | 43 | return -1000000; |
ackerden | 27:bbcd157dcd63 | 44 | else |
ackerden | 27:bbcd157dcd63 | 45 | { |
ackerden | 27:bbcd157dcd63 | 46 | //I2C bytes are in different byte order, write into short bytes 0 and 1 in reverse order! |
ackerden | 27:bbcd157dcd63 | 47 | *((char*)&capacitance) = i2cData[1]; |
ackerden | 27:bbcd157dcd63 | 48 | *(((char*)(&capacitance)) + 1) = i2cData[0]; |
ackerden | 27:bbcd157dcd63 | 49 | return capacitance; |
ackerden | 27:bbcd157dcd63 | 50 | }} |
ackerden | 27:bbcd157dcd63 | 51 | |
ackerden | 27:bbcd157dcd63 | 52 | float Chirp::getTemperature(){ |
ackerden | 27:bbcd157dcd63 | 53 | i2c.frequency(10000); |
ackerden | 27:bbcd157dcd63 | 54 | short temperature = 0; |
ackerden | 27:bbcd157dcd63 | 55 | char i2cData[2]= {0}; |
ackerden | 27:bbcd157dcd63 | 56 | |
ackerden | 27:bbcd157dcd63 | 57 | |
ackerden | 27:bbcd157dcd63 | 58 | char dataReg = 4; //Temperature is stored in 2 bytes at address 5 |
ackerden | 29:91df2c5fb297 | 59 | int master = i2c.write(address, &dataReg, 1); |
ackerden | 29:91df2c5fb297 | 60 | printf("%i\n\n", master); |
ackerden | 27:bbcd157dcd63 | 61 | int success = i2c.read(address, i2cData, 2); |
ackerden | 27:bbcd157dcd63 | 62 | printf("%i\n\n", success); |
ackerden | 27:bbcd157dcd63 | 63 | |
ackerden | 27:bbcd157dcd63 | 64 | |
ackerden | 29:91df2c5fb297 | 65 | if(success != 1) |
ackerden | 27:bbcd157dcd63 | 66 | return -1000000; |
ackerden | 27:bbcd157dcd63 | 67 | else |
ackerden | 27:bbcd157dcd63 | 68 | { |
ackerden | 27:bbcd157dcd63 | 69 | *((char*)&temperature) = i2cData[1]; |
ackerden | 27:bbcd157dcd63 | 70 | *(((char*)(&temperature)) + 1) = i2cData[0]; |
ackerden | 27:bbcd157dcd63 | 71 | return (float) temperature / 10.0; |
ackerden | 27:bbcd157dcd63 | 72 | } } |
ackerden | 27:bbcd157dcd63 | 73 | |
ackerden | 27:bbcd157dcd63 | 74 | |
ackerden | 27:bbcd157dcd63 | 75 | void getResults(){ |
ackerden | 27:bbcd157dcd63 | 76 | printf("test\n\n"); |
ackerden | 27:bbcd157dcd63 | 77 | printf("Capacitance = %.2f\n", chirp.getCapacitance()); |
ackerden | 27:bbcd157dcd63 | 78 | printf("Temperatur = %.2f\n", chirp.getTemperature()); |
ackerden | 27:bbcd157dcd63 | 79 | } |