malcolm lear
/
LabmbedV30
Labmbed device drivers
main.cpp@1:04e1ee8faa04, 2017-01-11 (annotated)
- Committer:
- malcolmlear
- Date:
- Wed Jan 11 17:03:19 2017 +0000
- Revision:
- 1:04e1ee8faa04
- Parent:
- 0:416329806e55
- Child:
- 2:caa0e6b2b436
LED sequence OK
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
malcolmlear | 0:416329806e55 | 1 | // Demo Program for Labmbed Board |
malcolmlear | 0:416329806e55 | 2 | |
malcolmlear | 0:416329806e55 | 3 | #include "mbed.h" |
malcolmlear | 0:416329806e55 | 4 | #include "TextLCD.h" |
malcolmlear | 0:416329806e55 | 5 | |
malcolmlear | 0:416329806e55 | 6 | TextLCD lcd(p15, p16, p17, p18, p19, p20); // LCD: RS, E, D4-D7 |
malcolmlear | 0:416329806e55 | 7 | SPI spi(p5, p6, p7); // SPI: MOSI, MISO, SCLK (MISO not used with LCD) |
malcolmlear | 0:416329806e55 | 8 | DigitalOut lat(p8); |
malcolmlear | 0:416329806e55 | 9 | I2C i2c(p9, p10); // I2C: SDA, SCL |
malcolmlear | 0:416329806e55 | 10 | |
malcolmlear | 0:416329806e55 | 11 | int led_bits = 0; // global LED status used for readback |
malcolmlear | 0:416329806e55 | 12 | const int tmp102addr = 0x92; // TMP102 temperature I2C address |
malcolmlear | 0:416329806e55 | 13 | |
malcolmlear | 0:416329806e55 | 14 | |
malcolmlear | 0:416329806e55 | 15 | void initleds() { |
malcolmlear | 0:416329806e55 | 16 | lat = 0; // latch must start low |
malcolmlear | 0:416329806e55 | 17 | spi.format(16,0); // SPI 16 bit data, low state, high going clock |
malcolmlear | 0:416329806e55 | 18 | spi.frequency(1000000); // 1MHz clock rate |
malcolmlear | 0:416329806e55 | 19 | } |
malcolmlear | 0:416329806e55 | 20 | |
malcolmlear | 0:416329806e55 | 21 | void setleds(int ledall) { |
malcolmlear | 1:04e1ee8faa04 | 22 | led_bits = ledall; // update global LED status |
malcolmlear | 0:416329806e55 | 23 | spi.write((led_bits & 0x03ff) | ((led_bits & 0xa800) >> 1) | ((led_bits & 0x5400) << 1)); |
malcolmlear | 0:416329806e55 | 24 | lat = 1; // latch pulse start |
malcolmlear | 0:416329806e55 | 25 | lat = 0; // latch pulse end |
malcolmlear | 0:416329806e55 | 26 | } |
malcolmlear | 0:416329806e55 | 27 | |
malcolmlear | 0:416329806e55 | 28 | void setled(int ledno, int ledstate) { |
malcolmlear | 0:416329806e55 | 29 | ledno = ((ledno - 1) & 0x0007) + 1; // limit led number |
malcolmlear | 0:416329806e55 | 30 | ledno = (8 - ledno) * 2; // offset of led state in 'led_bits' |
malcolmlear | 0:416329806e55 | 31 | ledstate = ledstate & 0x0003; // limit led state |
malcolmlear | 0:416329806e55 | 32 | ledstate = ledstate << ledno; |
malcolmlear | 1:04e1ee8faa04 | 33 | int statemask = 0x0003; // mask used to clear led state |
malcolmlear | 1:04e1ee8faa04 | 34 | statemask = ((statemask << ledno) ^ 0xffff); // shift and invert statemask |
malcolmlear | 1:04e1ee8faa04 | 35 | led_bits = ((led_bits & statemask) | ledstate); // clear and set led state |
malcolmlear | 0:416329806e55 | 36 | setleds(led_bits); |
malcolmlear | 0:416329806e55 | 37 | } |
malcolmlear | 0:416329806e55 | 38 | |
malcolmlear | 0:416329806e55 | 39 | int readled(int ledno) { |
malcolmlear | 0:416329806e55 | 40 | ledno = ((ledno - 1) & 0x0007) + 1; // limit led number |
malcolmlear | 0:416329806e55 | 41 | ledno = (8 - ledno) * 2; // offset of led state in 'led_bits' |
malcolmlear | 0:416329806e55 | 42 | int ledstate = led_bits; |
malcolmlear | 0:416329806e55 | 43 | ledstate = ledstate >> ledno; |
malcolmlear | 0:416329806e55 | 44 | return (ledstate & 0x0003); |
malcolmlear | 0:416329806e55 | 45 | } |
malcolmlear | 0:416329806e55 | 46 | |
malcolmlear | 0:416329806e55 | 47 | int readleds() { |
malcolmlear | 0:416329806e55 | 48 | return led_bits; |
malcolmlear | 0:416329806e55 | 49 | } |
malcolmlear | 0:416329806e55 | 50 | |
malcolmlear | 0:416329806e55 | 51 | //int readswitch(int switchno) { |
malcolmlear | 0:416329806e55 | 52 | //} |
malcolmlear | 0:416329806e55 | 53 | |
malcolmlear | 0:416329806e55 | 54 | //int readswitches(int switchno) { |
malcolmlear | 0:416329806e55 | 55 | //} |
malcolmlear | 0:416329806e55 | 56 | |
malcolmlear | 0:416329806e55 | 57 | //int readkey(int keyno) { |
malcolmlear | 0:416329806e55 | 58 | //} |
malcolmlear | 0:416329806e55 | 59 | |
malcolmlear | 0:416329806e55 | 60 | //int readkeyrow(int keyrow) { |
malcolmlear | 0:416329806e55 | 61 | //} |
malcolmlear | 0:416329806e55 | 62 | |
malcolmlear | 0:416329806e55 | 63 | //int readkeys() { |
malcolmlear | 0:416329806e55 | 64 | //} |
malcolmlear | 0:416329806e55 | 65 | |
malcolmlear | 0:416329806e55 | 66 | float readtemp() { |
malcolmlear | 0:416329806e55 | 67 | char cmd[2]; |
malcolmlear | 0:416329806e55 | 68 | cmd[0] = 0x01; |
malcolmlear | 0:416329806e55 | 69 | cmd[1] = 0x00; |
malcolmlear | 0:416329806e55 | 70 | i2c.write(tmp102addr, cmd, 2); |
malcolmlear | 0:416329806e55 | 71 | wait(0.5); |
malcolmlear | 0:416329806e55 | 72 | cmd[0] = 0x00; |
malcolmlear | 0:416329806e55 | 73 | i2c.write(tmp102addr, cmd, 1); |
malcolmlear | 0:416329806e55 | 74 | i2c.read(tmp102addr, cmd, 2); |
malcolmlear | 0:416329806e55 | 75 | return (float((cmd[0]<<8)|cmd[1]) / 256.0); |
malcolmlear | 0:416329806e55 | 76 | } |
malcolmlear | 0:416329806e55 | 77 | |
malcolmlear | 0:416329806e55 | 78 | int main() { |
malcolmlear | 0:416329806e55 | 79 | |
malcolmlear | 0:416329806e55 | 80 | initleds(); |
malcolmlear | 0:416329806e55 | 81 | |
malcolmlear | 0:416329806e55 | 82 | while(1) { |
malcolmlear | 1:04e1ee8faa04 | 83 | int a,b; |
malcolmlear | 1:04e1ee8faa04 | 84 | for (b = 0; b < 4; b++ ) { |
malcolmlear | 1:04e1ee8faa04 | 85 | for (a = 1; a < 17; a++ ) { |
malcolmlear | 1:04e1ee8faa04 | 86 | setled (a,b); |
malcolmlear | 1:04e1ee8faa04 | 87 | wait(.5); |
malcolmlear | 1:04e1ee8faa04 | 88 | } |
malcolmlear | 1:04e1ee8faa04 | 89 | } |
malcolmlear | 0:416329806e55 | 90 | } |
malcolmlear | 0:416329806e55 | 91 | } |