test

Dependencies:   MINI8I8O5A000 mbed EEPROM_P4 IICLCD_LOWCOST

main.cpp

Committer:
tsuparit
Date:
2015-10-08
Revision:
0:5e60f85d6c26
Child:
1:d9ab13cdf377

File content as of revision 0:5e60f85d6c26:

float firmware_version = 1.00;

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

#ifdef USBSerial
#include "USBSerial.h"
USBSerial pc;

#else
Serial pc(USBTX, USBRX);
#endif


DigitalOut myled(LED1);



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;
        
        while(pc.readable()) 
        {
         myled = 0;
         inchar =pc.getc();
         wait(0.1);
         myled = 1;
         
         if ( rx_pointer==0)  //first incoming character
         {
             for (i=0;i<RXBUFFERSIZE;i++) rx_buffer[i]=0; //clear old buffer              
              com_timer.reset();
              com_timer.start();
         }
         
         rx_buffer[rx_pointer]=inchar; //keep char in buffer...
         
         rx_pointer++;
         
         
         if (rx_pointer>=(RXBUFFERSIZE-10)) 
         {
              //rx_pointer=200;
              //rx_buffer[rx_pointer]=0;
            rx_pointer=0;//Error buffer overflow
            pc.printf("ERR:buffer overflow\n",firmware_version); 
         }
         
         if ((inchar=='\r')|(inchar=='\n'))
         {
             remote_control=1;             
             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("OK%d\n",11); 
             }                                                                                                                                                           
             else if  ( (rx_buffer[0]=='a')  & (rx_buffer[1]==('0'+boardaddress))  & (rx_buffer[2]=='2')) // Write Output "aX2"
             {
                pc.printf("OK%d\n",22); 
             }                                                                                                                                                           
             else if  ( (rx_buffer[0]=='a')  & (rx_buffer[1]==('0'+boardaddress))  & (rx_buffer[2]=='3')) // Write Output "aX2"
             {
                pc.printf("OK%d\n",33); 
             }                                                                                                                                              
             else
             {//unknow / handle comand               
               pc.printf( "UNKNOWN %s=>%s,%s\n",rx_buffer,rx_buffer_CMD,rx_buffer_ARG);                 
             }
             
             rx_pointer=0;//Reset at the end  
             com_timer.stop();                           
         }
         
        } 
        

}


int main() 
{
    
    
    
   
  LiquidCrystal_I2C_SETUP(0x27,16,2);
  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);   
   
   
  pc.baud(9600);  // set what you want here depending on your terminal program speed   
  
  //pc.printf( "RST\n");             
  com_timer.start();
  com_timer.stop();  
  com_timer.reset();
  
  wait(1);
  
  
  while(1) 
  {
     serial_pc_rx_services();     
     
     LiquidCrystal_I2CsetCursor(0,0); 
     sprintf (str, " I:%d O:%d    ",255,255);                 
     LCDI2C4Bit_printIn(str); 

     
     LiquidCrystal_I2CsetCursor(0,1); 
     sprintf (str, "%.2fs:%s       ",com_timer.read(),rx_buffer);                 
     LCDI2C4Bit_printIn(str); 
     if (com_timer.read()>5.0) 
     {
             rx_pointer=0;//Reset at the end  
             com_timer.stop();           
     }

  }
  
  
}