Coursework

main.cpp

Committer:
sesa514652
Date:
2022-01-15
Revision:
17:dee80717e423
Parent:
16:2646c1c4e62e

File content as of revision 17:dee80717e423:

#include "mbed.h"
#include "Joystick.h"
#include "N5110.h"
#include "hcsr04.h"
#include "Piezo.h"
#include "string"
// FSM Menu 
// defines directions as 0/1. Note UPPERCASE
#define UP 0
#define DOWN 1
// set inital state
  volatile  int state = 0;
    // set initial direction
    int direction = UP;
// array of states in the FSM, each element is the output of the counter
// set the output in binary to make it easier, 0 is LED on, 1 is LED off
string fsm[4] = {"buttonA_isr","buttonB_isr","buttonAsss_isr","buttonA_isr"};
volatile int Press; // Used to track the press
volatile int g_buttonA_flag = 0; // Global Flag
volatile int g_buttonB_flag = 0; // Global Flag
volatile int g_buttonX_flag = 0; // Global Flag
volatile int g_buttonY_flag = 0; // Global Flag
volatile int g_buttonStart_flag = 0; // Global Flag
volatile int g_buttonBack_flag = 0; // Global Flag
volatile int g_buttonLeft_flag = 0; // Global Flag
volatile int g_buttonRight_flag = 0; // Global Flag

// y  x  button
Joystick joystick(PTB10,PTB11,PTC16);
HCSR04 sensor(D14, D15); 
Piezo Buzzer(PTC10);
//Bringing in buttons as interuppts to allow change to be detected during operation
InterruptIn buttonA(PTB9);
InterruptIn buttonB(PTD0);
InterruptIn buttonX(PTC17);
InterruptIn buttonY(PTC12);
InterruptIn buttonStart(PTC5);
InterruptIn buttonBack(PTB19);
InterruptIn buttonLeft(PTB18);
InterruptIn buttonRight(PTB3);

// create an event queue
EventQueue queue; // Event Queue is used to get around interrupt issue with Printf and LCDprint issues 
//rows,cols
int sprite[8][5] =   {
    { 0,0,1,0,0 },
    { 0,1,1,1,0 },
    { 0,0,1,0,0 },
    { 0,1,1,1,0 },
    { 1,1,1,1,1 },
    { 1,1,1,1,1 },
    { 1,1,0,1,1 },
    { 1,1,0,1,1 },
      };
void init_K64F();   //  Start K64fBoard
void buttonA_isr(); // Button A interrupt service routine
void buttonB_isr(); // Button B interrupt service routine
void buttonX_isr(); // Button X interrupt service routine
void buttonY_isr(); // Button Y interrupt service routine
void buttonStart_isr(); // Button Start interrupt service routine
void buttonBack_isr(); // Button Back interrupt service routine
void buttonLeft_isr(); // Button Left interrupt service routine
void buttonRight_isr(); // Button Right interrupt service routine

int buttonCounter();

// Menu Items
int page1;
int page2;
int page3;
string Listitem1 = "Game"; // guess distance
string Listitem2 = "Measure"; // measure distance of object
string Listitem3 = "Detect"; // alarm when object is dectected
N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
    
int main() {

      joystick.init();    //initialise Joystick
           lcd.init();    //first need to initialise display
           //change set contrast in range 0.0 to 1.0
           //0.5 appears to be a good starting point
           lcd.setContrast(0.5);
            
  // create a thread that'll run the event queue's dispatch function
  Thread eventThread;
  eventThread.start(callback(&queue, &EventQueue::dispatch_forever));
  // This is used to call the function putting it in queue allowing the screen toupdat no muxt error
      buttonA.rise(queue.event(&buttonA_isr)); 
      buttonB.rise(queue.event(&buttonB_isr));
      buttonX.rise(queue.event(&buttonX_isr));
      buttonY.rise(queue.event(&buttonY_isr));
  buttonStart.rise(queue.event(&buttonStart_isr)); 
   buttonBack.rise(queue.event(&buttonBack_isr));
   buttonLeft.rise(queue.event(&buttonLeft_isr));
  buttonRight.rise(queue.event(&buttonRight_isr));

   
// Buttons are connected between the pin and 3.3 V, we therefore need to turn on the internal pull-down resister
        buttonA.mode(PullDown);
        buttonB.mode(PullDown);
        buttonX.mode(PullDown);
        buttonY.mode(PullDown);
    buttonStart.mode(PullDown);
     buttonBack.mode(PullDown);
     buttonLeft.mode(PullDown);
    buttonRight.mode(PullDown);

//Test Struct after research 05/01/22
struct ObjectDefine{
int qwer;
    float  Distance;
    char te;
    double dubs;
 string namestruct;
   // string ;
};
// Test Class 06/01/22
   class myClass{
   public:
   string nameclass ;
   double dubss;
   int inty;
   };
   myClass Class1;
   Class1.nameclass ="firstclass";
   ObjectDefine Object1;
   Object1.qwer = 12;
   Object1.Distance = 34;
   Object1.te = 'A';
   Object1.dubs = 23;
   Object1.namestruct = "name";
   
    while(1) {
       long distanced = sensor.distance(); 
        printf("Distance :  %d cm",distanced);
   switch(Press){
     case 1: 
     Press = 1;
     lcd.clear();
     lcd.printString("Menu 1",0,0); 
  
     // if (distanced >= 400 || distanced <= 2)
 printf("Distance :  %d cm",distanced);
    // wait(1.0); // 1 sec
    lcd.refresh();
    break; 
     case 2: 
    Press = 2;
    lcd.clear();
       lcd.printString("Menu 2",0,1);      
         lcd.refresh();
     break;
  /*
   case 3:
              Press = 3;
         lcd.clear();
       lcd.printString("Menu 3",0,1);
         lcd.refresh();
     break;
     }*/
 }
 }
 }
 
   int buttonCount(){
        Press++;
        if (Press >3){
            Press = 0;
            }
        return Press;
        }
   //Button A event-triggered interrupt
void buttonA_isr()
{
    
    buttonCount();
        
    
    g_buttonA_flag = 1;   // set flag in ISR
  
        printf("press count = %i\n",Press);

}
 

  //Button B event-triggered interrupt
void buttonB_isr()
{
     buttonCount();
    g_buttonB_flag = 1;   // set flag in ISR
       lcd.clear(); 
        lcd.printString("Button B Pressed",0,0);
         lcd.refresh(); 
}
  //Button X event-triggered interrupt
void buttonX_isr()
{
    g_buttonX_flag = 1;   // set flag in ISR
       lcd.clear(); 
        lcd.printString("Button X Pressed",0,0);
         lcd.refresh(); // set flag in ISR
}
  //Button Y event-triggered interrupt
void buttonY_isr()
{
    g_buttonY_flag = 1;   // set flag in ISR
       lcd.clear(); 
        lcd.printString("Button Y Pressed",0,0);
         lcd.refresh(); // set flag in ISR
}
  //Button Start event-triggered interrupt
void buttonStart_isr()
{
    g_buttonStart_flag = 1;   // set flag in ISR
       lcd.clear(); 
        lcd.printString("Button Start Pressed",0,0);
         lcd.refresh(); // set flag in ISR
         }
           //Button Back event-triggered interrupt
void buttonBack_isr()
{
    g_buttonBack_flag = 1;   // set flag in ISR
       lcd.clear(); 
        lcd.printString("Button Back Pressed",0,0);
         lcd.refresh(); // set flag in ISR
         }
           //Button Left event-triggered interrupt
void buttonLeft_isr()
{
    g_buttonLeft_flag = 1;   // set flag in ISR
       lcd.clear(); 
        lcd.printString("Button Left Pressed",0,0);
         lcd.refresh(); // set flag in ISR
         }
  //Button Right event-triggered interrupt
   void buttonRight_isr()
{
    g_buttonRight_flag = 1;   // set flag in ISR
       lcd.clear(); 
        lcd.printString("Button Right Pressed",0,0);
         lcd.refresh(); // set flag in ISR
         }