course1
Dependencies: WS2812 PixelArray Adafruit_GFX HC_SR04_Ultrasonic_Library
main.cpp@101:18e7ac07b620, 2019-08-04 (annotated)
- Committer:
- kmsmile2
- Date:
- Sun Aug 04 12:24:12 2019 +0000
- Revision:
- 101:18e7ac07b620
- Parent:
- 99:43e306bf6f13
Embedded_camp
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kmsmile2 | 97:8f3abd5cf5ce | 1 | #include "mbed.h" |
kmsmile2 | 97:8f3abd5cf5ce | 2 | #include "RemoteIR.h" |
kmsmile2 | 97:8f3abd5cf5ce | 3 | #include "ReceiverIR.h" |
kmsmile2 | 97:8f3abd5cf5ce | 4 | #include "TB6612FNG.h" |
kmsmile2 | 97:8f3abd5cf5ce | 5 | #include "TRSensors.h" |
kmsmile2 | 97:8f3abd5cf5ce | 6 | #include "ultrasonic.h" |
kmsmile2 | 97:8f3abd5cf5ce | 7 | #include "Adafruit_SSD1306.h" |
kmsmile2 | 98:d8ead5e04047 | 8 | #include "WS2812.h" |
kmsmile2 | 98:d8ead5e04047 | 9 | #include "PixelArray.h" |
kmsmile2 | 97:8f3abd5cf5ce | 10 | |
kmsmile2 | 97:8f3abd5cf5ce | 11 | #define button_SENSORS 5 |
kmsmile2 | 97:8f3abd5cf5ce | 12 | #define ADT7420_TEMP_REG (0x00) |
kmsmile2 | 97:8f3abd5cf5ce | 13 | #define ADT7420_CONF_REG (0x03) |
kmsmile2 | 97:8f3abd5cf5ce | 14 | #define EVAL_ADT7420_ADDR (0x48) |
kmsmile2 | 97:8f3abd5cf5ce | 15 | #define PCF8574_ADDR (0x20) |
kmsmile2 | 98:d8ead5e04047 | 16 | #define WS2812_BUF 100 |
kmsmile2 | 98:d8ead5e04047 | 17 | #define WS2812_BUF2 4 |
kmsmile2 | 98:d8ead5e04047 | 18 | #define NUM_COLORS 3 |
kmsmile2 | 98:d8ead5e04047 | 19 | #define NUM_LEDS_PER_COLOR 4 |
mbed_official | 82:abf1b1785bd7 | 20 | |
kmsmile2 | 97:8f3abd5cf5ce | 21 | // create object |
kmsmile2 | 97:8f3abd5cf5ce | 22 | DigitalOut dc(D8,1); |
kmsmile2 | 97:8f3abd5cf5ce | 23 | DigitalOut rst(D9,1); |
kmsmile2 | 97:8f3abd5cf5ce | 24 | I2C i2c(I2C_SDA, I2C_SCL); |
kmsmile2 | 97:8f3abd5cf5ce | 25 | TB6612FNG motorDriver(D6, A1, A0, D5, A2, A3); |
kmsmile2 | 97:8f3abd5cf5ce | 26 | Ultrasonic ultra(D3, D2, .1, false); |
kmsmile2 | 97:8f3abd5cf5ce | 27 | ReceiverIR IR(D4); |
kmsmile2 | 97:8f3abd5cf5ce | 28 | TRSensors trs; |
kmsmile2 | 97:8f3abd5cf5ce | 29 | RawSerial pc(USBTX, USBRX, 115200); |
kmsmile2 | 97:8f3abd5cf5ce | 30 | Adafruit_SSD1306_I2c gOled2(i2c,D9,0x7A,64,128); |
kmsmile2 | 97:8f3abd5cf5ce | 31 | Timer timer; |
kmsmile2 | 98:d8ead5e04047 | 32 | PixelArray px(WS2812_BUF); |
kmsmile2 | 98:d8ead5e04047 | 33 | WS2812 ws(D7, WS2812_BUF, 7, 15, 10, 15); |
mbed_official | 88:bea4f2daa48c | 34 | |
kmsmile2 | 99:43e306bf6f13 | 35 | |
kmsmile2 | 101:18e7ac07b620 | 36 | volatile int button = 0; |
kmsmile2 | 99:43e306bf6f13 | 37 | |
kmsmile2 | 101:18e7ac07b620 | 38 | // PID variables |
kmsmile2 | 101:18e7ac07b620 | 39 | static float pval = 0; |
kmsmile2 | 97:8f3abd5cf5ce | 40 | |
kmsmile2 | 97:8f3abd5cf5ce | 41 | // motor Driver |
kmsmile2 | 97:8f3abd5cf5ce | 42 | float fPwmAPeriod; |
kmsmile2 | 97:8f3abd5cf5ce | 43 | float fPwmAPulsewidth; |
kmsmile2 | 97:8f3abd5cf5ce | 44 | float fPwmBPeriod; |
kmsmile2 | 97:8f3abd5cf5ce | 45 | float fPwmBPulsewidth; |
mbed_official | 82:abf1b1785bd7 | 46 | |
kmsmile2 | 97:8f3abd5cf5ce | 47 | inline void update_display(){ |
kmsmile2 | 97:8f3abd5cf5ce | 48 | gOled2.clearDisplay(); |
kmsmile2 | 97:8f3abd5cf5ce | 49 | gOled2.setTextCursor(0,0); |
kmsmile2 | 97:8f3abd5cf5ce | 50 | gOled2.printf("E-RON alphabot\r\n"); |
kmsmile2 | 97:8f3abd5cf5ce | 51 | gOled2.printf("P: %.2f\r\n",pval); |
kmsmile2 | 97:8f3abd5cf5ce | 52 | gOled2.display(); |
kmsmile2 | 97:8f3abd5cf5ce | 53 | } |
kmsmile2 | 101:18e7ac07b620 | 54 | |
kmsmile2 | 101:18e7ac07b620 | 55 | int colorbuf[NUM_COLORS] = {0xff0000,0x00ff00,0x0000ff}; |
kmsmile2 | 101:18e7ac07b620 | 56 | int colorbuf3 =0x000000; |
kmsmile2 | 99:43e306bf6f13 | 57 | |
kmsmile2 | 97:8f3abd5cf5ce | 58 | int main() |
kmsmile2 | 101:18e7ac07b620 | 59 | { |
kmsmile2 | 101:18e7ac07b620 | 60 | |
kmsmile2 | 98:d8ead5e04047 | 61 | for (int i = 0; i < WS2812_BUF; i++) { |
kmsmile2 | 98:d8ead5e04047 | 62 | px.Set(i, colorbuf[(i / NUM_LEDS_PER_COLOR) % NUM_COLORS]); |
kmsmile2 | 98:d8ead5e04047 | 63 | } |
kmsmile2 | 101:18e7ac07b620 | 64 | |
kmsmile2 | 98:d8ead5e04047 | 65 | for (int j=0; j<WS2812_BUF; j++) { |
kmsmile2 | 98:d8ead5e04047 | 66 | // px.SetI(pixel position, II value) |
kmsmile2 | 98:d8ead5e04047 | 67 | px.SetI(j%WS2812_BUF, 0xf+(0xf*4)); |
kmsmile2 | 98:d8ead5e04047 | 68 | } |
kmsmile2 | 97:8f3abd5cf5ce | 69 | |
kmsmile2 | 101:18e7ac07b620 | 70 | update_display(); |
kmsmile2 | 101:18e7ac07b620 | 71 | |
kmsmile2 | 97:8f3abd5cf5ce | 72 | RemoteIR::Format format; |
kmsmile2 | 97:8f3abd5cf5ce | 73 | uint8_t buf[32]; |
kmsmile2 | 97:8f3abd5cf5ce | 74 | int bitcount; |
kmsmile2 | 97:8f3abd5cf5ce | 75 | while(1) |
kmsmile2 | 97:8f3abd5cf5ce | 76 | { // read the value of the code |
kmsmile2 | 97:8f3abd5cf5ce | 77 | if (IR.getState() == ReceiverIR::Received) |
kmsmile2 | 97:8f3abd5cf5ce | 78 | { |
kmsmile2 | 97:8f3abd5cf5ce | 79 | bitcount = IR.getData(&format, buf, sizeof(buf) * 8); |
kmsmile2 | 97:8f3abd5cf5ce | 80 | pc.printf("%d\r\n", bitcount); |
kmsmile2 | 97:8f3abd5cf5ce | 81 | pc.printf("buf[2]: %d\r\n", buf[2]); |
kmsmile2 | 97:8f3abd5cf5ce | 82 | button = buf[2]; |
kmsmile2 | 97:8f3abd5cf5ce | 83 | } |
kmsmile2 | 97:8f3abd5cf5ce | 84 | |
kmsmile2 | 97:8f3abd5cf5ce | 85 | switch(button) |
kmsmile2 | 97:8f3abd5cf5ce | 86 | { |
kmsmile2 | 97:8f3abd5cf5ce | 87 | case 0x45: |
kmsmile2 | 97:8f3abd5cf5ce | 88 | // ch- button (P value up) |
kmsmile2 | 97:8f3abd5cf5ce | 89 | pval += 0.01; |
kmsmile2 | 97:8f3abd5cf5ce | 90 | pval = fabs(pval); |
kmsmile2 | 97:8f3abd5cf5ce | 91 | update_display(); |
kmsmile2 | 97:8f3abd5cf5ce | 92 | wait(0.3); |
kmsmile2 | 97:8f3abd5cf5ce | 93 | button = 0x1C; |
kmsmile2 | 97:8f3abd5cf5ce | 94 | break; |
kmsmile2 | 101:18e7ac07b620 | 95 | |
kmsmile2 | 98:d8ead5e04047 | 96 | default: |
kmsmile2 | 97:8f3abd5cf5ce | 97 | // wrong button |
kmsmile2 | 97:8f3abd5cf5ce | 98 | pc.printf("wrong button!\r\n"); |
kmsmile2 | 97:8f3abd5cf5ce | 99 | break; |
kmsmile2 | 97:8f3abd5cf5ce | 100 | } |
kmsmile2 | 97:8f3abd5cf5ce | 101 | } |
kmsmile2 | 97:8f3abd5cf5ce | 102 | } |