test menu

Dependencies:   Menu RPG SMARTGPU TextLCD Ton mbed

Fork of lcd_menu by Peihsun Yeh

main.cpp

Committer:
jjcimon
Date:
2015-05-13
Revision:
4:05868e0f5d7e
Parent:
2:202735df93cd

File content as of revision 4:05868e0f5d7e:

#include "mbed.h"
// #include "TextLCD.h"
#include "RPG.h"
#include "Selection.h"
#include "Menu.h"
#include "Navigator.h"
#include <vector>
#include <string>
#include "SMARTGPU.h"
#include "Ton.h"
Ton t1(11000);
Ton t2(60000);
Ton t3(840000);
char Rtions[5];
char p;
DigitalOut Out1(LED1);
DigitalOut Out2(LED2);
DigitalOut out3(LED3);
DigitalOut Out4(LED4);
InterruptIn pb(p24);
InterruptIn bt1(p26);
InterruptIn bt2(p28);
int waiting=0; 
int n;
//int MTR = 0;
DigitalOut MTR(p19);
int volatile countT=0;
char counter = 0;
//const char Cpass[10]= {0x00};
char Cpass[10];
//int volatile old=0;
int  old = 0;
int  bt1o = 1;
int oldbt2=1;
int Mn1 = 1;
int Mn2 = 3;

void pb_hit_interrupt (void) {
    countT++;
    if( (old==0 ) & (waiting == 0) &( oldbt2 == 0)&(  bt1o == 0)   )    {
      MTR = 1;
     Out4 = !Out4;
      Out1=1;
      old = 1;
      }
      }
      
void bt1_hit_interrupt (void) {
   if( (bt1o==0 )& (old == 0)    )    {
     bt1o = 1;
    }  
     } 
      
      
void bt2_hit_interrupt (void) {
   if( (oldbt2==0 )& (old == 0) )    {
   oldbt2 =1;
   
     }}    
      
//#include "rpc.h"
Serial pc(USBTX, USBRX);
SMARTGPU lcd(p13,p14,p15);        //(TX,RX,Reset);
  
DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
//TextLCD lcd(p15, p16, p17, p18, p19, p20); // rs, e, d4-d7
RPG rpg(p21,p22,p23); 


int oldpass;
int pass;
int oldCons;
int Cons;

int oldcourbe;
int courbe;
int oldHor;
int Hor;

int oldJour;
int Jour;



using namespace std;
int prevpass;

char bufCons[3];
char oldbufCons[3];
char bufPass[1];
char oldbufpass[1];

char bufcourbe[1];
char oldbufcourbe[1];

char bufJour[1];
char oldbufJour[1];

char bufHor[1];
char oldbufHor[1];


// some functions to tie to selections
void toggleLED1() { led1 = !led1; }
void toggleLED2() { led2 = !led2; }
void toggleLED3() { led3 = !led3; }
void toggleLED4() { led4 = !led4; }
void incpass() { 
oldpass = pass;
pass++; 

sprintf(bufPass, "%d", pass);
}

void decpass() { 
oldpass = pass;
pass--;
sprintf(bufPass, "%d", pass);
 }
                             
void incCons() { 
oldCons = Cons;
Cons++;
sprintf(bufCons, "%d", Cons);
 }
 
void decCons() { 
oldCons = Cons;
Cons--;
sprintf(bufCons, "%d", Cons);
 }


// Horaire
void incHor() { 
oldHor = Hor;
Hor++;
sprintf(bufHor, "%d", Hor);
 }
 void decHor() { 
oldHor = Hor;
Hor--;
sprintf(bufHor, "%d", Hor);
 }

 // Jour
void incJour() { 
oldJour = Jour;
Jour++;
sprintf(bufJour, "%d", Jour);
 }
void decJour() { 
oldJour = Jour;
Jour--;
sprintf(bufJour, "%d", Jour);
 }
 
 // Courbe
void incCourbe() { 
oldcourbe = courbe;
courbe++;
sprintf(bufcourbe, "%d", courbe);
 }
void decCourbe() { 
oldcourbe = courbe;
courbe--;
sprintf(bufcourbe, "%d", courbe);
 }


void resetLED()
{
    led1 = 0;
    led2 = 0;
    led3 = 0;
    led4 = 0;
}

int main() {
        Cons = 0;
          pass = 2;
          Hor = 1;
          courbe = 3;
          Jour = 7;
     lcd.reset();                    //physically reset SMARTGPU
     lcd.start();                    //initialize the SMARTGPU processor
 toggleLED2();
 pass = 1;
 set_time(1309776930); 
pb.mode(PullUp);
bt1.mode(PullUp);
bt2.mode(PullUp);
wait(1);
pb.fall(&pb_hit_interrupt);

bt1.rise(&bt1_hit_interrupt);
bt2.rise(&bt2_hit_interrupt);

Rtions[1]=11;
 Rtions[2]=12;
 Rtions[3]=13;
 Rtions[4]=14;
 time_t rawtime = time(NULL);


    // In using this library, the user declares "Menus", which are essentially arrays of "Selections".
    // Selections describe each individual selectable item. 
    // Selections can be tied to functions. Functions must output void and take in no arguments.
    // Selections can also have references to child menus.
 
    // It makes sense to declare a root menu first, but you don't have to. 
    // Menus should have an identifier (the argument in constructor). 
       Menu rootMenu("Menu Principale"); 
    
    // Selections are added to menus through the Menu's "add" method.
    // If a function is to be executed when the RPG is depressed, make a REFERENCE to it. Otherwise null.
    // The second argument is its position - the will be deprecated soon.
    // The last is the text to display. *INCLUDE A SPACE IN THE BEGINNING, this is where the cursor goes. 
    // *This means the text is limited to 14 characters (not counting the space) with this display. 
    // **It is 14 not 15 for reasons pertaining to the implementation of the TextLCD library. 
    Menu ledMenu("Options"); 
    ledMenu.add(Selection(&toggleLED1, 0, NULL," Toggle LED1")); // The function argument of selection can be added directly
    ledMenu.add(Selection(&toggleLED2, 1, NULL, " Toggle LED2"));  
    ledMenu.add(Selection(&toggleLED3, 2, NULL, " Toggle LED3"));
    ledMenu.add(Selection(&resetLED, 3, &rootMenu, " Retour"));
    ledMenu.add(Selection(NULL, 4, NULL, "Options"));  // always add a Selection at the end to point to the parent
    
    Menu AlimMenu("Alimenter"); // about menu crediting us :)
    AlimMenu.add(Selection(NULL, 0, NULL, " Voir Courbe"));
    AlimMenu.add(Selection(&incpass, 1, NULL, " Augmenter"));
    AlimMenu.add(Selection(&decpass, 2, NULL, " Diminuer"));
    AlimMenu.add(Selection(NULL, 3, &rootMenu, " Retour"));
    AlimMenu.add(Selection(NULL, 4, NULL, "Alimenter"));
         
    Menu ledCourbe("Courbe"); // about menu crediting us :)
    ledCourbe.add(Selection(&incCourbe, 1, NULL, " Augmenter"));
    ledCourbe.add(Selection(&decCourbe, 2, NULL, " Diminuer"));
    ledCourbe.add(Selection(NULL, 2, NULL, " "));
    ledCourbe.add(Selection(NULL, 3, &rootMenu, " Retour"));
    ledCourbe.add(Selection(NULL, 4, NULL, "Courbe"));
    
    Menu ledHoraire("Horaire"); // about menu crediting us :)
    ledHoraire.add(Selection(&incHor, 1, NULL, " Augmenter"));
    ledHoraire.add(Selection(&decHor, 2, NULL, " Diminuer"));
    ledHoraire.add(Selection(NULL, 2, NULL, " "));
    ledHoraire.add(Selection(NULL, 3, &rootMenu, " Retour"));
    ledHoraire.add(Selection(NULL, 4, NULL, "Horaire"));
      
    Menu ledJour("Jour"); // about menu crediting us :)
    ledJour.add(Selection(&incJour, 1, NULL, " Augmenter"));
    ledJour.add(Selection(&decJour, 2, NULL, " Diminuer"));
    ledJour.add(Selection(NULL, 2, NULL, " "));
    ledJour.add(Selection(NULL, 3, &rootMenu, " Retour"));
    ledJour.add(Selection(NULL, 4, NULL, "Jour"));
    
    Menu GestMenu("Gestation"); // about menu crediting us :)
    GestMenu.add(Selection(NULL, 0,&ledCourbe, " Courbe"));
    GestMenu.add(Selection(NULL, 1, &ledHoraire, " Horaire"));
    GestMenu.add(Selection(NULL, 2, &ledJour, " Journee Depart"));
    GestMenu.add(Selection(NULL, 3, &rootMenu, " Retour"));
    GestMenu.add(Selection(NULL, 4, NULL, "Gestation"));
   
    Menu ledCons("Consom"); // about menu crediting us :)
    ledCons.add(Selection(&incCons, 1, NULL, " Augmenter"));
    ledCons.add(Selection(&decCons, 2, NULL, " Diminuer"));
    ledCons.add(Selection(NULL, 2, NULL, " "));
    ledCons.add(Selection(NULL, 3, &rootMenu, " Retour"));
    ledCons.add(Selection(NULL, 4, NULL, "Consom"));

    
    Menu MBMenu("Mise Bas"); // about menu crediting us :)
    MBMenu.add(Selection(NULL, 0, NULL, " Courbe Parite"));
    MBMenu.add(Selection(NULL, 1, NULL, " Courbe Horaire"));
    MBMenu.add(Selection(NULL, 2, NULL, " Journee Depart"));
    MBMenu.add(Selection(NULL, 3, &rootMenu, " Retour"));
    MBMenu.add(Selection(NULL, 4, NULL, "Mise Bas"));

    rootMenu.add(Selection(NULL, 0, &AlimMenu, " Alimenter"));
    rootMenu.add(Selection(NULL, 1, &GestMenu, " Gestation"));  // a dummy menu, doesn't do anything
    rootMenu.add(Selection(NULL, 2, &MBMenu, " Mise Bas "));   
     rootMenu.add(Selection(NULL, 3, &ledMenu, " Options "));
 //  rootMenu.add(Selection(NULL, 4, &ledCourbe, " Courbe "));
  // rootMenu.add(Selection(NULL, 5, &ledHoraire, " Horaire "));
  // rootMenu.add(Selection(NULL, 6, &ledJour, " Jour "));
//  rootMenu.add(Selection(NULL, 7, &ledCons, " Consom "));
    rootMenu.add(Selection(NULL, 4, NULL, "Menu Principale"));
    // Here is the heart of the system: the navigator. 
    // The navigator takes in a reference to the root, an interface, and a reference to an lcd
    Navigator navigator(&rootMenu, rpg, &lcd);
  prevpass = 0; 
    while(1){
  //       navigator.poll();
        Out2=1;


if ( bt1o == 1){
//++menu   if menu > 4 then menu = 0;
            Mn1 = ++ Mn1 % 9;
//            Mn1 = Menu1(Mn1);
            wait(.1);
            bt1o = 0;
}

if ( oldbt2 == 1){
//++menu   if menu2 > 4 then menu2 = 0;
             Mn2 = ++ Mn2 % 5;
//             Mn2=Menu2(Mn2);
             wait(.1);
            oldbt2 = 0;
}
         //  lcd.locate(0,1);
         //     lcd.printf("  bp out5\n"); 
         //     wait(.5); 
if( (out3==1) &  (waiting == 840)     ){
           
           Out1=0;
//           lcd.locate(0,1); lcd.printf("Out3-1\n");
            wait(1);
   if(   t3         ){
  //          navigator.poll();
           t3=0;                                                                  
 //           lcd.locate(0,1); lcd.printf("Out3wa\n");
            //   wait(1);
       out3=0;
       waiting = 0;
        counter = 0;
}
}
if((Out1==1) & (waiting ==11)){
              
                                                        
//       lcd.locate(0,1); 
//       lcd.printf("Alimente      \n");
        wait(.1);
  if(   t1          ){
       
       Out1=0;
       t1=0;
       MTR=0;
            //lcd.locate(0,1); 
            //lcd.printf("Out11wait11E   \n");
              wait(.1);
       waiting = 60;
        t2=1;
      old=0;
       counter ++;
        Rtions[p]--;

}
}


if (   (old==1)&(MTR==1)  & (waiting == 0) )  {
                        
                                                                       
//                     lcd.locate(0,1);
 //                     lcd.printf("alimente   \n");
                       wait( 1);
           rawtime = time(NULL);
        waiting = 11;
        t1=1;
                     //  lcd.locate(0,1);
                     //   lcd.printf("nwait w1     \n");
                         wait( 1);
       
         if (counter >= 6) {
            
            out3=1;
            waiting = 840;t3=1;
              }
       }

if((Out1==0) & (waiting ==60)){
         
          out3=1; 
//                  lcd.locate(0,1); 
//                  lcd.printf("Attend 60 sec  "); 
                  wait(61);
  if(   t2         ){
      
       out3=0;
         t2=0;  
//        lcd.locate(0,1); 
//         lcd.printf("             "); 
          wait(1);
       waiting = 0;
    //  old=0;
       
 // lcd.locate(0,1); lcd.printf("apres old-0    \n"); 
 // wait(1);
}
}
  //            lcd.string(100,200,300,220,WHITE,FONT6,TRANS," ");  //
     //    oldHor = Hor;  oldJour = Jour;  oldcourbe = courbe;
     
   if (  (oldpass != pass)| ( oldCons != Cons) | ( oldHor != Hor) | ( oldcourbe != courbe) | ( oldJour != Jour)){
       
        n=sprintf (Cpass, "Pa:%d Cs:%d H:%d Cb:%d Jr:%d", pass,Cons,Hor,courbe,Jour);
        lcd.string(15,210,300,220,WHITE,FONT3,TRANS,Cpass); 
        oldCons = Cons;
          oldpass = pass;
          oldHor = Hor;
          oldcourbe = courbe;
          oldJour = Jour;
       }
  //              lcd.string(100,200,300,220,WHITE,FONT6,TRANS,bufPass);  //
            
             //   lcd.string(100,200,300,220,WHITE,FONT6,TRANS,bufPass);  //
 
    //          lcd.string(150,200,300,220,WHITE,FONT6,TRANS,bufPass);  //
     
        navigator.poll(); // In a loop, call navigator's poll method to determine if the user is interacting with the rpg. 

    }
}