software about measure for robotic
Dependencies: A18_RobotMeasure mbed
main.cpp
- Committer:
- Chayanon
- Date:
- 2015-12-08
- Revision:
- 0:d12e3b4e3b1a
File content as of revision 0:d12e3b4e3b1a:
#include "mbed.h" #include "TextLCD.h" Serial pc(USBTX, USBRX); //AnalogIn analog_value(A1); DigitalOut colO[4]={D5,D4,D3,D2}; DigitalIn roll1(D6,PullDown); DigitalIn roll2(D7,PullDown); DigitalIn roll3(D8,PullDown); DigitalIn roll4(D9,PullDown); I2C i2c_lcd(I2C_SDA,I2C_SCL); // SDA, SCL TextLCD_I2C lcd(&i2c_lcd, 0x4E, TextLCD::LCD16x2); Timer t1;//TIme keypad Timer t2;//Time Lcd Timer sampling;//Sampling timer volatile int Hz = 196000;//defult sampling volatile int rate_sampling_us = (1000000/Hz);//convert to microsecond volatile int begin; AnalogIn RawValue(A1); SPI device(SPI_MOSI, SPI_MISO, SPI_SCK); DigitalOut cs(D10); int count; int cleck=1; int screen = 1; int test = 1; void getKeypad(); double getvolt(); // get Voltage value ;unit(VOLT) double getAmp(); //get Amp value unit(AMP) void read(); volatile double current=0; double I_peak=0; volatile double volt=0; double V_peak=0; double power=0; //float meas; int enter1 = 0; int data[7] = {0} ; int dLength = 0;//data length int dataHz = 100000; int main() { pc.baud(9600);//1104000 //pc.printf("Start\n"); t1.start(); t2.start(); count=0; lcd.printf("Welcome !!!"); sampling.start(); for(count=0;count<4;count++) { colO[count]=0; } count=0; while(1) { //meas = analog_value.read(); // Converts and read the analog input value (value from 0.0 to 1.0) //meas = meas * 3300; // pc.printf("%f\n",meas); begin = sampling.read_us(); if(begin >= rate_sampling_us) //read sensor { read(); sampling.reset(); } if(current<0) {current=0;} power=current*volt; if(current>=I_peak) { I_peak=current; } if(volt>=V_peak) { V_peak=volt; } pc.printf("#%.3f,%.3f,%.3f*\n",power,current,volt); getKeypad(); enter1=0; if(t2.read_ms() > 500) { if(screen==6) { screen=1; } else if(screen==0) { screen=5; } if(screen==1) {//enter1=0; lcd.cls(); lcd.printf("Power %3.3f W",power); } else if(screen==2) {//enter1=0; lcd.cls(); lcd.printf("Current %.3f AI_Peak %.3f A",current,I_peak); } else if(screen==3) {//enter1=0; lcd.cls(); lcd.printf("Volt %.3f VV_Peak %.3f V",volt,V_peak); } else if(screen==4) { lcd.cls(); lcd.printf("Sampling\n%d Hz",Hz); } else if(screen==5) { dLength=0; enter1=1; lcd.cls(); lcd.printf("Gen Sampling(Hz)"); while(screen==5) { if(dLength>7) { int i = 0; for(i=0;i<8;i++) { data[i]=0; } dLength=0; lcd.cls(); lcd.printf("Gen Sampling(Hz)"); lcd.printf("Please 0-1m"); wait(1); lcd.cls(); lcd.printf("Gen Sampling(Hz)"); } getKeypad(); } } t2.reset(); } if(t1.read_ms() > (1000*1000)) { t1.reset(); } } } //D2, D3, D4, D5, D6, D7, D8, D9 /* |1 2 3 up | |4 5 6 down | |7 8 9 enter| |0 0 0 clear| */ void getKeypad(){ if(count==0) { colO[3]=0; colO[count]=1; } else { colO[count-1]=0; colO[count]=1; } if(t1.read_ms() >300) { cleck=1; } //pc.printf("%d\n",i); if(roll1==1&&colO[0]==1&&cleck==1)//s1 up { screen--; cleck=0; t1.reset(); } else if(roll1==1&&colO[1]==1&&cleck==1)//s2 down { screen++; cleck=0; t1.reset(); } else if(roll1==1&&colO[2]==1&&cleck==1)//s3 enter { if(enter1==1) { if(dLength>0) { int j = dLength-1;//loop int k = data[j];//data*something int l = 1; dataHz=0; //lcd.printf("%d",k); for(j = dLength-1;j>=0;j--) { data[j]=k; l=(l*10); if(j>=0) { k=(data[j-1]*l); } dataHz=dataHz+data[j]; } for(l=0;l<8;l++) { data[l]=0; } dLength=0; if(dataHz==0||dataHz>1000000) { dataHz=100000; lcd.cls(); lcd.printf("Gen Sampling(Hz)"); lcd.printf("Please 0-1m"); wait(1); } Hz=dataHz; rate_sampling_us = (1000000/Hz); lcd.cls(); lcd.printf("Gen Sampling(Hz)"); lcd.printf("OK !!!"); wait(1); } //lcd.printf(" "); lcd.cls(); lcd.printf("Gen Sampling(Hz)"); } cleck=0; t1.reset(); } else if(roll1==1&&colO[3]==1&&cleck==1)//s4 clear { if(enter1==1) { int m; for(m=0;m<8;m++) { data[m]=0; } lcd.cls(); lcd.printf("Gen Sampling(Hz)"); dLength=0; } cleck=0; t1.reset(); } else if(roll2==1&&colO[0]==1&&cleck==1)//s5 3 { if(enter1==1) { lcd.printf("3"); data[dLength]=3; dLength++; } cleck=0; t1.reset(); } else if(roll2==1&&colO[1]==1&&cleck==1)//s6 6 { if(enter1==1) { lcd.printf("6"); data[dLength]=6; dLength++; } cleck=0; t1.reset(); } else if(roll2==1&&colO[2]==1&&cleck==1)//s7 9 { if(enter1==1) { lcd.printf("9"); data[dLength]=9; dLength++; } cleck=0; t1.reset(); } else if(roll2==1&&colO[3]==1&&cleck==1)//s8 { cleck=0; t1.reset(); } else if(roll3==1&&colO[0]==1&&cleck==1)//s9 2 { if(enter1==1) { lcd.printf("2"); data[dLength]=2; dLength++; } cleck=0; t1.reset(); } else if(roll3==1&&colO[1]==1&&cleck==1)//s10 5 { if(enter1==1) { lcd.printf("5"); data[dLength]=5; dLength++; } cleck=0; t1.reset(); } else if(roll3==1&&colO[2]==1&&cleck==1)//s11 8 { if(enter1==1) { lcd.printf("8"); data[dLength]=8; dLength++; } cleck=0; t1.reset(); } else if(roll3==1&&colO[3]==1&&cleck==1)//s12 0 { if(enter1==1) { lcd.printf("0"); data[dLength]=0; dLength++; } cleck=0; t1.reset(); } else if(roll4==1&&colO[0]==1&&cleck==1)//s13 1 { if(enter1==1) { lcd.printf("1"); data[dLength]=1; dLength++; } cleck=0; t1.reset(); } else if(roll4==1&&colO[1]==1&&cleck==1)//s14 4 { if(enter1==1) { lcd.printf("4"); data[dLength]=4; dLength++; } cleck=0; t1.reset(); } else if(roll4==1&&colO[2]==1&&cleck==1)//s15 7 { if(enter1==1) { lcd.printf("7"); data[dLength]=7; dLength++; } cleck=0; t1.reset(); } else if(roll4==1&&colO[3]==1&&cleck==1)//s16 { cleck=0; t1.reset(); } count++; if(count==4) { count=0; } } double getvolt() // get Voltage value ;unit(VOLT) { uint16_t value0[3]; float volt,sval0; cs=1; //slave select cs=0; value0[0] = device.write(0xD0); //read CH0 value0[1] = device.write(0x00); value0[2] = device.write(0x00); cs=1; value0[0] = (value0[0] & 0x07)<<9;//convert to 12bit value0[1] = (value0[1] & 0xFF)<<1; value0[2] = (value0[2] & 0x80)>>7; sval0 = value0[0]|value0[1]|value0[2];//sum bit volt = (sval0/4095)*5; //calculate ;volt return volt; } double getAmp() //get current ;unit(AMP) { char buffer[50] = "/0"; float Ampoffset = 2.5;//use positive current float mVperAmp = 0.1; //typical set float Voltage; float Amp,val; val = ((RawValue.read()*((3.3/5)* 1023))+17);//read anaog value sprintf(buffer,"%.0f",val); //convert to integer val = (float)atof(buffer); //pc.printf("%f\n",val); Voltage = (5*val)/1023;//calculate to Vin sprintf(buffer,"%.3f",Voltage);//convert to integer Voltage = (float)atof(buffer); Amp = (Voltage-2.5)/0.1; //calculate to Amp return Amp; } void read() { current = getAmp(); volt = getvolt(); }