altered scohennm's code to allow for 6 outputs

Dependencies:   SLCD mbed

Fork of CapKey_46_v2_button by Stanley Cohen

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?

UserRevisionLine numberNew 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