Grove sensor component example for Seeed Wio 3G
Dependencies: Grove_LCD_RGB_Backlight Grove_temperature PixelArray Servo WS2812
Fork of Wio_3G_example by
main.cpp@75:f93c0063755c, 2018-08-10 (annotated)
- Committer:
- MACRUM
- Date:
- Fri Aug 10 09:07:14 2018 +0000
- Revision:
- 75:f93c0063755c
- Parent:
- 74:847e5dc7b4d5
Code clean-up
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jonathan Austin |
0:2757d7abb7d9 | 1 | #include "mbed.h" |
MACRUM | 71:7d17edde2e03 | 2 | #include "Grove_LCD_RGB_Backlight.h" |
MACRUM | 72:aa14c091f860 | 3 | #include "Grove_temperature.h" |
MACRUM | 73:d47320bcc568 | 4 | #include "WS2812.h" |
MACRUM | 73:d47320bcc568 | 5 | #include "PixelArray.h" |
MACRUM | 73:d47320bcc568 | 6 | #include "Servo.h" |
MACRUM | 73:d47320bcc568 | 7 | |
MACRUM | 73:d47320bcc568 | 8 | #if !defined(TARGET_WIO_3G) |
MACRUM | 73:d47320bcc568 | 9 | #error Selected target is not supported. |
MACRUM | 73:d47320bcc568 | 10 | #endif |
MACRUM | 70:cb6d36218441 | 11 | |
MACRUM | 70:cb6d36218441 | 12 | #define D20 (PB_4) |
MACRUM | 70:cb6d36218441 | 13 | #define D19 (PB_3) |
MACRUM | 70:cb6d36218441 | 14 | |
MACRUM | 73:d47320bcc568 | 15 | // on-board resources |
MACRUM | 74:847e5dc7b4d5 | 16 | |
MACRUM | 73:d47320bcc568 | 17 | Serial pc(USBTX, USBRX, 115200); |
MACRUM | 70:cb6d36218441 | 18 | DigitalOut GrovePower(PB_10, 1); |
MACRUM | 73:d47320bcc568 | 19 | |
MACRUM | 74:847e5dc7b4d5 | 20 | #define WS2812_BUF 8 |
MACRUM | 74:847e5dc7b4d5 | 21 | #define NUM_COLORS 8 |
MACRUM | 74:847e5dc7b4d5 | 22 | #define NUM_LEDS_PER_COLOR 8 |
MACRUM | 73:d47320bcc568 | 23 | #define H0 8 |
MACRUM | 73:d47320bcc568 | 24 | #define L0 32 |
MACRUM | 73:d47320bcc568 | 25 | #define H1 17 |
MACRUM | 73:d47320bcc568 | 26 | #define L1 32 |
MACRUM | 73:d47320bcc568 | 27 | |
MACRUM | 73:d47320bcc568 | 28 | DigitalOut LEDPower(PE_8, 1); |
MACRUM | 73:d47320bcc568 | 29 | PixelArray px(WS2812_BUF); |
MACRUM | 74:847e5dc7b4d5 | 30 | WS2812 ws(PB_1, WS2812_BUF, H0, L0, H1, L1); |
MACRUM | 74:847e5dc7b4d5 | 31 | |
MACRUM | 73:d47320bcc568 | 32 | // Grove sensors |
MACRUM | 74:847e5dc7b4d5 | 33 | |
MACRUM | 70:cb6d36218441 | 34 | DigitalOut led1(D38); |
MACRUM | 73:d47320bcc568 | 35 | AnalogIn ain(A6); // angle or light sensor |
MACRUM | 73:d47320bcc568 | 36 | InterruptIn btn(D20); // button or touch sensor |
MACRUM | 73:d47320bcc568 | 37 | Grove_LCD_RGB_Backlight lcd(I2C_SDA, I2C_SCL); |
MACRUM | 72:aa14c091f860 | 38 | Grove_temperature temp(A4); |
MACRUM | 74:847e5dc7b4d5 | 39 | |
MACRUM | 71:7d17edde2e03 | 40 | uint32_t button = 0; |
MACRUM | 70:cb6d36218441 | 41 | |
MACRUM | 70:cb6d36218441 | 42 | void push() |
MACRUM | 70:cb6d36218441 | 43 | { |
MACRUM | 71:7d17edde2e03 | 44 | button++; |
MACRUM | 70:cb6d36218441 | 45 | } |
Jonathan Austin |
0:2757d7abb7d9 | 46 | |
MACRUM | 73:d47320bcc568 | 47 | |
MACRUM | 70:cb6d36218441 | 48 | int main() |
MACRUM | 70:cb6d36218441 | 49 | { |
MACRUM | 73:d47320bcc568 | 50 | char buf[20]; |
MACRUM | 73:d47320bcc568 | 51 | btn.fall(push); // set interrupt handler |
MACRUM | 70:cb6d36218441 | 52 | |
MACRUM | 73:d47320bcc568 | 53 | lcd.clear(); |
MACRUM | 73:d47320bcc568 | 54 | lcd.setRGB(0xff, 0x00, 0x00); |
MACRUM | 73:d47320bcc568 | 55 | lcd.locate(0, 0); |
MACRUM | 73:d47320bcc568 | 56 | lcd.print("Hello World!"); |
MACRUM | 73:d47320bcc568 | 57 | lcd.locate(0, 1); |
MACRUM | 73:d47320bcc568 | 58 | |
MACRUM | 74:847e5dc7b4d5 | 59 | // set up the colours we want to draw with |
MACRUM | 74:847e5dc7b4d5 | 60 | const int colorbuf[NUM_COLORS] = {0x000000, 0x2f0000,0x2f2f00,0x002f00,0x002f2f,0x00002f,0x2f002f, 0x2f2f2f}; |
MACRUM | 74:847e5dc7b4d5 | 61 | |
MACRUM | 73:d47320bcc568 | 62 | ws.useII(WS2812::PER_PIXEL); // use per-pixel intensity scaling |
MACRUM | 74:847e5dc7b4d5 | 63 | |
MACRUM | 74:847e5dc7b4d5 | 64 | // for each of the colours (j) write out 10 of them |
MACRUM | 74:847e5dc7b4d5 | 65 | // the pixels are written at the colour*10, plus the colour position |
MACRUM | 74:847e5dc7b4d5 | 66 | // all modulus 60 so it wraps around |
MACRUM | 74:847e5dc7b4d5 | 67 | for (int i = 0; i < WS2812_BUF; i++) { |
MACRUM | 74:847e5dc7b4d5 | 68 | px.Set(i, colorbuf[i]); |
MACRUM | 74:847e5dc7b4d5 | 69 | px.SetI(i, 0x80); |
MACRUM | 74:847e5dc7b4d5 | 70 | } |
MACRUM | 74:847e5dc7b4d5 | 71 | |
MACRUM | 74:847e5dc7b4d5 | 72 | pc.printf("hello, Mbed world\n"); |
MACRUM | 71:7d17edde2e03 | 73 | |
MACRUM | 70:cb6d36218441 | 74 | int cnt = 0; |
MACRUM | 75:f93c0063755c | 75 | int idx = 0; |
MACRUM | 74:847e5dc7b4d5 | 76 | |
Jonathan Austin |
0:2757d7abb7d9 | 77 | while (true) { |
MACRUM | 73:d47320bcc568 | 78 | pc.printf("count = %4d, button = %d, analog = %2.2f, temp = %2.2f\n", cnt++, button, ain.read(), temp.getTemperature()); |
MACRUM | 73:d47320bcc568 | 79 | sprintf(buf, "L=%2.2f, T=%2.2f", ain.read(), temp.getTemperature()); |
MACRUM | 75:f93c0063755c | 80 | |
MACRUM | 73:d47320bcc568 | 81 | lcd.setRGB(0xff, (255*ain.read()), 0x00); |
MACRUM | 73:d47320bcc568 | 82 | lcd.locate(0, 1); |
MACRUM | 73:d47320bcc568 | 83 | lcd.print(buf); |
MACRUM | 75:f93c0063755c | 84 | |
Jonathan Austin |
0:2757d7abb7d9 | 85 | led1 = !led1; |
MACRUM | 74:847e5dc7b4d5 | 86 | |
MACRUM | 75:f93c0063755c | 87 | ws.write_offsets(px.getBuf(), idx, idx, idx); |
MACRUM | 75:f93c0063755c | 88 | idx++; |
MACRUM | 75:f93c0063755c | 89 | if (idx >= WS2812_BUF) { |
MACRUM | 75:f93c0063755c | 90 | idx = 0; |
MACRUM | 74:847e5dc7b4d5 | 91 | } |
MACRUM | 74:847e5dc7b4d5 | 92 | |
mbed_official | 22:af9dcf379926 | 93 | wait(0.5); |
Jonathan Austin |
0:2757d7abb7d9 | 94 | } |
Jonathan Austin |
0:2757d7abb7d9 | 95 | } |