Coursework

Committer:
sesa514652
Date:
Sat Jan 15 16:18:09 2022 +0000
Revision:
17:dee80717e423
Parent:
16:2646c1c4e62e
trying with FSM in main while 1;

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