圧力監視と制御
Dependencies: ads1115_test DS1820_HelloWorld IM920
main.cpp@2:32697bf64b6a, 2022-03-09 (annotated)
- Committer:
- nakumur
- Date:
- Wed Mar 09 05:56:53 2022 +0000
- Revision:
- 2:32697bf64b6a
- Parent:
- 0:c17f6898d7a7
a
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nakumur | 0:c17f6898d7a7 | 1 | |
nakumur | 0:c17f6898d7a7 | 2 | #include "mbed.h" |
nakumur | 0:c17f6898d7a7 | 3 | #include "IM920.h" |
nakumur | 0:c17f6898d7a7 | 4 | #include "DS1820.h" |
nakumur | 0:c17f6898d7a7 | 5 | #include "Adafruit_ADS1015.h" |
nakumur | 0:c17f6898d7a7 | 6 | |
nakumur | 0:c17f6898d7a7 | 7 | #define ADS1115_ADDR 0b1001000 |
nakumur | 0:c17f6898d7a7 | 8 | |
nakumur | 0:c17f6898d7a7 | 9 | |
nakumur | 0:c17f6898d7a7 | 10 | //コンストラクタ------------------------------------------------------------------ |
nakumur | 0:c17f6898d7a7 | 11 | Serial pc(USBTX, USBRX, 115200); |
nakumur | 0:c17f6898d7a7 | 12 | Serial im920_serial(p28, p27, 115200); |
nakumur | 0:c17f6898d7a7 | 13 | |
nakumur | 0:c17f6898d7a7 | 14 | IM920 im920(im920_serial, pc, 115200); |
nakumur | 0:c17f6898d7a7 | 15 | DigitalIn im920_busy(p29); |
nakumur | 0:c17f6898d7a7 | 16 | |
nakumur | 0:c17f6898d7a7 | 17 | DigitalOut kettle(p18); |
nakumur | 0:c17f6898d7a7 | 18 | DigitalOut pump(p19); |
nakumur | 0:c17f6898d7a7 | 19 | |
nakumur | 0:c17f6898d7a7 | 20 | DS1820 ds1820(p30); |
nakumur | 0:c17f6898d7a7 | 21 | |
nakumur | 0:c17f6898d7a7 | 22 | I2C m_i2c(p9, p10); |
nakumur | 0:c17f6898d7a7 | 23 | Adafruit_ADS1115 ads1115(&m_i2c, ADS1115_ADDR); |
nakumur | 0:c17f6898d7a7 | 24 | //------------------------------------------------------------------------------ |
nakumur | 0:c17f6898d7a7 | 25 | |
nakumur | 0:c17f6898d7a7 | 26 | //変数--------------------------------------------------------------------------- |
nakumur | 0:c17f6898d7a7 | 27 | int pump_state = 0; |
nakumur | 0:c17f6898d7a7 | 28 | int kettle_state = 0; |
nakumur | 0:c17f6898d7a7 | 29 | float temp; |
nakumur | 0:c17f6898d7a7 | 30 | int pres_bit; |
nakumur | 0:c17f6898d7a7 | 31 | float pres; |
nakumur | 0:c17f6898d7a7 | 32 | //受信機側で開始時に設定 |
nakumur | 0:c17f6898d7a7 | 33 | float set_temp; |
nakumur | 0:c17f6898d7a7 | 34 | float set_pres; |
nakumur | 0:c17f6898d7a7 | 35 | //------------------------------------------------------------------------------ |
nakumur | 0:c17f6898d7a7 | 36 | |
nakumur | 0:c17f6898d7a7 | 37 | //定数--------------------------------------------------------------------------- |
nakumur | 0:c17f6898d7a7 | 38 | //圧力センサの校正係数 |
nakumur | 0:c17f6898d7a7 | 39 | float a = 0.000653692; |
nakumur | 0:c17f6898d7a7 | 40 | float b = -1.548466; |
nakumur | 0:c17f6898d7a7 | 41 | //------------------------------------------------------------------------------ |
nakumur | 0:c17f6898d7a7 | 42 | |
nakumur | 0:c17f6898d7a7 | 43 | //無線ヘッダー-------------------------------------------------------------------- |
nakumur | 0:c17f6898d7a7 | 44 | const char header_uplink = 1; |
nakumur | 0:c17f6898d7a7 | 45 | const char header_downlink = 2; |
nakumur | 0:c17f6898d7a7 | 46 | //------------------------------------------------------------------------------ |
nakumur | 0:c17f6898d7a7 | 47 | |
nakumur | 0:c17f6898d7a7 | 48 | //関数--------------------------------------------------------------------------- |
nakumur | 0:c17f6898d7a7 | 49 | void upLink(); |
nakumur | 0:c17f6898d7a7 | 50 | void downLink(); |
nakumur | 0:c17f6898d7a7 | 51 | void readTemp(); |
nakumur | 0:c17f6898d7a7 | 52 | void controlTemp(); |
nakumur | 0:c17f6898d7a7 | 53 | void readPres(); |
nakumur | 0:c17f6898d7a7 | 54 | void controlPres(); |
nakumur | 0:c17f6898d7a7 | 55 | //------------------------------------------------------------------------------ |
nakumur | 0:c17f6898d7a7 | 56 | |
nakumur | 0:c17f6898d7a7 | 57 | |
nakumur | 0:c17f6898d7a7 | 58 | |
nakumur | 0:c17f6898d7a7 | 59 | // メイン関数--------------------------------------------------------------------- |
nakumur | 0:c17f6898d7a7 | 60 | int main() |
nakumur | 0:c17f6898d7a7 | 61 | { |
nakumur | 0:c17f6898d7a7 | 62 | im920.attach(&upLink, header_uplink); |
nakumur | 0:c17f6898d7a7 | 63 | ads1115.setGain(GAIN_TWOTHIRDS); |
nakumur | 0:c17f6898d7a7 | 64 | kettle = 0; |
nakumur | 0:c17f6898d7a7 | 65 | pump = 0; |
nakumur | 0:c17f6898d7a7 | 66 | pc.printf("start\r\n"); |
nakumur | 0:c17f6898d7a7 | 67 | |
nakumur | 0:c17f6898d7a7 | 68 | while(1) { |
nakumur | 0:c17f6898d7a7 | 69 | upLink(); |
nakumur | 0:c17f6898d7a7 | 70 | wait(1); |
nakumur | 0:c17f6898d7a7 | 71 | } |
nakumur | 0:c17f6898d7a7 | 72 | } |
nakumur | 0:c17f6898d7a7 | 73 | //------------------------------------------------------------------------------ |
nakumur | 0:c17f6898d7a7 | 74 | |
nakumur | 0:c17f6898d7a7 | 75 | |
nakumur | 0:c17f6898d7a7 | 76 | void upLink() |
nakumur | 0:c17f6898d7a7 | 77 | { |
nakumur | 0:c17f6898d7a7 | 78 | pc.printf("wait\r\n"); |
nakumur | 0:c17f6898d7a7 | 79 | |
nakumur | 0:c17f6898d7a7 | 80 | if(im920.data[1] == '0') { |
nakumur | 0:c17f6898d7a7 | 81 | kettle = 0; |
nakumur | 0:c17f6898d7a7 | 82 | pump = 0; |
nakumur | 0:c17f6898d7a7 | 83 | pc.printf("stop\r\n"); |
nakumur | 0:c17f6898d7a7 | 84 | } |
nakumur | 0:c17f6898d7a7 | 85 | |
nakumur | 0:c17f6898d7a7 | 86 | else if(im920.data[1] == '1') { |
nakumur | 0:c17f6898d7a7 | 87 | set_temp = (float)im920.toFloat(2); |
nakumur | 0:c17f6898d7a7 | 88 | set_pres = (float)im920.toFloat(6); |
nakumur | 0:c17f6898d7a7 | 89 | pc.printf("%f\r\n", set_temp); |
nakumur | 0:c17f6898d7a7 | 90 | pc.printf("%f\r\n", set_pres); |
nakumur | 0:c17f6898d7a7 | 91 | controlTemp(); |
nakumur | 0:c17f6898d7a7 | 92 | controlPres(); |
nakumur | 0:c17f6898d7a7 | 93 | downLink(); |
nakumur | 0:c17f6898d7a7 | 94 | } |
nakumur | 0:c17f6898d7a7 | 95 | |
nakumur | 0:c17f6898d7a7 | 96 | } |
nakumur | 0:c17f6898d7a7 | 97 | |
nakumur | 0:c17f6898d7a7 | 98 | void downLink() |
nakumur | 0:c17f6898d7a7 | 99 | { |
nakumur | 0:c17f6898d7a7 | 100 | im920.header(header_downlink); |
nakumur | 0:c17f6898d7a7 | 101 | im920.write((char)pump_state); |
nakumur | 0:c17f6898d7a7 | 102 | im920.write((char)kettle_state); |
nakumur | 0:c17f6898d7a7 | 103 | im920.write((float)temp); |
nakumur | 0:c17f6898d7a7 | 104 | im920.write((float)pres); |
nakumur | 0:c17f6898d7a7 | 105 | |
nakumur | 0:c17f6898d7a7 | 106 | if(im920_busy == 0) { |
nakumur | 0:c17f6898d7a7 | 107 | im920.send(); |
nakumur | 0:c17f6898d7a7 | 108 | } |
nakumur | 0:c17f6898d7a7 | 109 | } |
nakumur | 0:c17f6898d7a7 | 110 | |
nakumur | 0:c17f6898d7a7 | 111 | void readTemp() |
nakumur | 0:c17f6898d7a7 | 112 | { |
nakumur | 0:c17f6898d7a7 | 113 | ds1820.convertTemperature(true, DS1820::all_devices); |
nakumur | 0:c17f6898d7a7 | 114 | temp = ds1820.temperature(); |
nakumur | 0:c17f6898d7a7 | 115 | } |
nakumur | 0:c17f6898d7a7 | 116 | |
nakumur | 0:c17f6898d7a7 | 117 | void controlTemp() |
nakumur | 0:c17f6898d7a7 | 118 | { |
nakumur | 0:c17f6898d7a7 | 119 | readTemp(); |
nakumur | 0:c17f6898d7a7 | 120 | if (temp < set_temp) { |
nakumur | 0:c17f6898d7a7 | 121 | kettle = 1; |
nakumur | 0:c17f6898d7a7 | 122 | kettle_state = 1; |
nakumur | 0:c17f6898d7a7 | 123 | pc.printf("kettle on :: %f[oC]\r\n", temp); |
nakumur | 0:c17f6898d7a7 | 124 | } |
nakumur | 0:c17f6898d7a7 | 125 | |
nakumur | 0:c17f6898d7a7 | 126 | else if (temp > set_temp + 5.0) { |
nakumur | 0:c17f6898d7a7 | 127 | kettle = 0; |
nakumur | 0:c17f6898d7a7 | 128 | kettle_state = 0; |
nakumur | 0:c17f6898d7a7 | 129 | pc.printf("kettle off :: %f[oC]\r\n", temp); |
nakumur | 0:c17f6898d7a7 | 130 | } |
nakumur | 0:c17f6898d7a7 | 131 | } |
nakumur | 0:c17f6898d7a7 | 132 | |
nakumur | 0:c17f6898d7a7 | 133 | void readPres() |
nakumur | 0:c17f6898d7a7 | 134 | { |
nakumur | 0:c17f6898d7a7 | 135 | pres_bit = ads1115.readADC_SingleEnded(0); |
nakumur | 0:c17f6898d7a7 | 136 | pres = pres_bit * a + b; |
nakumur | 0:c17f6898d7a7 | 137 | } |
nakumur | 0:c17f6898d7a7 | 138 | |
nakumur | 0:c17f6898d7a7 | 139 | void controlPres() |
nakumur | 0:c17f6898d7a7 | 140 | { |
nakumur | 0:c17f6898d7a7 | 141 | readPres(); |
nakumur | 0:c17f6898d7a7 | 142 | if (pres < set_pres) { |
nakumur | 0:c17f6898d7a7 | 143 | pump = 1; |
nakumur | 0:c17f6898d7a7 | 144 | pump_state = 1; |
nakumur | 0:c17f6898d7a7 | 145 | pc.printf("pummp on :: %f[MPa]\r\n", pres); |
nakumur | 0:c17f6898d7a7 | 146 | } |
nakumur | 0:c17f6898d7a7 | 147 | |
nakumur | 0:c17f6898d7a7 | 148 | else if (pres > set_pres + 0.1) { |
nakumur | 0:c17f6898d7a7 | 149 | pump = 0; |
nakumur | 0:c17f6898d7a7 | 150 | pump_state = 0; |
nakumur | 0:c17f6898d7a7 | 151 | pc.printf("pummp off :: %f[MPa]\r\n", pres); |
nakumur | 0:c17f6898d7a7 | 152 | } |
nakumur | 0:c17f6898d7a7 | 153 | } |
nakumur | 0:c17f6898d7a7 | 154 |