NASA Space Apps Challenge 2018 Belgrade, Serbia .A.L.S.M. Code
Dependencies: DHT PixelArray WS2812 mbed
Diff: main.cpp
- Revision:
- 0:28c26981ce42
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Oct 22 08:29:53 2018 +0000 @@ -0,0 +1,125 @@ +/*Includes*/ +#include "mbed.h" +#include "DHT.h" +#include "WS2812.h" +#include "PixelArray.h" + +/*Defines*/ +/*4x4 RGB*/ +#define WS2812_BUF 16 // W2812_BUFF >/= NUM_COLORS * NUM_LEDS +#define NUM_COLORS 6 +#define NUM_LEDS 16 + +/*Pins*/ +#define tRF_TX (PA_0) +#define tRF_RX (PA_1) + +#define smoke_pin (PB_0) +#define humidity_pin (PA_4) +/*Smoke detector*/ +#define smoke_thresh (0.50f) + +/*Where to do a print for debug?*/ +Serial pc(SERIAL_TX, SERIAL_RX, 115200); + +/*Init tRF*/ +void init_tRF(Serial* trf){ + //tRF go to config mode + trf->printf("+++"); + wait(0.05); + trf->printf("ATR\r"); + // Freq + trf->printf("ATS206=12\r"); + // Channel + trf->printf("ATS200=3\r"); + // Speed transmit uart + trf->printf("ATS210=5\r"); + // Radio baud + trf->printf("ATS201=3\r"); + // Go to send mode + trf->printf("ATO\r"); +} +/*End tRF init*/ + +/*Scream*/ +void tRFScream(Serial* trf,WS2812* ws, PixelArray* px) { + for (int z=0; z<WS2812_BUF; z++) // Color updated from Top to Bottom +// for (z=WS2812_BUF; z>=0; z--) // Color updated from Bottom to Top + { + ws->write_offsets(px->getBuf(),z,z,z); + } + while(1){ + trf->printf("UUUUUUUU"); + } +} +/*End Scream*/ + + /*Get some humi data*/ +void doDHT(DHT* sensor){ + int err; + err = sensor->readData(); + if (err == 0) { + pc.printf("Temperature is %4.2f C \r\n",sensor->ReadTemperature(CELCIUS)); + pc.printf("Humidity is %4.2f \r\n",sensor->ReadHumidity()); + pc.printf("Dew point is %4.2f \r\n",sensor->CalcdewPoint(sensor->ReadTemperature(CELCIUS), sensor->ReadHumidity())); + pc.printf("Dew point (fast) is %4.2f \r\n",sensor->CalcdewPointFast(sensor->ReadTemperature(CELCIUS), sensor->ReadHumidity())); + } else { + pc.printf("\r\nErr %i \n",err); + } +} +/*Got em humi datas*/ + +/*Do me*/ +int main() +{ + float smoke_val; + /*tRF Serial definition*/ + Serial tRF(tRF_TX, tRF_RX, 115200); + /*RGB*/ + WS2812 ws(PB_5, WS2812_BUF, 3, 12, 9, 12); // LED Driver + PixelArray px(WS2812_BUF); + ws.useII(WS2812::GLOBAL); // Pixel dimming disabled + int colorbuf[NUM_COLORS] = {0x2f0000,0x2f2f00,0x002f00,0x002f2f,0x00002f,0x2f002f}; + + // 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 + for (int i = 0; i < WS2812_BUF; i++) { + px.Set(i, colorbuf[(i / NUM_LEDS) % NUM_COLORS]); + } + + // now all the colours are computed, add a fade effect using intensity scaling compute and write the II value for each pixel + for (int j=0; j<WS2812_BUF; j++) + { + // px.SetI(pixel position, II value) + px.SetI(j%WS2812_BUF, 0xf+(0xf*(j%NUM_LEDS))); + } + /*Smoke detector*/ + AnalogIn smoke_in(smoke_pin); + /*Humidity and temperature*/ + DHT HumSensor(humidity_pin,SEN11301P); + /*Init all the things*/ + init_tRF(&tRF); + pc.printf("Alright chums, let's do this!\r\n"); //Debug line + + /*Some infinite action*/ + while (1) { + pc.printf("Loop start.\r\n"); //Debug line, I'm using the mbed online compiler, understand me pls. + /*Do smoke*/ + smoke_val = smoke_in.read(); + if(smoke_val >= smoke_thresh) { + pc.printf("NOK Smoke: %f\r\n", smoke_val); + pc.printf("SMOKE!"); + tRFScream(&tRF, &ws, &px); + } + else { + pc.printf("OK Smoke: %f\r\n", smoke_val); + } + /*Do humi sensor*/ + doDHT(&HumSensor); + if (HumSensor.ReadTemperature(CELCIUS) > 35.0f) { + pc.printf("HUMI!"); + tRFScream(&tRF, &ws, &px); + } + wait(1); + } +} +/*End me*/ \ No newline at end of file