test
Dependencies: MINI8I8O5A000 mbed EEPROM_P4 IICLCD_LOWCOST
Diff: main.cpp
- 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(); + } + + } + + +}