NASA Space Apps Challenge 2018 Belgrade, Serbia .A.L.S.M. Code

Dependencies:   DHT PixelArray WS2812 mbed

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?

UserRevisionLine numberNew 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*/