Coursework

Committer:
sesa514652
Date:
Thu Jan 06 20:42:44 2022 +0000
Revision:
8:770d168713cc
Parent:
7:ce70a873aa70
Child:
9:cdd7d9a123f9
Button's included to complete testing of interrupt  for user input

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 5:9b2c976ca318 7 // y x button
sesa514652 0:1f799c7cce2b 8 Joystick joystick(PTB10,PTB11,PTC16);
sesa514652 0:1f799c7cce2b 9 HCSR04 sensor(D14, D15);
sesa514652 3:6ecb75a2675c 10 Piezo Buzzer(PTC10);
sesa514652 8:770d168713cc 11 //Bringing in buttons
sesa514652 8:770d168713cc 12 InterruptIn buttonA(PTB9);
sesa514652 8:770d168713cc 13 InterruptIn buttonB(PTD0);
sesa514652 8:770d168713cc 14 InterruptIn buttonX(PTC17);
sesa514652 8:770d168713cc 15 InterruptIn buttonY(PTC12);
sesa514652 0:1f799c7cce2b 16
sesa514652 5:9b2c976ca318 17 //rows,cols
sesa514652 0:1f799c7cce2b 18 int sprite[8][5] = {
sesa514652 0:1f799c7cce2b 19 { 0,0,1,0,0 },
sesa514652 0:1f799c7cce2b 20 { 0,1,1,1,0 },
sesa514652 0:1f799c7cce2b 21 { 0,0,1,0,0 },
sesa514652 0:1f799c7cce2b 22 { 0,1,1,1,0 },
sesa514652 0:1f799c7cce2b 23 { 1,1,1,1,1 },
sesa514652 0:1f799c7cce2b 24 { 1,1,1,1,1 },
sesa514652 0:1f799c7cce2b 25 { 1,1,0,1,1 },
sesa514652 0:1f799c7cce2b 26 { 1,1,0,1,1 },
sesa514652 5:9b2c976ca318 27 };
sesa514652 8:770d168713cc 28 void init_K64F();
sesa514652 8:770d168713cc 29 // Button A interrupt service routine
sesa514652 8:770d168713cc 30 void buttonA_isr();
sesa514652 8:770d168713cc 31 volatile int g_buttonA_flag = 0;
sesa514652 8:770d168713cc 32 //Test function after research C++ lanuage 05/01/22
sesa514652 4:167ce930c9d5 33 int cube(int num){
sesa514652 4:167ce930c9d5 34 int result;
sesa514652 4:167ce930c9d5 35 result = num*num;
sesa514652 4:167ce930c9d5 36 return result;
sesa514652 5:9b2c976ca318 37 };
sesa514652 4:167ce930c9d5 38
sesa514652 5:9b2c976ca318 39 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
sesa514652 5:9b2c976ca318 40
sesa514652 0:1f799c7cce2b 41 int main() {
sesa514652 5:9b2c976ca318 42 //initialise Joystic
sesa514652 5:9b2c976ca318 43 joystick.init();
sesa514652 5:9b2c976ca318 44
sesa514652 5:9b2c976ca318 45 //first need to initialise display
sesa514652 5:9b2c976ca318 46 lcd.init();
sesa514652 8:770d168713cc 47
sesa514652 8:770d168713cc 48 // 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 49 buttonA.mode(PullDown);
sesa514652 8:770d168713cc 50
sesa514652 8:770d168713cc 51 // It will return 0 by default and a 1 when pressed i.e. cause a rising edge
sesa514652 8:770d168713cc 52 buttonA.rise(&buttonA_isr);
sesa514652 8:770d168713cc 53
sesa514652 8:770d168713cc 54
sesa514652 5:9b2c976ca318 55
sesa514652 5:9b2c976ca318 56 //change set contrast in range 0.0 to 1.0
sesa514652 5:9b2c976ca318 57 //0.5 appears to be a good starting point
sesa514652 5:9b2c976ca318 58 lcd.setContrast(0.5);
sesa514652 5:9b2c976ca318 59
sesa514652 5:9b2c976ca318 60 //Buzzer.period(10.0f);
sesa514652 5:9b2c976ca318 61 //Buzzer.pulsewidth(1);
sesa514652 6:f7f30e0e3bed 62 //Test Struct after research 05/01/22
sesa514652 6:f7f30e0e3bed 63 struct ObjectDefine{
sesa514652 7:ce70a873aa70 64 int qwer;
sesa514652 6:f7f30e0e3bed 65 float Distance;
sesa514652 7:ce70a873aa70 66 char te;
sesa514652 7:ce70a873aa70 67 double dubs;
sesa514652 7:ce70a873aa70 68 string namestruct;
sesa514652 8:770d168713cc 69 // string ;
sesa514652 6:f7f30e0e3bed 70 };
sesa514652 7:ce70a873aa70 71 // Test Class 06/01/22
sesa514652 7:ce70a873aa70 72 class myClass{
sesa514652 7:ce70a873aa70 73 public:
sesa514652 7:ce70a873aa70 74 string nameclass ;
sesa514652 7:ce70a873aa70 75 double dubss;
sesa514652 7:ce70a873aa70 76 int inty;
sesa514652 7:ce70a873aa70 77 };
sesa514652 7:ce70a873aa70 78 myClass Class1;
sesa514652 7:ce70a873aa70 79 Class1.nameclass ="firstclass";
sesa514652 6:f7f30e0e3bed 80 ObjectDefine Object1;
sesa514652 7:ce70a873aa70 81 Object1.qwer = 12;
sesa514652 6:f7f30e0e3bed 82 Object1.Distance = 34;
sesa514652 7:ce70a873aa70 83 Object1.te = 'A';
sesa514652 7:ce70a873aa70 84 Object1.dubs = 23;
sesa514652 7:ce70a873aa70 85 Object1.namestruct = "name";
sesa514652 0:1f799c7cce2b 86 while(1) {
sesa514652 5:9b2c976ca318 87 //Tune(Buzzer,So6,8);
sesa514652 5:9b2c976ca318 88 //Stop_tunes(Buzzer);
sesa514652 8:770d168713cc 89 //Section of code to try to get the button press to be recorded
sesa514652 8:770d168713cc 90 bool button = buttonA.read();
sesa514652 8:770d168713cc 91 printf("%f\n", g_buttonA_flag );
sesa514652 8:770d168713cc 92
sesa514652 5:9b2c976ca318 93 Buzzer.play(200,120);
sesa514652 5:9b2c976ca318 94 wait_ms(5);
sesa514652 5:9b2c976ca318 95 Buzzer.play(200,120);
sesa514652 1:757728321abd 96 long distanced = sensor.distance();
sesa514652 1:757728321abd 97 if (distanced >= 400 || distanced <= 2)
sesa514652 5:9b2c976ca318 98 {
sesa514652 1:757728321abd 99 printf("Out of range");
sesa514652 5:9b2c976ca318 100 //Calling dummy function 05/01/22
sesa514652 4:167ce930c9d5 101 int answer = cube(2);
sesa514652 5:9b2c976ca318 102 printf("%f\n",answer);
sesa514652 1:757728321abd 103 wait(1.0);
sesa514652 5:9b2c976ca318 104 }
sesa514652 5:9b2c976ca318 105 else
sesa514652 5:9b2c976ca318 106 {
sesa514652 5:9b2c976ca318 107 printf("Distance : %d cm",distanced);
sesa514652 5:9b2c976ca318 108 wait(1.0); // 1 sec
sesa514652 1:757728321abd 109 }
sesa514652 5:9b2c976ca318 110 lcd.drawCircle(WIDTH/2,HEIGHT/2,distanced,FILL_BLACK);
sesa514652 5:9b2c976ca318 111 //lcd.refresh must be used to update the lcd Display
sesa514652 5:9b2c976ca318 112 lcd.refresh();
sesa514652 5:9b2c976ca318 113 wait(5.0);
sesa514652 5:9b2c976ca318 114 //these are default settings so not strictly needed
sesa514652 0:1f799c7cce2b 115 lcd.normalMode(); // normal colour mode
sesa514652 5:9b2c976ca318 116 lcd.setBrightness(0.5); // put LED backlight on 50%
sesa514652 0:1f799c7cce2b 117 lcd.clear();
sesa514652 0:1f799c7cce2b 118 lcd.printString("Hello, World!",0,0);
sesa514652 0:1f799c7cce2b 119 Vector2D coord = joystick.get_coord();
sesa514652 0:1f799c7cce2b 120 lcd.refresh();
sesa514652 0:1f799c7cce2b 121 printf("Coord = %f,%f\n",coord.x,coord.y);
sesa514652 0:1f799c7cce2b 122 char buffer[14];
sesa514652 0:1f799c7cce2b 123 Vector2D mapped_coord = joystick.get_mapped_coord();
sesa514652 0:1f799c7cce2b 124 printf("Mapped coord = %f,%f\n",mapped_coord.x,mapped_coord.y);
sesa514652 0:1f799c7cce2b 125
sesa514652 5:9b2c976ca318 126 int length = sprintf(buffer,"T = %2f",coord.x);
sesa514652 5:9b2c976ca318 127 //it is important the format specifier ensures the length will fit in the buffer
sesa514652 0:1f799c7cce2b 128 if (length <= 14) // if string will fit on display (assuming printing at x=0)
sesa514652 5:9b2c976ca318 129 lcd.printString(buffer,0,1); // display on screen
sesa514652 0:1f799c7cce2b 130 lcd.refresh();
sesa514652 5:9b2c976ca318 131 lcd.clear();
sesa514652 5:9b2c976ca318 132 //times by 50 to try get the point moving across screen
sesa514652 0:1f799c7cce2b 133 float x50 = mapped_coord.x*5;
sesa514652 0:1f799c7cce2b 134 float y50 = mapped_coord.y*8;
sesa514652 5:9b2c976ca318 135 //to see what the values are
sesa514652 5:9b2c976ca318 136 printf(" *50 = %f,%f\n",x50,y50);
sesa514652 5:9b2c976ca318 137 //example of how to draw circles
sesa514652 1:757728321abd 138 lcd.printChar('o',WIDTH/2,HEIGHT/2);
sesa514652 5:9b2c976ca318 139 lcd.refresh();
sesa514652 0:1f799c7cce2b 140 float mag = joystick.get_mag();
sesa514652 0:1f799c7cce2b 141 float angle = joystick.get_angle();
sesa514652 0:1f799c7cce2b 142 printf("Mag = %f Angle = %f\n",mag,angle);
sesa514652 0:1f799c7cce2b 143 Direction d = joystick.get_direction();
sesa514652 0:1f799c7cce2b 144 printf("Direction = %i\n",d);
sesa514652 0:1f799c7cce2b 145 if (joystick.button_pressed() ) {
sesa514652 0:1f799c7cce2b 146 printf("Button Pressed\n");
sesa514652 0:1f799c7cce2b 147 }
sesa514652 8:770d168713cc 148
sesa514652 8:770d168713cc 149 }
sesa514652 8:770d168713cc 150 }
sesa514652 8:770d168713cc 151 // Button A event-triggered interrupt
sesa514652 8:770d168713cc 152 void buttonA_isr()
sesa514652 8:770d168713cc 153 {
sesa514652 8:770d168713cc 154 g_buttonA_flag = 1; // set flag in ISR
sesa514652 8:770d168713cc 155 }