Coursework

Committer:
sesa514652
Date:
Sun Jan 16 20:27:42 2022 +0000
Revision:
19:32f9fc794ef8
Parent:
18:bb36d96142dd
Delete off many old code,  switch in while loop working as expected now

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sesa514652 0:1f799c7cce2b 1 #include "mbed.h"
sesa514652 0:1f799c7cce2b 2 #include "Joystick.h"
sesa514652 0:1f799c7cce2b 3 #include "N5110.h"
sesa514652 0:1f799c7cce2b 4 #include "hcsr04.h"
sesa514652 3:6ecb75a2675c 5 #include "Piezo.h"
sesa514652 8:770d168713cc 6 #include "string"
sesa514652 12:ceea378d5691 7 // FSM Menu
sesa514652 12:ceea378d5691 8 // defines directions as 0/1. Note UPPERCASE
sesa514652 12:ceea378d5691 9 #define UP 0
sesa514652 12:ceea378d5691 10 #define DOWN 1
sesa514652 12:ceea378d5691 11 // set inital state
sesa514652 12:ceea378d5691 12 volatile int state = 0;
sesa514652 12:ceea378d5691 13 // set initial direction
sesa514652 12:ceea378d5691 14 int direction = UP;
sesa514652 12:ceea378d5691 15 // array of states in the FSM, each element is the output of the counter
sesa514652 12:ceea378d5691 16 // set the output in binary to make it easier, 0 is LED on, 1 is LED off
sesa514652 12:ceea378d5691 17 string fsm[4] = {"buttonA_isr","buttonB_isr","buttonAsss_isr","buttonA_isr"};
sesa514652 18:bb36d96142dd 18 volatile int PressA;
sesa514652 18:bb36d96142dd 19 volatile int PressB;
sesa514652 10:42e70b596099 20
sesa514652 5:9b2c976ca318 21 // y x button
sesa514652 0:1f799c7cce2b 22 Joystick joystick(PTB10,PTB11,PTC16);
sesa514652 0:1f799c7cce2b 23 HCSR04 sensor(D14, D15);
sesa514652 3:6ecb75a2675c 24 Piezo Buzzer(PTC10);
sesa514652 8:770d168713cc 25 //Bringing in buttons
sesa514652 8:770d168713cc 26 InterruptIn buttonA(PTB9);
sesa514652 8:770d168713cc 27 InterruptIn buttonB(PTD0);
sesa514652 8:770d168713cc 28 InterruptIn buttonX(PTC17);
sesa514652 8:770d168713cc 29 InterruptIn buttonY(PTC12);
sesa514652 11:1dec05b7d1c1 30 InterruptIn buttonStart(PTC5);
sesa514652 11:1dec05b7d1c1 31 InterruptIn buttonBack(PTB19);
sesa514652 11:1dec05b7d1c1 32 InterruptIn buttonLeft(PTB18);
sesa514652 11:1dec05b7d1c1 33 InterruptIn buttonRight(PTB3);
sesa514652 0:1f799c7cce2b 34
sesa514652 11:1dec05b7d1c1 35 // create an event queue
sesa514652 11:1dec05b7d1c1 36 EventQueue queue; // events are needed to get arround the printf issue
sesa514652 5:9b2c976ca318 37 //rows,cols
sesa514652 0:1f799c7cce2b 38 int sprite[8][5] = {
sesa514652 0:1f799c7cce2b 39 { 0,0,1,0,0 },
sesa514652 0:1f799c7cce2b 40 { 0,1,1,1,0 },
sesa514652 0:1f799c7cce2b 41 { 0,0,1,0,0 },
sesa514652 0:1f799c7cce2b 42 { 0,1,1,1,0 },
sesa514652 0:1f799c7cce2b 43 { 1,1,1,1,1 },
sesa514652 0:1f799c7cce2b 44 { 1,1,1,1,1 },
sesa514652 0:1f799c7cce2b 45 { 1,1,0,1,1 },
sesa514652 0:1f799c7cce2b 46 { 1,1,0,1,1 },
sesa514652 5:9b2c976ca318 47 };
sesa514652 11:1dec05b7d1c1 48 void init_K64F(); // Start K64fBoard
sesa514652 11:1dec05b7d1c1 49
sesa514652 11:1dec05b7d1c1 50 void buttonA_isr(); // Button A interrupt service routine
sesa514652 11:1dec05b7d1c1 51 void buttonB_isr(); // Button B interrupt service routine
sesa514652 11:1dec05b7d1c1 52 void buttonX_isr(); // Button X interrupt service routine
sesa514652 11:1dec05b7d1c1 53 void buttonY_isr(); // Button Y interrupt service routine
sesa514652 11:1dec05b7d1c1 54 void buttonStart_isr(); // Button Start interrupt service routine
sesa514652 11:1dec05b7d1c1 55 void buttonBack_isr(); // Button Back interrupt service routine
sesa514652 11:1dec05b7d1c1 56 void buttonLeft_isr(); // Button Left interrupt service routine
sesa514652 11:1dec05b7d1c1 57 void buttonRight_isr(); // Button Right interrupt service routine
sesa514652 11:1dec05b7d1c1 58 volatile int g_buttonA_flag = 0; // Global Flag
sesa514652 11:1dec05b7d1c1 59 volatile int g_buttonB_flag = 0; // Global Flag
sesa514652 11:1dec05b7d1c1 60 volatile int g_buttonX_flag = 0; // Global Flag
sesa514652 11:1dec05b7d1c1 61 volatile int g_buttonY_flag = 0; // Global Flag
sesa514652 11:1dec05b7d1c1 62 volatile int g_buttonStart_flag = 0; // Global Flag
sesa514652 11:1dec05b7d1c1 63 volatile int g_buttonBack_flag = 0; // Global Flag
sesa514652 11:1dec05b7d1c1 64 volatile int g_buttonLeft_flag = 0; // Global Flag
sesa514652 11:1dec05b7d1c1 65 volatile int g_buttonRight_flag = 0; // Global Flag
sesa514652 18:bb36d96142dd 66 int buttonCountA();
sesa514652 18:bb36d96142dd 67 int buttonCountB();
sesa514652 11:1dec05b7d1c1 68 //volatile int g_buttonA_counter = 0; // Global counter
sesa514652 8:770d168713cc 69 //Test function after research C++ lanuage 05/01/22
sesa514652 4:167ce930c9d5 70 int cube(int num){
sesa514652 11:1dec05b7d1c1 71 return num*num;
sesa514652 5:9b2c976ca318 72 };
sesa514652 10:42e70b596099 73 // Menu Items
sesa514652 10:42e70b596099 74 int page1;
sesa514652 10:42e70b596099 75 int page2;
sesa514652 10:42e70b596099 76 int page3;
sesa514652 10:42e70b596099 77 string Listitem1 = "Game"; // guess distance
sesa514652 10:42e70b596099 78 string Listitem2 = "Measure"; // measure distance of object
sesa514652 10:42e70b596099 79 string Listitem3 = "Detect"; // alarm when object is dectected
sesa514652 5:9b2c976ca318 80 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
sesa514652 10:42e70b596099 81
sesa514652 0:1f799c7cce2b 82 int main() {
sesa514652 18:bb36d96142dd 83 //initialise Joystick
sesa514652 19:32f9fc794ef8 84 joystick.init();
sesa514652 19:32f9fc794ef8 85 //first need to initialise display
sesa514652 19:32f9fc794ef8 86 lcd.init();
sesa514652 19:32f9fc794ef8 87 //change set contrast in range 0.0 to 1.0
sesa514652 19:32f9fc794ef8 88 //0.5 appears to be a good starting point
sesa514652 19:32f9fc794ef8 89 lcd.setContrast(0.5);
sesa514652 5:9b2c976ca318 90
sesa514652 19:32f9fc794ef8 91 lcd.clear();
sesa514652 11:1dec05b7d1c1 92 // create a thread that'll run the event queue's dispatch function
sesa514652 11:1dec05b7d1c1 93 Thread eventThread;
sesa514652 11:1dec05b7d1c1 94 eventThread.start(callback(&queue, &EventQueue::dispatch_forever));
sesa514652 11:1dec05b7d1c1 95
sesa514652 11:1dec05b7d1c1 96 buttonA.rise(queue.event(&buttonA_isr)); // This is used to call the function putting it in queue allowing the screen toupdat no muxt error
sesa514652 11:1dec05b7d1c1 97 buttonB.rise(queue.event(&buttonB_isr));
sesa514652 11:1dec05b7d1c1 98 buttonX.rise(queue.event(&buttonX_isr));
sesa514652 11:1dec05b7d1c1 99 buttonY.rise(queue.event(&buttonY_isr));
sesa514652 11:1dec05b7d1c1 100 buttonStart.rise(queue.event(&buttonStart_isr)); // This is used to call the function putting it in queue allowing the screen toupdat no muxt error
sesa514652 11:1dec05b7d1c1 101 buttonBack.rise(queue.event(&buttonBack_isr));
sesa514652 11:1dec05b7d1c1 102 buttonLeft.rise(queue.event(&buttonLeft_isr));
sesa514652 11:1dec05b7d1c1 103 buttonRight.rise(queue.event(&buttonRight_isr));
sesa514652 19:32f9fc794ef8 104
sesa514652 12:ceea378d5691 105 // Button A is connected between the pin and 3.3 V, we therefore need to turn on the internal pull-down resister
sesa514652 8:770d168713cc 106 buttonA.mode(PullDown);
sesa514652 10:42e70b596099 107 // Button B is connected between the pin and 3.3 V, we therefore need to turn on the internal pull-down resister
sesa514652 10:42e70b596099 108 buttonB.mode(PullDown);
sesa514652 10:42e70b596099 109 // Button X is connected between the pin and 3.3 V, we therefore need to turn on the internal pull-down resister
sesa514652 10:42e70b596099 110 buttonX.mode(PullDown);
sesa514652 10:42e70b596099 111 // Button Y is connected between the pin and 3.3 V, we therefore need to turn on the internal pull-down resister
sesa514652 10:42e70b596099 112 buttonY.mode(PullDown);
sesa514652 11:1dec05b7d1c1 113 // Button Start is connected between the pin and 3.3 V, we therefore need to turn on the internal pull-down resister
sesa514652 11:1dec05b7d1c1 114 buttonStart.mode(PullDown);
sesa514652 11:1dec05b7d1c1 115 // Button Back is connected between the pin and 3.3 V, we therefore need to turn on the internal pull-down resister
sesa514652 11:1dec05b7d1c1 116 buttonBack.mode(PullDown);
sesa514652 11:1dec05b7d1c1 117 // Button Left is connected between the pin and 3.3 V, we therefore need to turn on the internal pull-down resister
sesa514652 11:1dec05b7d1c1 118 buttonLeft.mode(PullDown);
sesa514652 11:1dec05b7d1c1 119 // Button Right is connected between the pin and 3.3 V, we therefore need to turn on the internal pull-down resister
sesa514652 11:1dec05b7d1c1 120 buttonRight.mode(PullDown);
sesa514652 18:bb36d96142dd 121
sesa514652 0:1f799c7cce2b 122 while(1) {
sesa514652 11:1dec05b7d1c1 123 int button_counter;
sesa514652 10:42e70b596099 124
sesa514652 19:32f9fc794ef8 125 switch(PressA){
sesa514652 19:32f9fc794ef8 126 case 1:
sesa514652 19:32f9fc794ef8 127 PressA= 1;
sesa514652 19:32f9fc794ef8 128 lcd.clear();
sesa514652 19:32f9fc794ef8 129 lcd.printString("Menu 1",0,1);
sesa514652 19:32f9fc794ef8 130 lcd.drawRect(0,0,40,10,FILL_TRANSPARENT);
sesa514652 19:32f9fc794ef8 131 lcd.refresh();
sesa514652 19:32f9fc794ef8 132 wait_ms(20);
sesa514652 19:32f9fc794ef8 133
sesa514652 19:32f9fc794ef8 134 break;
sesa514652 19:32f9fc794ef8 135
sesa514652 19:32f9fc794ef8 136 case 2:
sesa514652 19:32f9fc794ef8 137 PressA= 2;
sesa514652 19:32f9fc794ef8 138 lcd.clear();
sesa514652 19:32f9fc794ef8 139 lcd.printString("Menu 2",0,0);
sesa514652 19:32f9fc794ef8 140 lcd.refresh();
sesa514652 19:32f9fc794ef8 141 Buzzer.play(200,120);
sesa514652 5:9b2c976ca318 142 wait_ms(5);
sesa514652 5:9b2c976ca318 143 Buzzer.play(200,120);
sesa514652 19:32f9fc794ef8 144 break;
sesa514652 19:32f9fc794ef8 145 case 3:
sesa514652 19:32f9fc794ef8 146 PressA= 3;
sesa514652 19:32f9fc794ef8 147 lcd.clear();
sesa514652 19:32f9fc794ef8 148 lcd.printString("Menu 3",0,0);
sesa514652 19:32f9fc794ef8 149 lcd.refresh();
sesa514652 19:32f9fc794ef8 150 wait_ms(30);
sesa514652 19:32f9fc794ef8 151 break;
sesa514652 16:2646c1c4e62e 152 }
sesa514652 19:32f9fc794ef8 153 }
sesa514652 19:32f9fc794ef8 154 }
sesa514652 18:bb36d96142dd 155
sesa514652 18:bb36d96142dd 156 int buttonCountA(){
sesa514652 18:bb36d96142dd 157 PressA++;
sesa514652 18:bb36d96142dd 158 if (PressA>3){
sesa514652 18:bb36d96142dd 159 PressA= 0;
sesa514652 18:bb36d96142dd 160 }
sesa514652 18:bb36d96142dd 161 return PressA;
sesa514652 18:bb36d96142dd 162 }
sesa514652 18:bb36d96142dd 163 int buttonCountB(){
sesa514652 18:bb36d96142dd 164 PressB++;
sesa514652 18:bb36d96142dd 165 if (PressB>3){
sesa514652 18:bb36d96142dd 166 PressB= 0;
sesa514652 18:bb36d96142dd 167 }
sesa514652 18:bb36d96142dd 168 return PressB;
sesa514652 18:bb36d96142dd 169 }
sesa514652 15:234321e80678 170
sesa514652 12:ceea378d5691 171 //Button A event-triggered interrupt
sesa514652 10:42e70b596099 172 void buttonA_isr()
sesa514652 10:42e70b596099 173 {
sesa514652 12:ceea378d5691 174
sesa514652 18:bb36d96142dd 175 long distanced = sensor.distance();
sesa514652 18:bb36d96142dd 176 buttonCountA();
sesa514652 18:bb36d96142dd 177
sesa514652 12:ceea378d5691 178
sesa514652 12:ceea378d5691 179 g_buttonA_flag = 1; // set flag in ISR
sesa514652 12:ceea378d5691 180
sesa514652 18:bb36d96142dd 181 printf("press count = %i\n",PressA);
sesa514652 19:32f9fc794ef8 182 }
sesa514652 10:42e70b596099 183 //Button B event-triggered interrupt
sesa514652 10:42e70b596099 184 void buttonB_isr()
sesa514652 10:42e70b596099 185 {
sesa514652 18:bb36d96142dd 186 buttonCountB();
sesa514652 10:42e70b596099 187 g_buttonB_flag = 1; // set flag in ISR
sesa514652 11:1dec05b7d1c1 188 lcd.clear();
sesa514652 11:1dec05b7d1c1 189 lcd.printString("Button B Pressed",0,0);
sesa514652 11:1dec05b7d1c1 190 lcd.refresh(); // set flag in ISR
sesa514652 18:bb36d96142dd 191 printf("press count = %i\n",PressB);
sesa514652 10:42e70b596099 192 }
sesa514652 10:42e70b596099 193 //Button X event-triggered interrupt
sesa514652 10:42e70b596099 194 void buttonX_isr()
sesa514652 10:42e70b596099 195 {
sesa514652 10:42e70b596099 196 g_buttonX_flag = 1; // set flag in ISR
sesa514652 11:1dec05b7d1c1 197 lcd.clear();
sesa514652 11:1dec05b7d1c1 198 lcd.printString("Button X Pressed",0,0);
sesa514652 11:1dec05b7d1c1 199 lcd.refresh(); // set flag in ISR
sesa514652 10:42e70b596099 200 }
sesa514652 10:42e70b596099 201 //Button Y event-triggered interrupt
sesa514652 10:42e70b596099 202 void buttonY_isr()
sesa514652 10:42e70b596099 203 {
sesa514652 10:42e70b596099 204 g_buttonY_flag = 1; // set flag in ISR
sesa514652 11:1dec05b7d1c1 205 lcd.clear();
sesa514652 11:1dec05b7d1c1 206 lcd.printString("Button Y Pressed",0,0);
sesa514652 11:1dec05b7d1c1 207 lcd.refresh(); // set flag in ISR
sesa514652 10:42e70b596099 208 }
sesa514652 11:1dec05b7d1c1 209 //Button Start event-triggered interrupt
sesa514652 11:1dec05b7d1c1 210 void buttonStart_isr()
sesa514652 11:1dec05b7d1c1 211 {
sesa514652 11:1dec05b7d1c1 212 g_buttonStart_flag = 1; // set flag in ISR
sesa514652 11:1dec05b7d1c1 213 lcd.clear();
sesa514652 11:1dec05b7d1c1 214 lcd.printString("Button Start Pressed",0,0);
sesa514652 11:1dec05b7d1c1 215 lcd.refresh(); // set flag in ISR
sesa514652 11:1dec05b7d1c1 216 }
sesa514652 11:1dec05b7d1c1 217 //Button Back event-triggered interrupt
sesa514652 11:1dec05b7d1c1 218 void buttonBack_isr()
sesa514652 11:1dec05b7d1c1 219 {
sesa514652 11:1dec05b7d1c1 220 g_buttonBack_flag = 1; // set flag in ISR
sesa514652 11:1dec05b7d1c1 221 lcd.clear();
sesa514652 11:1dec05b7d1c1 222 lcd.printString("Button Back Pressed",0,0);
sesa514652 11:1dec05b7d1c1 223 lcd.refresh(); // set flag in ISR
sesa514652 11:1dec05b7d1c1 224 }
sesa514652 11:1dec05b7d1c1 225 //Button Left event-triggered interrupt
sesa514652 11:1dec05b7d1c1 226 void buttonLeft_isr()
sesa514652 11:1dec05b7d1c1 227 {
sesa514652 11:1dec05b7d1c1 228 g_buttonLeft_flag = 1; // set flag in ISR
sesa514652 11:1dec05b7d1c1 229 lcd.clear();
sesa514652 11:1dec05b7d1c1 230 lcd.printString("Button Left Pressed",0,0);
sesa514652 11:1dec05b7d1c1 231 lcd.refresh(); // set flag in ISR
sesa514652 11:1dec05b7d1c1 232 }
sesa514652 11:1dec05b7d1c1 233 //Button Right event-triggered interrupt
sesa514652 11:1dec05b7d1c1 234 void buttonRight_isr()
sesa514652 11:1dec05b7d1c1 235 {
sesa514652 11:1dec05b7d1c1 236 g_buttonRight_flag = 1; // set flag in ISR
sesa514652 11:1dec05b7d1c1 237 lcd.clear();
sesa514652 11:1dec05b7d1c1 238 lcd.printString("Button Right Pressed",0,0);
sesa514652 11:1dec05b7d1c1 239 lcd.refresh(); // set flag in ISR
sesa514652 11:1dec05b7d1c1 240 }