test

Dependencies:   MINI8I8O5A000 mbed EEPROM_P4 IICLCD_LOWCOST

main.cpp

Committer:
tsuparit
Date:
2016-02-04
Revision:
6:96d89c2f4bf9
Parent:
5:a693866be4b3
Child:
7:3cb877cb7393

File content as of revision 6:96d89c2f4bf9:

float firmware_version = 1.20;

#include "mbed.h"

#define  BUZZVSP7   // Enable P7 for Buzzer..
//#include "USBSerial.h"
//SBSerial pc;
 


//#define USBSerialOption

#ifdef USBSerialOption
#include "USBSerial.h"
USBSerial pc;
not work??
#else

//Serial pc(USBTX, USBRX); // SDA serail port
Serial pc(PTE0, PTE1); // tx, rx 
#endif



#include "LiquidCrystal_I2C.h"
#include "mini8i8o5a.h"
#define  EEPROMBUFFERSIZE   16 
#include "eepromlib.h"


DigitalOut myled(LED1);

int loopinilcd=0;

char  str[50];
char  strbuf[50];


int rxchar_count=0;
#define RXBUFFERSIZE 100
char rx_buffer[RXBUFFERSIZE];
char rx_buffer_CMD[RXBUFFERSIZE];
char rx_buffer_ARG[RXBUFFERSIZE];
char rx_pointer=0;
char inchar=0;

char remote_control=0;

float ser_para_reset=0;
//float ser_para_stab=3.25;
float ser_para_time=1.19;
float ser_para_result=0.0;

char ser_para_state=0;
char ser_para_err=0;
char ser_para_range=0;

char  ser_trigger=0;
char  ser_para_cont_mode=1; //serial continue print out

Timer com_timer;


char boardaddress =1;

void serial_pc_rx_services()
{
        int i,j;
        

#ifdef USBSerialOption              
        while (pc.available())
#else
        while(pc.readable())        
#endif        
        {         
         inchar =pc.getc();        
         if ( rx_pointer==0)  //first incoming character clear old buffer
         {
             for (i=0;i<RXBUFFERSIZE;i++) rx_buffer[i]=0; //clear old buffer              
             com_timer.reset();
             com_timer.start();
         }
         
         loopinilcd=0;
         
         rx_buffer[rx_pointer]=inchar; //keep char in buffer...         
         rx_pointer++;
         
         
         if (rx_pointer>=(RXBUFFERSIZE-10)) 
         {
            rx_pointer=0;//Error buffer overflow
            pc.printf("ERR:buffer overflow\n"); 
         }
         
         
         
         if ((inchar=='\r')|(inchar=='\n'))
         {
                        
             rx_buffer[rx_pointer-1]=0;//mark end of string, remove terminate char
             
             i=0;
             j=0;
             char cmd_done=0;
             while (rx_buffer[i]!=0)
             {
               if (cmd_done==0)
               {
                 rx_buffer_CMD[i]=rx_buffer[i];//copy cmd part
                 if (rx_buffer_CMD[i]==' ') 
                 { 
                  cmd_done=1;
                  rx_buffer_CMD[i+1]=0; 
                 }
                }
                else
                {
                  rx_buffer_ARG[j]=rx_buffer[i];//copy cmd part 
                  j++;
                }
                i++;
                 
             }
             rx_buffer_ARG[j]=0; //end of string ++++
             
             //pc.printf("rxbuffer: %s",rx_buffer); //test direct echo
             
             if (strcmp(rx_buffer,"*IDN?")==0)
             {
                 pc.printf("Schaffner SerIO, ver %.1f\n",firmware_version);                 
             }
             else if (strcmp(rx_buffer,"*RST")==0)
             {
                pc.printf("Instrumnet Reset\n"); 
                ser_para_reset=1; //pass flag stop all operation 
                //LCDI2C4Bit_init();        
                LiquidCrystal_I2Cinit();
                LCDI2C4Bit_clear();
                //LCDI2C4Bit_backLight(true);
                LiquidCrystal_I2Cbacklight(); 
                
            LCDI2C4Bit_cursorTo(0,0); 
            sprintf (str,"  --- RESET ----");                      
            LCDI2C4Bit_printIn(str);                
                wait(0.25);
              NVIC_SystemReset();//softreser
             }
             else if (strcmp(rx_buffer,":SYS:VER")==0)
             {
                pc.printf("%.1f\n",firmware_version); 
             }
             else if (strcmp(rx_buffer,":SYST:ERR")==0)
             {
                pc.printf("0\n"); 
             }
             //else if (strcmp(rx_buffer,"a11000")==0) //Read Input   "aX1"
             else if  ( (rx_buffer[0]=='a')  & (rx_buffer[1]==('0'+boardaddress))  & (rx_buffer[2]=='1')) // Write Output "aX1"
             {
                pc.printf("%dOK\n",INPUT); 
             }                                                                                                                                                           
             else if  ( (rx_buffer[0]=='a')  & (rx_buffer[1]==('0'+boardaddress))  & (rx_buffer[2]=='2')) // Write Output "aX2"
             {
                //writer
                unsigned char b3,b2,b1;
                unsigned int  outdata=0;
                
                if (rx_buffer[3]!=0)
                {
                  outdata=rx_buffer[3]-'0';
                }
                if (rx_buffer[4]!=0)
                {
                  outdata=outdata*10+rx_buffer[4]-'0';
                }
                if (rx_buffer[5]!=0)
                {                  
                  outdata=outdata*10+rx_buffer[5]-'0';
                }
                int OUTBUF=0;
                if bitchk(outdata,0) {OUT0=ON;OUTBUF=OUTBUF+1;} else OUT0=OFF;
                if bitchk(outdata,1) {OUT1=ON;OUTBUF=OUTBUF+2;} else OUT1=OFF;
                if bitchk(outdata,2) {OUT2=ON;OUTBUF=OUTBUF+4;} else OUT2=OFF;
                if bitchk(outdata,3) {OUT3=ON;OUTBUF=OUTBUF+8;} else OUT3=OFF;

                if bitchk(outdata,4) {OUT4=ON;OUTBUF=OUTBUF+16;} else OUT4=OFF;
                if bitchk(outdata,5) {OUT5=ON;OUTBUF=OUTBUF+32;} else OUT5=OFF;
                if bitchk(outdata,6) {OUT6=ON;OUTBUF=OUTBUF+64;} else OUT6=OFF;
                if bitchk(outdata,7) 
                {OUT7=ON;OUTBUF=OUTBUF+128;
                #ifdef BUZZVSP7
                   BUZZER=1;
                #endif
                
                } 
                else 
                {
                #ifdef BUZZVSP7
                   BUZZER=1;
                #endif
                
                    
                    OUT7=OFF;
                    }
                OUTPUT=OUTBUF;                                
                pc.printf("%dOK\n",outdata); 
             }                                                                                                                                                           
             else if  ( (rx_buffer[0]=='a')  & (rx_buffer[1]==('0'+boardaddress))  & (rx_buffer[2]=='3')) // Write Output "aX2"
             {
                pc.printf("%dOK\n",OUTPUT); 
             }                                                                                                                                              
             else
             {//unknow / handle comand               
               //pc.printf( "UNKNOWN %s=>%s,%s\n",rx_buffer,rx_buffer_CMD,rx_buffer_ARG);                 
               pc.printf( "UNKNOWN %s=>%s,%s\n",rx_buffer);
             }             
             rx_pointer=0;//Reset at the end  
             com_timer.stop();                           
             break;//exit while
         } //end foud "terminal of command//
                 
         
         
        } //end while data read aviable
        
               

}


int main() 
{
    
    
    
   
  LiquidCrystal_I2C_SETUP(0x27,20,4);
  LiquidCrystal_I2Cinit();       
  LiquidCrystal_I2Cbacklight();       
   
  LiquidCrystal_I2CsetCursor(0,1); 
  sprintf (str, "   SCHAFFNER  ");                 
  LCDI2C4Bit_printIn(str); 
  LiquidCrystal_I2CsetCursor(0,0); 
  sprintf (str, "SerailDIO v:%.2f ",1.00)       ;         
  LCDI2C4Bit_printIn(str);   
   
#ifdef USBSerialOption              
        
#else
  pc.baud(9600);  // set what you want here depending on your terminal program speed         
#endif     
  
  
  com_timer.start();
  com_timer.stop();  
  com_timer.reset();
  
  wait(0.1);
    
  pc.attach(&serial_pc_rx_services);  // Use interrupt services !!
  
  while(1) 
  {
     
     if (loopinilcd++>100)
     {        
        loopinilcd=0;
        LiquidCrystal_I2Cinit();       
        LiquidCrystal_I2Cbacklight();                   
     }
     
     Input_sampling(512);
     LiquidCrystal_I2CsetCursor(0,0); 
     sprintf (str, "IN:%d OUT:%d         ",INPUT,OUTPUT);                 
     LCDI2C4Bit_printIn(str);      
     LiquidCrystal_I2CsetCursor(0,1); 
     
     
     float processtime=1000.0*com_timer.read();
     if (processtime<10.0)
     {
       sprintf (str, "%.1f ms:%s       ",processtime,rx_buffer);                 
    }
    else
    {
       sprintf (str, " %.1f ms:%s       ",processtime,rx_buffer);                 
    }        
        
     LCDI2C4Bit_printIn(str); 
    
    
    
     char strbuf[50];
     
     
     LiquidCrystal_I2CsetCursor(0,3); 
     sprintf (str, "#");                 
     sprintf (strbuf, " "); 
     
     if (OUT0)
     { 
       sprintf (strbuf, "K1 ");   
       strcat(str,strbuf);
     }     
     
     if (OUT1)
     { 
       sprintf (strbuf, "K2 ");   
       strcat(str,strbuf);
     }     
     
     if (OUT2)
     { 
       sprintf (strbuf, "K3 ");   
       strcat(str,strbuf);
     }     
     
     if (OUT3)
     { 
       sprintf (strbuf, "K4 ");   
       strcat(str,strbuf);
     }     
     
     



     if (OUT4)
     { 
       sprintf (strbuf, "RE ");   
     } 
     else
     { 
       sprintf (strbuf, "V.");   
     }                   
     strcat(str,strbuf);
     
     if (OUT5)
     { 
       sprintf (strbuf, "AC ");   
     }              
     else
     {
       sprintf (strbuf, "DC ");                   
     }
     strcat(str,strbuf);
     
     if (OUT6)
     { 
       sprintf (strbuf, "Di ");   
       strcat(str,strbuf);
     }              
     
     if (OUT7)
     { 
       sprintf (strbuf, "POW ");   
       strcat(str,strbuf);
     }  
     sprintf (strbuf, "   ");               
     strcat(str,strbuf);
     
     
     LCDI2C4Bit_printIn(str); 
     
     
     
     
     if (com_timer.read()>5.0) 
     {
       rx_pointer=0;//Reset at the end  
       com_timer.stop();           
     }

  }
  
  
}