test
Dependencies: MINI8I8O5A000 mbed EEPROM_P4 IICLCD_LOWCOST
main.cpp
- Committer:
- tsuparit
- Date:
- 2015-10-13
- Revision:
- 2:82dbbbff7518
- Parent:
- 1:d9ab13cdf377
- Child:
- 3:e658376f6e27
File content as of revision 2:82dbbbff7518:
float firmware_version = 1.00; #include "mbed.h" //#include "USBSerial.h" //SBSerial pc; //#define USBSerialOption #ifdef USBSerialOption #include "USBSerial.h" USBSerial pc; not work?? #else Serial pc(USBTX, USBRX); #endif #include "LiquidCrystal_I2C.h" #include "mini8i8o5a.h" #define EEPROMBUFFERSIZE 16 #include "eepromlib.h" 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; #ifdef USBSerialOption while (pc.available()) #else while(pc.readable()) #endif { inchar =pc.getc(); myled = 0; 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(); } 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"); } 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("OK%d\n",11); } 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'; } if bitchk(outdata,0) OUT0=ON; else OUT0=OFF; if bitchk(outdata,1) OUT1=ON; else OUT1=OFF; if bitchk(outdata,2) OUT2=ON; else OUT2=OFF; if bitchk(outdata,3) OUT3=ON; else OUT3=OFF; if bitchk(outdata,4) OUT4=ON; else OUT4=OFF; if bitchk(outdata,5) OUT5=ON; else OUT5=OFF; if bitchk(outdata,6) OUT6=ON; else OUT6=OFF; if bitchk(outdata,7) OUT7=ON; else OUT7=OFF; pc.printf("OK%d\n",outdata); } 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); 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 myled = 1; } 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); #ifdef USBSerialOption #else pc.baud(9600); // set what you want here depending on your terminal program speed #endif //pc.printf( "RST\n"); com_timer.start(); com_timer.stop(); com_timer.reset(); wait(1); while(0) { serial_pc_rx_services(); } pc.attach(&serial_pc_rx_services); // while(1) { 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(); } } }