test

Dependencies:   mbed

main.cpp

Committer:
chris77774
Date:
2016-04-30
Revision:
0:32a06703946f

File content as of revision 0:32a06703946f:

#include "mbed.h"
#include "C12832_lcd.h"
Serial pc (USBTX,USBRX);
Timer sRandTime;
 
bool newEvent =false; 
uint8_t event=0, state=0;
 
InterruptIn iiJsUp(p15);        //alle Funktionen von Joystick initialisieren
DigitalIn diJsUp(p15);
InterruptIn iiJsCenter(p14);
DigitalIn diJsCenter(p14);




char calcOp;              
int value1, value2, result;     // variablen fürs Rechnen festlegen, initialisierung
C12832_LCD lcd;
 

 
// prototypes                   //festgelegte Funktionen werden hier abgearbeitet
void noFunction();              //keine Funktion
void selectOp();


  

 
/****************************************************/
/* Tabelle fuer die naechsten Zustaende bei Eingabe */
/****************************************************/
uint8_t nextstate_tab[1][3]=
// current event/  present state 0  1  2  3
//----------------------
/* Event 0 (Joystick UP)    */{{ 0,1,0 }};  // next


/*************************************************************/
/* Tabelle fuer Aktionsroutinen fuer die Zustaende bei Input */ 
/*************************************************************/
//                           p r e s e n t    s t a t e  
void (*action[1][3])()= //      0        1               2           3    
/* event 0 */       {{ noFunction,selectOp,noFunction}};        


 
// action routines              //Funktionen erstellen,was darin passiert




void noFunction()
{
    
}
uint8_t debounce(DigitalIn myIn)  
{
    #define LEVEL_CHECKS 16
    #define MAX_LOOPS 80                // stoppt das Überprüfen des Prellen nach max. MAX_LOOPS Durchläufen
    unsigned char port_buffer;
    unsigned char debounceCounter = 0;
    uint8_t loopCounter = 0;
    
    do
    {
        port_buffer = myIn;
        wait_us(100);
        loopCounter++;
        if(myIn == port_buffer)
          debounceCounter++;    // mindestens 'LEVEL_CHECKS' Abtastungen in Folge: gleicher Pegel
        else
          debounceCounter = 0;      
    }
    while ((debounceCounter <= LEVEL_CHECKS) && (loopCounter <= MAX_LOOPS));
    return loopCounter;
}
int myRand(int min, int max) 
{
    return rand()%(max-min+1)+min;
}

 void selectOp()
{
        debounce(diJsUp);
        event=1;
        newEvent = true;
        value1 = myRand(0, 100);
        value2 = myRand(-50,50);
        pc.printf("\nRandom Calculator wartet auf Eingabe eines OPERATORS:\n");
        pc.scanf("%c",&calcOp); 
        if (calcOp == '+')
        {
        
        result = value1 + value2;
        pc.printf("Der gewaehlte Operator %c Ergebnis: %d %c %d  = %d             \n", calcOp, value1, calcOp,value2,result);
        }
        if (calcOp == '-')
        {
        result = value1 - value2;
        pc.printf("Der gewaehlte Operator %c Ergebnis: %d %c %d  = %d             \n", calcOp, value1, calcOp,value2,result);
        }
        if (calcOp == '*')
        {
        result = value1 * value2;
        pc.printf("Der gewaehlte Operator %c Ergebnis: %d %c %d  = %d             \n", calcOp, value1, calcOp,value2,result);
        }
        if (calcOp == '/')
        {
        result = value1 / value2;
        pc.printf("Der gewaehlte Operator %c Ergebnis: %d %c %d  = %d             ", calcOp, value1, calcOp,value2,result);
        pc.printf("Rest %d",value1%value2);            
        }
        if (calcOp == '/' && value2 == 0)
        {
        pc.printf("Durch 0 kann man nicht dividieren\n");
        }
        
        
        pc.printf("Random Calculator mit Joystick UP erneute starten\n");
        debounce(diJsUp);
        event=0;
        newEvent = true;
        
}    
 
 
 
 
void init() {               //hier wird alles initialisiert
    sRandTime.start();
    newEvent = false;
    state=0; 
    event=0;
    iiJsUp.rise(&selectOp); 
}



int main()          //Hauptprogramm 
{
    init();
    pc.printf("Random Calculator mit der Taste JoyStick UP starten:Christoph Unger");


    while(1) 
    {
        if (newEvent) 
        {
             srand(sRandTime.read_us());
            
            newEvent=false;
            (*action[event][state])();                      // line 1 for executing sm: run action routine
            state = nextstate_tab[event][state];    // line 2 for executing sm: run state transition 
           
        }
    }
      
}