Yehowshua Immanuel / Mbed 2 deprecated Generic_Platformer

Dependencies:   mbed 4DGL-uLCD-SE MMA8452

inputs/inputs.cpp

Committer:
Yehowshua
Date:
2019-03-16
Revision:
4:fb7d49e660f2
Parent:
inputs.h@ 0:2f4225a589d1

File content as of revision 4:fb7d49e660f2:

#pragma once
#include "inputs.h"

MMA8452 acc(p28, p27, 100000);          // Accelerometer
DigitalIn button1(p21);                 // Pushbuttons (pin)
DigitalIn button2(p22);
DigitalIn button3(p24);

inputs in;

void inputs_init(void){
    button1.mode(PullUp); 
    button2.mode(PullUp);
    button3.mode(PullUp);
    }

int get_inputs(void){
    //read inputs
    in.b1 = !button1; // Inverted, because low voltage means "pressed"
    in.b2 = !button2;
    in.b3 = !button3;
    acc.readXYZGravity(&in.a_x, &in.a_y, &in.a_z); // Read gravity
    in.a_y = -in.a_y;   // Accelerometer is right handed, everything else is left handed
    
    //process inputs
        // First, check action buttons
    if (in.b1) return ACTION_BUTTON;
    if (in.b2) return BOMB_BUTTON;
    
    // Otherwise, compute motion
    double thresh = 0.2;
    if (fabs(in.a_x) + fabs(in.a_y) > thresh)
    {
        #define PI 3.1415926
        double angle = atan2(in.a_y, in.a_x); // value on [-pi, pi]
//        pc.printf("atan: %f\r\n", angle);
        if (angle > 3*PI/4 || angle < -3*PI/4) return GO_LEFT;
        else if (angle > PI/4) return GO_DOWN;
        else if (angle > -PI/4) return GO_RIGHT;
        else return GO_UP;
    }
    return NO_ACTION;

    }