Full six channel cap sensor input and output CDG KL46Z control to Raspberry Pi NMHU Elements of Exhibit Design Fall 2014
Fork of CapKey_46_v2_button_osmon by
cdg_main.cpp@2:4535af993186, 2014-10-31 (annotated)
- Committer:
- scohennm
- Date:
- Fri Oct 31 22:32:27 2014 +0000
- Revision:
- 2:4535af993186
- Parent:
- 1:232e3f430f69
- Child:
- 3:ee958939c828
KL46 CapKey program with selectable channels for elements of exhibit design class.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
scohennm | 0:8a169bac9011 | 1 | #include "mbed.h" |
scohennm | 0:8a169bac9011 | 2 | #include "SLCD.h" |
scohennm | 0:8a169bac9011 | 3 | |
scohennm | 0:8a169bac9011 | 4 | //Dating Game Capkey controller 07/16/2013 sc |
scohennm | 0:8a169bac9011 | 5 | // Modified for mbet KL46Z 10/07/2014 |
scohennm | 0:8a169bac9011 | 6 | // Four inputs and Four relays |
scohennm | 1:232e3f430f69 | 7 | // Changed to simulate capkeys with the KL on board buttons |
scohennm | 0:8a169bac9011 | 8 | #define PROGNAME "DG Cap Key v1.1\r\n" |
scohennm | 2:4535af993186 | 9 | #define KEYHIT "SND" |
scohennm | 0:8a169bac9011 | 10 | #define SERIAL_SPEED 9600 |
scohennm | 0:8a169bac9011 | 11 | #define HIGH 1 |
scohennm | 0:8a169bac9011 | 12 | #define LOW 0 |
scohennm | 1:232e3f430f69 | 13 | #define RESET_DELAY 1200 |
scohennm | 0:8a169bac9011 | 14 | #define RELAY_ON HIGH |
scohennm | 0:8a169bac9011 | 15 | #define RELAY_OFF LOW |
scohennm | 0:8a169bac9011 | 16 | #define LED_ON LOW |
scohennm | 0:8a169bac9011 | 17 | #define LED_OFF HIGH |
scohennm | 0:8a169bac9011 | 18 | #define DEBOUNCE 50 |
scohennm | 2:4535af993186 | 19 | #define NUMREL 4 // really just the number of outputs |
scohennm | 0:8a169bac9011 | 20 | #define LCDDELAY 0.200 |
scohennm | 0:8a169bac9011 | 21 | #define COUNTERLIMIT 300 |
scohennm | 0:8a169bac9011 | 22 | |
scohennm | 2:4535af993186 | 23 | |
scohennm | 2:4535af993186 | 24 | DigitalOut Relays[NUMREL] = {D10,D11,D12,D13}; // corresponds to touches 1,2,3,4 |
scohennm | 2:4535af993186 | 25 | //DigitalIn capKeys[NUMREL] = {D2,D4,D6,D8}; |
scohennm | 2:4535af993186 | 26 | DigitalOut capRST[NUMREL] = {D3,D5,D7,D9}; |
scohennm | 2:4535af993186 | 27 | DigitalIn sendKey(PTC3); // on board buttons just use 1 for test |
scohennm | 1:232e3f430f69 | 28 | |
scohennm | 0:8a169bac9011 | 29 | |
scohennm | 0:8a169bac9011 | 30 | |
scohennm | 2:4535af993186 | 31 | |
scohennm | 0:8a169bac9011 | 32 | Timer millis; |
scohennm | 0:8a169bac9011 | 33 | Serial pc(USBTX, USBRX); |
scohennm | 0:8a169bac9011 | 34 | SLCD slcd; //define LCD display |
scohennm | 2:4535af993186 | 35 | InterruptIn chanButton(PTC12); |
scohennm | 2:4535af993186 | 36 | int channelSelect=0; |
scohennm | 2:4535af993186 | 37 | int channelDisplay = 1; |
scohennm | 0:8a169bac9011 | 38 | |
scohennm | 0:8a169bac9011 | 39 | // variables will change: |
scohennm | 0:8a169bac9011 | 40 | int buttonState = true; |
scohennm | 0:8a169bac9011 | 41 | long relayTimeout; |
scohennm | 0:8a169bac9011 | 42 | long capKeyTimeout; |
scohennm | 0:8a169bac9011 | 43 | int LCDCounter = 0; |
scohennm | 0:8a169bac9011 | 44 | |
scohennm | 2:4535af993186 | 45 | void getChannel() { // button interrupt |
scohennm | 2:4535af993186 | 46 | channelSelect = (channelSelect + 1) % NUMREL; |
scohennm | 2:4535af993186 | 47 | channelDisplay = channelSelect +1; |
scohennm | 2:4535af993186 | 48 | } |
scohennm | 2:4535af993186 | 49 | |
scohennm | 0:8a169bac9011 | 50 | void LCDMess(char *lMess, float dWait){ |
scohennm | 0:8a169bac9011 | 51 | slcd.Home(); |
scohennm | 0:8a169bac9011 | 52 | slcd.clear(); |
scohennm | 0:8a169bac9011 | 53 | slcd.printf(lMess); |
scohennm | 0:8a169bac9011 | 54 | wait(dWait); |
scohennm | 0:8a169bac9011 | 55 | } |
scohennm | 0:8a169bac9011 | 56 | // variable for reading the pushbutton status |
scohennm | 0:8a169bac9011 | 57 | |
scohennm | 0:8a169bac9011 | 58 | int main() { |
scohennm | 0:8a169bac9011 | 59 | int i; |
scohennm | 0:8a169bac9011 | 60 | int buttonVal = 0; |
scohennm | 2:4535af993186 | 61 | |
scohennm | 0:8a169bac9011 | 62 | char lcdData[10]; //buffer needs places dor decimal pt and colon |
scohennm | 0:8a169bac9011 | 63 | |
scohennm | 0:8a169bac9011 | 64 | int OKtoRead = true; |
scohennm | 2:4535af993186 | 65 | |
scohennm | 2:4535af993186 | 66 | chanButton.fall(&getChannel); |
scohennm | 2:4535af993186 | 67 | |
scohennm | 0:8a169bac9011 | 68 | // initialize the LED pin as an output: |
scohennm | 0:8a169bac9011 | 69 | millis.start(); |
scohennm | 0:8a169bac9011 | 70 | millis.reset(); |
scohennm | 0:8a169bac9011 | 71 | |
scohennm | 0:8a169bac9011 | 72 | pc.printf(PROGNAME); |
scohennm | 0:8a169bac9011 | 73 | for (i=0; i<NUMREL; i++){ |
scohennm | 0:8a169bac9011 | 74 | Relays[i].write(RELAY_OFF); |
scohennm | 0:8a169bac9011 | 75 | capRST[i].write(HIGH); |
scohennm | 0:8a169bac9011 | 76 | } |
scohennm | 0:8a169bac9011 | 77 | |
scohennm | 0:8a169bac9011 | 78 | while (true) { |
scohennm | 2:4535af993186 | 79 | // Show active channel |
scohennm | 2:4535af993186 | 80 | |
scohennm | 2:4535af993186 | 81 | sprintf (lcdData,"CH-%1d",channelDisplay); |
scohennm | 0:8a169bac9011 | 82 | LCDMess(lcdData, LCDDELAY); |
scohennm | 0:8a169bac9011 | 83 | |
scohennm | 0:8a169bac9011 | 84 | // read the state of the pushbutton value: |
scohennm | 0:8a169bac9011 | 85 | if(OKtoRead) { |
scohennm | 2:4535af993186 | 86 | buttonVal = !sendKey.read() ; // on board buttons just use 1 |
scohennm | 2:4535af993186 | 87 | if (buttonVal){ |
scohennm | 2:4535af993186 | 88 | sprintf (lcdData,"SND%1d",channelDisplay); |
scohennm | 2:4535af993186 | 89 | LCDMess(lcdData, LCDDELAY); |
scohennm | 2:4535af993186 | 90 | Relays[channelSelect].write(RELAY_ON); |
scohennm | 2:4535af993186 | 91 | capRST[channelSelect].write(LOW); //reset the cap key |
scohennm | 2:4535af993186 | 92 | pc.printf("Relay = %d \n\r", channelSelect); |
scohennm | 2:4535af993186 | 93 | millis.reset(); |
scohennm | 2:4535af993186 | 94 | relayTimeout = RESET_DELAY; |
scohennm | 2:4535af993186 | 95 | OKtoRead = false; |
scohennm | 2:4535af993186 | 96 | |
scohennm | 0:8a169bac9011 | 97 | } |
scohennm | 0:8a169bac9011 | 98 | }//end OKtoRead |
scohennm | 1:232e3f430f69 | 99 | |
scohennm | 0:8a169bac9011 | 100 | if (millis.read_ms() > relayTimeout) { |
scohennm | 0:8a169bac9011 | 101 | OKtoRead = true; |
scohennm | 0:8a169bac9011 | 102 | for (i=0; i<NUMREL; i++){ |
scohennm | 0:8a169bac9011 | 103 | Relays[i].write(RELAY_OFF); |
scohennm | 2:4535af993186 | 104 | capRST[i].write(HIGH); |
scohennm | 0:8a169bac9011 | 105 | } |
scohennm | 0:8a169bac9011 | 106 | } |
scohennm | 1:232e3f430f69 | 107 | |
scohennm | 0:8a169bac9011 | 108 | }// end forever while |
scohennm | 0:8a169bac9011 | 109 | } // end main |