altered scohennm's code to allow for 6 outputs

Dependencies:   SLCD mbed

Fork of CapKey_46_v2_button by Stanley Cohen

Committer:
scohennm
Date:
Wed Oct 29 22:13:25 2014 +0000
Revision:
1:232e3f430f69
Parent:
0:8a169bac9011
Child:
2:4535af993186
Two Channel test for KL36Z to Raspberry Pi  For use in testing Cretaceous Dating Game for NMMNHS

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 0:8a169bac9011 9 #define KEYHIT "KEY1"
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 1:232e3f430f69 19 #define NUMREL 2 // 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 0:8a169bac9011 23 // constants won't change. They're used here to
scohennm 1:232e3f430f69 24
scohennm 0:8a169bac9011 25
scohennm 0:8a169bac9011 26
scohennm 0:8a169bac9011 27 /*
scohennm 1:232e3f430f69 28 DigitalOut Relays[NUMREL] = {D10,D11,D12,D13}; // corresponds to touches 1,2,3,4
scohennm 1:232e3f430f69 29 DigitalIn capKeys[NUMREL] = {PTC3,D4,D6,D8};
scohennm 1:232e3f430f69 30 DigitalOut capRST[NUMREL] = {D3,D5,D7,D9};
scohennm 0:8a169bac9011 31 */
scohennm 1:232e3f430f69 32 // make two channel both buttons for testing
scohennm 1:232e3f430f69 33 DigitalOut Relays[NUMREL] = {D10,D11};
scohennm 1:232e3f430f69 34 DigitalIn capKeys[NUMREL] = {PTC3, PTC12}; // on board buttons
scohennm 1:232e3f430f69 35 DigitalOut capRST[NUMREL] = {D3,D5};
scohennm 1:232e3f430f69 36 DigitalOut LEDs[NUMREL] = {LED_GREEN, LED_RED};
scohennm 1:232e3f430f69 37 /*
scohennm 0:8a169bac9011 38 DigitalOut RLed(LED_RED);
scohennm 0:8a169bac9011 39 DigitalOut GLed(LED_GREEN);
scohennm 1:232e3f430f69 40 */
scohennm 0:8a169bac9011 41 Timer millis;
scohennm 0:8a169bac9011 42 Serial pc(USBTX, USBRX);
scohennm 0:8a169bac9011 43 SLCD slcd; //define LCD display
scohennm 0:8a169bac9011 44
scohennm 0:8a169bac9011 45 // variables will change:
scohennm 0:8a169bac9011 46 int buttonState = true;
scohennm 0:8a169bac9011 47 long relayTimeout;
scohennm 0:8a169bac9011 48 long capKeyTimeout;
scohennm 0:8a169bac9011 49 int LCDCounter = 0;
scohennm 0:8a169bac9011 50
scohennm 0:8a169bac9011 51 void LCDMess(char *lMess, float dWait){
scohennm 0:8a169bac9011 52 slcd.Home();
scohennm 0:8a169bac9011 53 slcd.clear();
scohennm 0:8a169bac9011 54 slcd.printf(lMess);
scohennm 0:8a169bac9011 55 wait(dWait);
scohennm 0:8a169bac9011 56 }
scohennm 0:8a169bac9011 57 // variable for reading the pushbutton status
scohennm 0:8a169bac9011 58
scohennm 0:8a169bac9011 59 int main() {
scohennm 0:8a169bac9011 60 int i;
scohennm 0:8a169bac9011 61 int buttonVal = 0;
scohennm 0:8a169bac9011 62 int buttonVal2 = 0;
scohennm 0:8a169bac9011 63 int ledState = LED_ON;
scohennm 0:8a169bac9011 64 char lcdData[10]; //buffer needs places dor decimal pt and colon
scohennm 0:8a169bac9011 65
scohennm 0:8a169bac9011 66 int OKtoRead = true;
scohennm 0:8a169bac9011 67 // initialize the LED pin as an output:
scohennm 0:8a169bac9011 68 millis.start();
scohennm 0:8a169bac9011 69 millis.reset();
scohennm 0:8a169bac9011 70
scohennm 0:8a169bac9011 71 pc.printf(PROGNAME);
scohennm 0:8a169bac9011 72 for (i=0; i<NUMREL; i++){
scohennm 0:8a169bac9011 73 Relays[i].write(RELAY_OFF);
scohennm 0:8a169bac9011 74 capRST[i].write(HIGH);
scohennm 1:232e3f430f69 75 LEDs[i].write(LED_OFF);
scohennm 0:8a169bac9011 76 }
scohennm 0:8a169bac9011 77
scohennm 0:8a169bac9011 78 while (true) {
scohennm 0:8a169bac9011 79 // For dramatic effect
scohennm 0:8a169bac9011 80 ledState = !ledState;
scohennm 0:8a169bac9011 81 LCDCounter++;
scohennm 0:8a169bac9011 82 LCDCounter = LCDCounter % COUNTERLIMIT;
scohennm 0:8a169bac9011 83 sprintf (lcdData,"%3d",LCDCounter);
scohennm 0:8a169bac9011 84 LCDMess(lcdData, LCDDELAY);
scohennm 1:232e3f430f69 85 //RLed.write(ledState);
scohennm 1:232e3f430f69 86 //GLed.write(ledState);
scohennm 0:8a169bac9011 87 //End dramatic effect
scohennm 0:8a169bac9011 88
scohennm 0:8a169bac9011 89
scohennm 0:8a169bac9011 90 // read the state of the pushbutton value:
scohennm 0:8a169bac9011 91 if(OKtoRead) {
scohennm 0:8a169bac9011 92 for (i=0; i<NUMREL;i++){
scohennm 1:232e3f430f69 93 buttonVal = ! capKeys[i].read();
scohennm 0:8a169bac9011 94 wait_ms(DEBOUNCE);
scohennm 1:232e3f430f69 95 buttonVal2 = ! capKeys[i].read();
scohennm 0:8a169bac9011 96 buttonVal = buttonVal && buttonVal2;
scohennm 0:8a169bac9011 97 if (buttonVal){
scohennm 0:8a169bac9011 98 LCDMess(KEYHIT, LCDDELAY);
scohennm 0:8a169bac9011 99 Relays[i].write(RELAY_ON);
scohennm 0:8a169bac9011 100 capRST[i].write(LOW); //reset the cap key
scohennm 1:232e3f430f69 101 LEDs[i].write(LED_ON);
scohennm 1:232e3f430f69 102 pc.printf("Relay = %d \n\r", i);
scohennm 0:8a169bac9011 103 millis.reset();
scohennm 0:8a169bac9011 104 relayTimeout = RESET_DELAY;
scohennm 0:8a169bac9011 105 OKtoRead = false;
scohennm 0:8a169bac9011 106 break;
scohennm 0:8a169bac9011 107 }
scohennm 0:8a169bac9011 108 }
scohennm 0:8a169bac9011 109 }//end OKtoRead
scohennm 1:232e3f430f69 110
scohennm 0:8a169bac9011 111 if (millis.read_ms() > relayTimeout) {
scohennm 0:8a169bac9011 112 OKtoRead = true;
scohennm 0:8a169bac9011 113 for (i=0; i<NUMREL; i++){
scohennm 0:8a169bac9011 114 Relays[i].write(RELAY_OFF);
scohennm 1:232e3f430f69 115 capRST[i].write(HIGH);
scohennm 1:232e3f430f69 116 LEDs[i].write(LED_OFF);
scohennm 0:8a169bac9011 117 }
scohennm 0:8a169bac9011 118 }
scohennm 1:232e3f430f69 119
scohennm 0:8a169bac9011 120 }// end forever while
scohennm 0:8a169bac9011 121 } // end main