test
Dependencies: MINI8I8O5A000 mbed EEPROM_P4 IICLCD_LOWCOST
main.cpp
- Committer:
- tsuparit
- Date:
- 2016-02-04
- Revision:
- 6:96d89c2f4bf9
- Parent:
- 5:a693866be4b3
- Child:
- 7:3cb877cb7393
File content as of revision 6:96d89c2f4bf9:
float firmware_version = 1.20; #include "mbed.h" #define BUZZVSP7 // Enable P7 for Buzzer.. //#include "USBSerial.h" //SBSerial pc; //#define USBSerialOption #ifdef USBSerialOption #include "USBSerial.h" USBSerial pc; not work?? #else //Serial pc(USBTX, USBRX); // SDA serail port Serial pc(PTE0, PTE1); // tx, rx #endif #include "LiquidCrystal_I2C.h" #include "mini8i8o5a.h" #define EEPROMBUFFERSIZE 16 #include "eepromlib.h" DigitalOut myled(LED1); int loopinilcd=0; 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(); 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(); } loopinilcd=0; rx_buffer[rx_pointer]=inchar; //keep char in buffer... rx_pointer++; if (rx_pointer>=(RXBUFFERSIZE-10)) { 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("%dOK\n",INPUT); } 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'; } int OUTBUF=0; if bitchk(outdata,0) {OUT0=ON;OUTBUF=OUTBUF+1;} else OUT0=OFF; if bitchk(outdata,1) {OUT1=ON;OUTBUF=OUTBUF+2;} else OUT1=OFF; if bitchk(outdata,2) {OUT2=ON;OUTBUF=OUTBUF+4;} else OUT2=OFF; if bitchk(outdata,3) {OUT3=ON;OUTBUF=OUTBUF+8;} else OUT3=OFF; if bitchk(outdata,4) {OUT4=ON;OUTBUF=OUTBUF+16;} else OUT4=OFF; if bitchk(outdata,5) {OUT5=ON;OUTBUF=OUTBUF+32;} else OUT5=OFF; if bitchk(outdata,6) {OUT6=ON;OUTBUF=OUTBUF+64;} else OUT6=OFF; if bitchk(outdata,7) {OUT7=ON;OUTBUF=OUTBUF+128; #ifdef BUZZVSP7 BUZZER=1; #endif } else { #ifdef BUZZVSP7 BUZZER=1; #endif OUT7=OFF; } OUTPUT=OUTBUF; pc.printf("%dOK\n",outdata); } else if ( (rx_buffer[0]=='a') & (rx_buffer[1]==('0'+boardaddress)) & (rx_buffer[2]=='3')) // Write Output "aX2" { pc.printf("%dOK\n",OUTPUT); } 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 } int main() { LiquidCrystal_I2C_SETUP(0x27,20,4); 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 com_timer.start(); com_timer.stop(); com_timer.reset(); wait(0.1); pc.attach(&serial_pc_rx_services); // Use interrupt services !! while(1) { if (loopinilcd++>100) { loopinilcd=0; LiquidCrystal_I2Cinit(); LiquidCrystal_I2Cbacklight(); } Input_sampling(512); LiquidCrystal_I2CsetCursor(0,0); sprintf (str, "IN:%d OUT:%d ",INPUT,OUTPUT); LCDI2C4Bit_printIn(str); LiquidCrystal_I2CsetCursor(0,1); float processtime=1000.0*com_timer.read(); if (processtime<10.0) { sprintf (str, "%.1f ms:%s ",processtime,rx_buffer); } else { sprintf (str, " %.1f ms:%s ",processtime,rx_buffer); } LCDI2C4Bit_printIn(str); char strbuf[50]; LiquidCrystal_I2CsetCursor(0,3); sprintf (str, "#"); sprintf (strbuf, " "); if (OUT0) { sprintf (strbuf, "K1 "); strcat(str,strbuf); } if (OUT1) { sprintf (strbuf, "K2 "); strcat(str,strbuf); } if (OUT2) { sprintf (strbuf, "K3 "); strcat(str,strbuf); } if (OUT3) { sprintf (strbuf, "K4 "); strcat(str,strbuf); } if (OUT4) { sprintf (strbuf, "RE "); } else { sprintf (strbuf, "V."); } strcat(str,strbuf); if (OUT5) { sprintf (strbuf, "AC "); } else { sprintf (strbuf, "DC "); } strcat(str,strbuf); if (OUT6) { sprintf (strbuf, "Di "); strcat(str,strbuf); } if (OUT7) { sprintf (strbuf, "POW "); strcat(str,strbuf); } sprintf (strbuf, " "); strcat(str,strbuf); LCDI2C4Bit_printIn(str); if (com_timer.read()>5.0) { rx_pointer=0;//Reset at the end com_timer.stop(); } } }