Connect pin 18 to vout to act as slide button for serial link

Dependencies:   mbed

Committer:
andrewbw01
Date:
Wed Feb 10 11:17:24 2021 +0000
Revision:
0:fa9255e09139
working serial link, seven segment display

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andrewbw01 0:fa9255e09139 1 #include "mbed.h"
andrewbw01 0:fa9255e09139 2
andrewbw01 0:fa9255e09139 3 Serial pc(USBTX, USBRX); //create serail comms object
andrewbw01 0:fa9255e09139 4
andrewbw01 0:fa9255e09139 5 BusOut LED_Disp(p7,p11,p9,p8,p5,p6,p10,p12);
andrewbw01 0:fa9255e09139 6
andrewbw01 0:fa9255e09139 7 //digital inputs
andrewbw01 0:fa9255e09139 8 DigitalIn slide_button(p17); // set p17 high if buttons controls 7 seg
andrewbw01 0:fa9255e09139 9 DigitalIn slide_putty(p18);
andrewbw01 0:fa9255e09139 10
andrewbw01 0:fa9255e09139 11 // interrupts in
andrewbw01 0:fa9255e09139 12 InterruptIn button_up(p14); //assign interrupt to 14 and 15
andrewbw01 0:fa9255e09139 13 InterruptIn button_down(p15);
andrewbw01 0:fa9255e09139 14
andrewbw01 0:fa9255e09139 15 // digital outputs
andrewbw01 0:fa9255e09139 16 DigitalOut test_blink(LED1);
andrewbw01 0:fa9255e09139 17
andrewbw01 0:fa9255e09139 18 // general global variable
andrewbw01 0:fa9255e09139 19 int counter1; //global counter value
andrewbw01 0:fa9255e09139 20
andrewbw01 0:fa9255e09139 21 void Increment_up(void); //ISR to be assigned to button_up interrupt
andrewbw01 0:fa9255e09139 22 void Increment_down(void);
andrewbw01 0:fa9255e09139 23 void DisplayNumber(int); //function to display number on seven segment
andrewbw01 0:fa9255e09139 24
andrewbw01 0:fa9255e09139 25 int main()
andrewbw01 0:fa9255e09139 26 {
andrewbw01 0:fa9255e09139 27 int putty_char; // charqacter read from putty as integer (ASCII)
andrewbw01 0:fa9255e09139 28
andrewbw01 0:fa9255e09139 29 button_up.rise(&Increment_up); //attach adress of ISR to interrupt
andrewbw01 0:fa9255e09139 30 button_down.rise(&Increment_down);
andrewbw01 0:fa9255e09139 31
andrewbw01 0:fa9255e09139 32 counter1 = 0; // Initialise global counter variable
andrewbw01 0:fa9255e09139 33 putty_char = '0'; //initialize local putty character variable
andrewbw01 0:fa9255e09139 34 DisplayNumber(0); // on start up the display is 0
andrewbw01 0:fa9255e09139 35
andrewbw01 0:fa9255e09139 36 while(1)
andrewbw01 0:fa9255e09139 37 {
andrewbw01 0:fa9255e09139 38 if(slide_putty == 1)
andrewbw01 0:fa9255e09139 39 {
andrewbw01 0:fa9255e09139 40 if(pc.readable()==1) // check for character on serial port
andrewbw01 0:fa9255e09139 41 {
andrewbw01 0:fa9255e09139 42 putty_char = pc.getc(); // read character from putty
andrewbw01 0:fa9255e09139 43
andrewbw01 0:fa9255e09139 44 pc.putc(putty_char); // echo character back to putty
andrewbw01 0:fa9255e09139 45
andrewbw01 0:fa9255e09139 46 // check if within number range
andrewbw01 0:fa9255e09139 47 if (putty_char >= '0' && putty_char <= '9')
andrewbw01 0:fa9255e09139 48 {
andrewbw01 0:fa9255e09139 49 test_blink = 1; // test sequence
andrewbw01 0:fa9255e09139 50 wait(0.2);
andrewbw01 0:fa9255e09139 51 test_blink = 0;
andrewbw01 0:fa9255e09139 52
andrewbw01 0:fa9255e09139 53 DisplayNumber (putty_char-48); // convert ASKII character to number
andrewbw01 0:fa9255e09139 54 }
andrewbw01 0:fa9255e09139 55 }
andrewbw01 0:fa9255e09139 56 }
andrewbw01 0:fa9255e09139 57 }
andrewbw01 0:fa9255e09139 58 }
andrewbw01 0:fa9255e09139 59
andrewbw01 0:fa9255e09139 60
andrewbw01 0:fa9255e09139 61 // Interrupt function to increment counter
andrewbw01 0:fa9255e09139 62 void Increment_up(void)
andrewbw01 0:fa9255e09139 63 {
andrewbw01 0:fa9255e09139 64 if(slide_putty) // Return to main if slide switch is in putty position
andrewbw01 0:fa9255e09139 65 return;
andrewbw01 0:fa9255e09139 66
andrewbw01 0:fa9255e09139 67 counter1++; //increment counter
andrewbw01 0:fa9255e09139 68
andrewbw01 0:fa9255e09139 69 if(counter1 <0) // check for min value
andrewbw01 0:fa9255e09139 70 counter1 = 0;
andrewbw01 0:fa9255e09139 71
andrewbw01 0:fa9255e09139 72 if(counter1 >9) //check for max value
andrewbw01 0:fa9255e09139 73 counter1 = 9;
andrewbw01 0:fa9255e09139 74
andrewbw01 0:fa9255e09139 75 DisplayNumber(counter1); //display counter1 number on seven segment
andrewbw01 0:fa9255e09139 76 wait(0.3); //debounce timer
andrewbw01 0:fa9255e09139 77
andrewbw01 0:fa9255e09139 78 }
andrewbw01 0:fa9255e09139 79
andrewbw01 0:fa9255e09139 80 void Increment_down(void)
andrewbw01 0:fa9255e09139 81 {
andrewbw01 0:fa9255e09139 82 if(slide_putty)
andrewbw01 0:fa9255e09139 83 return;
andrewbw01 0:fa9255e09139 84
andrewbw01 0:fa9255e09139 85 counter1--;
andrewbw01 0:fa9255e09139 86
andrewbw01 0:fa9255e09139 87 if(counter1 <0)
andrewbw01 0:fa9255e09139 88 counter1 = 0;
andrewbw01 0:fa9255e09139 89
andrewbw01 0:fa9255e09139 90 if(counter1 >9)
andrewbw01 0:fa9255e09139 91 counter1 = 9;
andrewbw01 0:fa9255e09139 92
andrewbw01 0:fa9255e09139 93 DisplayNumber(counter1);
andrewbw01 0:fa9255e09139 94 wait(0.3);
andrewbw01 0:fa9255e09139 95 }
andrewbw01 0:fa9255e09139 96
andrewbw01 0:fa9255e09139 97 //funtion to display counter1 on seven segment
andrewbw01 0:fa9255e09139 98 void DisplayNumber(int num)
andrewbw01 0:fa9255e09139 99 {
andrewbw01 0:fa9255e09139 100 switch(num)
andrewbw01 0:fa9255e09139 101 {
andrewbw01 0:fa9255e09139 102 case 0:
andrewbw01 0:fa9255e09139 103 LED_Disp = ~0x3F;
andrewbw01 0:fa9255e09139 104 break;
andrewbw01 0:fa9255e09139 105 case 1:
andrewbw01 0:fa9255e09139 106 LED_Disp = ~0x06;
andrewbw01 0:fa9255e09139 107 break;
andrewbw01 0:fa9255e09139 108 case 2:
andrewbw01 0:fa9255e09139 109 LED_Disp = ~0x5B;
andrewbw01 0:fa9255e09139 110 break;
andrewbw01 0:fa9255e09139 111 case 3:
andrewbw01 0:fa9255e09139 112 LED_Disp = ~0x4F;
andrewbw01 0:fa9255e09139 113 break;
andrewbw01 0:fa9255e09139 114 case 4:
andrewbw01 0:fa9255e09139 115 LED_Disp = ~0x66;
andrewbw01 0:fa9255e09139 116 break;
andrewbw01 0:fa9255e09139 117 case 5:
andrewbw01 0:fa9255e09139 118 LED_Disp = ~0x6D;
andrewbw01 0:fa9255e09139 119 break;
andrewbw01 0:fa9255e09139 120 case 6:
andrewbw01 0:fa9255e09139 121 LED_Disp = ~0x7D;
andrewbw01 0:fa9255e09139 122 break;
andrewbw01 0:fa9255e09139 123 case 7:
andrewbw01 0:fa9255e09139 124 LED_Disp = ~0x07;
andrewbw01 0:fa9255e09139 125 break;
andrewbw01 0:fa9255e09139 126 case 8:
andrewbw01 0:fa9255e09139 127 LED_Disp = ~0x7F;
andrewbw01 0:fa9255e09139 128 break;
andrewbw01 0:fa9255e09139 129 case 9:
andrewbw01 0:fa9255e09139 130 LED_Disp = ~0x67;
andrewbw01 0:fa9255e09139 131 break;
andrewbw01 0:fa9255e09139 132 }
andrewbw01 0:fa9255e09139 133 }