![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
NASA Space Apps Challenge 2018 Belgrade, Serbia .A.L.S.M. Code
Dependencies: DHT PixelArray WS2812 mbed
main.cpp@0:28c26981ce42, 2018-10-22 (annotated)
- Committer:
- Tafkal
- Date:
- Mon Oct 22 08:29:53 2018 +0000
- Revision:
- 0:28c26981ce42
NASA Space Apps Challenge 2018 Belgrade, Serbia .A.L.S.M. Code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Tafkal | 0:28c26981ce42 | 1 | /*Includes*/ |
Tafkal | 0:28c26981ce42 | 2 | #include "mbed.h" |
Tafkal | 0:28c26981ce42 | 3 | #include "DHT.h" |
Tafkal | 0:28c26981ce42 | 4 | #include "WS2812.h" |
Tafkal | 0:28c26981ce42 | 5 | #include "PixelArray.h" |
Tafkal | 0:28c26981ce42 | 6 | |
Tafkal | 0:28c26981ce42 | 7 | /*Defines*/ |
Tafkal | 0:28c26981ce42 | 8 | /*4x4 RGB*/ |
Tafkal | 0:28c26981ce42 | 9 | #define WS2812_BUF 16 // W2812_BUFF >/= NUM_COLORS * NUM_LEDS |
Tafkal | 0:28c26981ce42 | 10 | #define NUM_COLORS 6 |
Tafkal | 0:28c26981ce42 | 11 | #define NUM_LEDS 16 |
Tafkal | 0:28c26981ce42 | 12 | |
Tafkal | 0:28c26981ce42 | 13 | /*Pins*/ |
Tafkal | 0:28c26981ce42 | 14 | #define tRF_TX (PA_0) |
Tafkal | 0:28c26981ce42 | 15 | #define tRF_RX (PA_1) |
Tafkal | 0:28c26981ce42 | 16 | |
Tafkal | 0:28c26981ce42 | 17 | #define smoke_pin (PB_0) |
Tafkal | 0:28c26981ce42 | 18 | #define humidity_pin (PA_4) |
Tafkal | 0:28c26981ce42 | 19 | /*Smoke detector*/ |
Tafkal | 0:28c26981ce42 | 20 | #define smoke_thresh (0.50f) |
Tafkal | 0:28c26981ce42 | 21 | |
Tafkal | 0:28c26981ce42 | 22 | /*Where to do a print for debug?*/ |
Tafkal | 0:28c26981ce42 | 23 | Serial pc(SERIAL_TX, SERIAL_RX, 115200); |
Tafkal | 0:28c26981ce42 | 24 | |
Tafkal | 0:28c26981ce42 | 25 | /*Init tRF*/ |
Tafkal | 0:28c26981ce42 | 26 | void init_tRF(Serial* trf){ |
Tafkal | 0:28c26981ce42 | 27 | //tRF go to config mode |
Tafkal | 0:28c26981ce42 | 28 | trf->printf("+++"); |
Tafkal | 0:28c26981ce42 | 29 | wait(0.05); |
Tafkal | 0:28c26981ce42 | 30 | trf->printf("ATR\r"); |
Tafkal | 0:28c26981ce42 | 31 | // Freq |
Tafkal | 0:28c26981ce42 | 32 | trf->printf("ATS206=12\r"); |
Tafkal | 0:28c26981ce42 | 33 | // Channel |
Tafkal | 0:28c26981ce42 | 34 | trf->printf("ATS200=3\r"); |
Tafkal | 0:28c26981ce42 | 35 | // Speed transmit uart |
Tafkal | 0:28c26981ce42 | 36 | trf->printf("ATS210=5\r"); |
Tafkal | 0:28c26981ce42 | 37 | // Radio baud |
Tafkal | 0:28c26981ce42 | 38 | trf->printf("ATS201=3\r"); |
Tafkal | 0:28c26981ce42 | 39 | // Go to send mode |
Tafkal | 0:28c26981ce42 | 40 | trf->printf("ATO\r"); |
Tafkal | 0:28c26981ce42 | 41 | } |
Tafkal | 0:28c26981ce42 | 42 | /*End tRF init*/ |
Tafkal | 0:28c26981ce42 | 43 | |
Tafkal | 0:28c26981ce42 | 44 | /*Scream*/ |
Tafkal | 0:28c26981ce42 | 45 | void tRFScream(Serial* trf,WS2812* ws, PixelArray* px) { |
Tafkal | 0:28c26981ce42 | 46 | for (int z=0; z<WS2812_BUF; z++) // Color updated from Top to Bottom |
Tafkal | 0:28c26981ce42 | 47 | // for (z=WS2812_BUF; z>=0; z--) // Color updated from Bottom to Top |
Tafkal | 0:28c26981ce42 | 48 | { |
Tafkal | 0:28c26981ce42 | 49 | ws->write_offsets(px->getBuf(),z,z,z); |
Tafkal | 0:28c26981ce42 | 50 | } |
Tafkal | 0:28c26981ce42 | 51 | while(1){ |
Tafkal | 0:28c26981ce42 | 52 | trf->printf("UUUUUUUU"); |
Tafkal | 0:28c26981ce42 | 53 | } |
Tafkal | 0:28c26981ce42 | 54 | } |
Tafkal | 0:28c26981ce42 | 55 | /*End Scream*/ |
Tafkal | 0:28c26981ce42 | 56 | |
Tafkal | 0:28c26981ce42 | 57 | /*Get some humi data*/ |
Tafkal | 0:28c26981ce42 | 58 | void doDHT(DHT* sensor){ |
Tafkal | 0:28c26981ce42 | 59 | int err; |
Tafkal | 0:28c26981ce42 | 60 | err = sensor->readData(); |
Tafkal | 0:28c26981ce42 | 61 | if (err == 0) { |
Tafkal | 0:28c26981ce42 | 62 | pc.printf("Temperature is %4.2f C \r\n",sensor->ReadTemperature(CELCIUS)); |
Tafkal | 0:28c26981ce42 | 63 | pc.printf("Humidity is %4.2f \r\n",sensor->ReadHumidity()); |
Tafkal | 0:28c26981ce42 | 64 | pc.printf("Dew point is %4.2f \r\n",sensor->CalcdewPoint(sensor->ReadTemperature(CELCIUS), sensor->ReadHumidity())); |
Tafkal | 0:28c26981ce42 | 65 | pc.printf("Dew point (fast) is %4.2f \r\n",sensor->CalcdewPointFast(sensor->ReadTemperature(CELCIUS), sensor->ReadHumidity())); |
Tafkal | 0:28c26981ce42 | 66 | } else { |
Tafkal | 0:28c26981ce42 | 67 | pc.printf("\r\nErr %i \n",err); |
Tafkal | 0:28c26981ce42 | 68 | } |
Tafkal | 0:28c26981ce42 | 69 | } |
Tafkal | 0:28c26981ce42 | 70 | /*Got em humi datas*/ |
Tafkal | 0:28c26981ce42 | 71 | |
Tafkal | 0:28c26981ce42 | 72 | /*Do me*/ |
Tafkal | 0:28c26981ce42 | 73 | int main() |
Tafkal | 0:28c26981ce42 | 74 | { |
Tafkal | 0:28c26981ce42 | 75 | float smoke_val; |
Tafkal | 0:28c26981ce42 | 76 | /*tRF Serial definition*/ |
Tafkal | 0:28c26981ce42 | 77 | Serial tRF(tRF_TX, tRF_RX, 115200); |
Tafkal | 0:28c26981ce42 | 78 | /*RGB*/ |
Tafkal | 0:28c26981ce42 | 79 | WS2812 ws(PB_5, WS2812_BUF, 3, 12, 9, 12); // LED Driver |
Tafkal | 0:28c26981ce42 | 80 | PixelArray px(WS2812_BUF); |
Tafkal | 0:28c26981ce42 | 81 | ws.useII(WS2812::GLOBAL); // Pixel dimming disabled |
Tafkal | 0:28c26981ce42 | 82 | int colorbuf[NUM_COLORS] = {0x2f0000,0x2f2f00,0x002f00,0x002f2f,0x00002f,0x2f002f}; |
Tafkal | 0:28c26981ce42 | 83 | |
Tafkal | 0:28c26981ce42 | 84 | // for each of the colours (j) write out 16 of them the pixels are written at the colour*16, plus the colour position all modulus 60 so it wraps around |
Tafkal | 0:28c26981ce42 | 85 | for (int i = 0; i < WS2812_BUF; i++) { |
Tafkal | 0:28c26981ce42 | 86 | px.Set(i, colorbuf[(i / NUM_LEDS) % NUM_COLORS]); |
Tafkal | 0:28c26981ce42 | 87 | } |
Tafkal | 0:28c26981ce42 | 88 | |
Tafkal | 0:28c26981ce42 | 89 | // now all the colours are computed, add a fade effect using intensity scaling compute and write the II value for each pixel |
Tafkal | 0:28c26981ce42 | 90 | for (int j=0; j<WS2812_BUF; j++) |
Tafkal | 0:28c26981ce42 | 91 | { |
Tafkal | 0:28c26981ce42 | 92 | // px.SetI(pixel position, II value) |
Tafkal | 0:28c26981ce42 | 93 | px.SetI(j%WS2812_BUF, 0xf+(0xf*(j%NUM_LEDS))); |
Tafkal | 0:28c26981ce42 | 94 | } |
Tafkal | 0:28c26981ce42 | 95 | /*Smoke detector*/ |
Tafkal | 0:28c26981ce42 | 96 | AnalogIn smoke_in(smoke_pin); |
Tafkal | 0:28c26981ce42 | 97 | /*Humidity and temperature*/ |
Tafkal | 0:28c26981ce42 | 98 | DHT HumSensor(humidity_pin,SEN11301P); |
Tafkal | 0:28c26981ce42 | 99 | /*Init all the things*/ |
Tafkal | 0:28c26981ce42 | 100 | init_tRF(&tRF); |
Tafkal | 0:28c26981ce42 | 101 | pc.printf("Alright chums, let's do this!\r\n"); //Debug line |
Tafkal | 0:28c26981ce42 | 102 | |
Tafkal | 0:28c26981ce42 | 103 | /*Some infinite action*/ |
Tafkal | 0:28c26981ce42 | 104 | while (1) { |
Tafkal | 0:28c26981ce42 | 105 | pc.printf("Loop start.\r\n"); //Debug line, I'm using the mbed online compiler, understand me pls. |
Tafkal | 0:28c26981ce42 | 106 | /*Do smoke*/ |
Tafkal | 0:28c26981ce42 | 107 | smoke_val = smoke_in.read(); |
Tafkal | 0:28c26981ce42 | 108 | if(smoke_val >= smoke_thresh) { |
Tafkal | 0:28c26981ce42 | 109 | pc.printf("NOK Smoke: %f\r\n", smoke_val); |
Tafkal | 0:28c26981ce42 | 110 | pc.printf("SMOKE!"); |
Tafkal | 0:28c26981ce42 | 111 | tRFScream(&tRF, &ws, &px); |
Tafkal | 0:28c26981ce42 | 112 | } |
Tafkal | 0:28c26981ce42 | 113 | else { |
Tafkal | 0:28c26981ce42 | 114 | pc.printf("OK Smoke: %f\r\n", smoke_val); |
Tafkal | 0:28c26981ce42 | 115 | } |
Tafkal | 0:28c26981ce42 | 116 | /*Do humi sensor*/ |
Tafkal | 0:28c26981ce42 | 117 | doDHT(&HumSensor); |
Tafkal | 0:28c26981ce42 | 118 | if (HumSensor.ReadTemperature(CELCIUS) > 35.0f) { |
Tafkal | 0:28c26981ce42 | 119 | pc.printf("HUMI!"); |
Tafkal | 0:28c26981ce42 | 120 | tRFScream(&tRF, &ws, &px); |
Tafkal | 0:28c26981ce42 | 121 | } |
Tafkal | 0:28c26981ce42 | 122 | wait(1); |
Tafkal | 0:28c26981ce42 | 123 | } |
Tafkal | 0:28c26981ce42 | 124 | } |
Tafkal | 0:28c26981ce42 | 125 | /*End me*/ |