test

Dependencies:   MINI8I8O5A000 mbed EEPROM_P4 IICLCD_LOWCOST

Revision:
0:5e60f85d6c26
Child:
1:d9ab13cdf377
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Oct 08 10:44:42 2015 +0000
@@ -0,0 +1,220 @@
+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();           
+     }
+
+  }
+  
+  
+}