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(); } } }