Pengujian Battery
Dependencies: SDFileSystem TextLCD mbed
Fork of Seeed_SDCard_Shield by
Diff: main.cpp
- Revision:
- 5:47c9375675bb
- Parent:
- 3:5edc67dee8b7
- Child:
- 6:1b08722d3aba
diff -r 0928d6e00f01 -r 47c9375675bb main.cpp --- a/main.cpp Fri Feb 13 09:40:18 2015 +0000 +++ b/main.cpp Thu Feb 02 08:01:29 2017 +0000 @@ -1,45 +1,407 @@ -/* Copyright (c) 2010-2011 mbed.org, MIT License -* -* Permission is hereby granted, free of charge, to any person obtaining a copy of this software -* and associated documentation files (the "Software"), to deal in the Software without -* restriction, including without limitation the rights to use, copy, modify, merge, publish, -* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the -* Software is furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in all copies or -* substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING -* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#include "mbed.h" -#include "SDFileSystem.h" - -Serial pc(USBTX, USBRX); -SDFileSystem sd(D11, D12, D13, D10, "sd"); // MOSI, MISO, SCK, CS -FILE *fp; - -int main() { - wait(2); - pc.printf("Initializing\r\n"); - - fp = fopen("/sd/hello.txt", "r"); - if (fp != NULL) { - fclose(fp); - remove("/sd/hello.txt"); - pc.printf("Remove an existing file with the same name\r\n"); - } - - fp = fopen("/sd/hello.txt", "w"); - if (fp == NULL) { - pc.printf("Unable to write the file\r\n"); - } else { - fprintf(fp, "mbed SDCard application!"); - fclose(fp); - pc.printf("File successfully written!\r\n"); - } -} +#include "mbed.h" +#include "TextLCD.h" +#define max 5 +#include "SDFileSystem.h" + + + + +AnalogIn V1_VALUE(A0); +AnalogIn V2_VALUE(A1); +AnalogIn V3_VALUE(A2); +AnalogIn V4_VALUE(A3); +DigitalOut led(A4); +DigitalIn mybutton(USER_BUTTON); +DigitalIn mybutton1(D2); +DigitalIn mybutton2(D3); +DigitalIn mybutton3(A5); + +Serial pc(USBTX, USBRX); +Timer t; +Timer t1; +Timer t2; +Timer t3; +Timer t4; + +TextLCD lcd(D8, D9, D4, D5, D6, D7, TextLCD::LCD20x4); +SDFileSystem sd(D11, D12, D13, D10, "sd"); // MOSI, MISO, SCK, CS +FILE *fp; + + + float V1,V2,V3,V4,VTOTAL,m,m1,m2,m3,m4,stat,stat1,stat2,stat3,abc1,abc2,abc3,abc4; + float x1=19.2225579; + float x2=19.2643794; + float x3=19.1854839; + float x4=19.1653226; + int n=1000; + int p,z,x,c,d,d1,d2,d3,d4,jam,number; + +int main() +{ + + restart: + + int count=0; + float jum1,jum2,jum3,jum4; + + lcd.cls (); + lcd.locate (0, 0); + lcd.printf ("********************"); + lcd.locate (0, 1); + lcd.printf ("* Alat Ukur *"); + lcd.locate (0, 2); + lcd.printf ("*Pengujian Battery *"); + lcd.locate (0, 3); + lcd.printf ("********************"); + + while(1) + { + if (mybutton == 0){ + p = 1; + break; + } + } + + loop: + //SDCARD ===================================== + lcd.cls(); + //pc.printf("Initializing\r\n"); + lcd.printf("Initializing"); + wait(0.1); + lcd.cls(); + lcd.printf("Initializing."); + wait(0.1); + lcd.cls(); + lcd.printf("Initializing.."); + wait(0.1); + lcd.cls(); + lcd.printf("Initializing..."); + wait(0.1); + + + char buf [10]; + number %= 1000000; + sprintf(buf,"/sd/data%d.csv",number); + fp = fopen(buf, "r"); + if (fp != NULL) { + fclose(fp); + number++; + //pc.printf("data%d\r\n",number); + lcd.locate(0, 1); + lcd.printf("data%d\r\n",number); + wait(1.0); + goto loop; + } + + if (number == 0) { + number++; + goto loop; + } + + fp = fopen(buf, "w"); + if (fp == NULL) { + //pc.printf("Unable to write the file\r\n"); + lcd.printf("Unable to write the file"); + } else { + fprintf(fp, "WAKTU,V1,V2,V3,V4,VTOTAL\n"); + pc.printf("File name: data%d\r\n",number); + pc.printf("File successfully written!\r\n"); + lcd.cls(); + lcd.printf("File successfully\nwritten!\n"); + lcd.printf("File Name : data%d",number); + wait(4.0); + } + + //Input Lama Pengujian =================================================================== + lcd.cls(); + lcd.printf("Lama Pengujian:\n1 = 180 Menit\n2 = 300 Menit\n3 = 480 Menit"); + //pc.printf("Lama Pengujian:\n1 = 180 Menit\n2 = 300 Menit\n3 = 480 Menit"); + wait(1.0); + + + while(p==1) + { + if(mybutton1==0) + { + lcd.cls(); + jam=180; + lcd.locate(0, 0); + lcd.printf("Pengujian 180 Menit\n"); + pc.printf("Pengujian 180 Menit\n"); + wait(1.0); + z=1; + p=0; + break; + } + + if(mybutton2==0) + { + lcd.cls(); + jam=300; + lcd.locate(0, 0); + lcd.printf("Pengujian 300 Menit\n"); + pc.printf("Pengujian 300 Menit\n"); + wait(1.0); + z=1; + p=0; + break; + } + + if(mybutton3==0) + { + lcd.cls(); + jam=480; + lcd.locate(0, 0); + lcd.printf("Pengujian 480 Menit\n"); + pc.printf("Pengujian 480 Menit\n"); + wait(1.0); + z=1; + p=0; + break; + } + } + + //Pengukuran Vopen================================= + lcd.cls(); + lcd.printf("Tekan 1 Untuk V Open\n"); + pc.printf("Tekan 1 Untuk VOPEN\n"); + wait(1.0); + + while(z==1) + { + V1 = V1_VALUE.read(); + V1 = (V1 * 3300*x1)/n; + + V2 = V2_VALUE.read(); + V2 = ((V2 * 3300)*x2)/n; + V2 = V2-V1; + + V3 = V3_VALUE.read(); + V3 = ((V3 * 3300)*x3)/n; + V3 = V3-V1-V2; + + V4 = V4_VALUE.read(); + V4 = ((V4 * 3300)*x4)/n; + V4 = V4-V1-V2-V3; + + VTOTAL=V1+V2+V3+V4; + + if(mybutton1==0) + { + fprintf(fp,"V Open,%.1f V,%.1f V,%.1f V,%.1fV,%.1f\r\n",V1,V2,V3,V4,VTOTAL); + lcd.locate(0, 1); + lcd.printf("V Open Telah Diukur"); + //lcd.locate(1, 2); + //lcd.printf("Has been measured"); + pc.printf("\nVOPEN : Volt V1 = %.1f V, Volt V2 = %.1f V, Volt V3 = %.1f V, Volt V4 = %.1fV VTOTAL=%.1f\r\n",V1,V2,V3,V4,VTOTAL); + wait(3.0); + z=0; + x=1; + break; + } + } + + lcd.cls(); + lcd.printf("Silahkan beri beban\nTekan run untuk mulai"); + // pc.printf("Silahkan Beri Beban\n\rTekan Run Untuk Mulai\n\r"); + + while(x==1) + { + V1 = V1_VALUE.read(); + V1 = (V1 * 3300*x1)/n; + + V2 = V2_VALUE.read(); + V2 = ((V2 * 3300)*x2)/n; + V2 = V2-V1; + + V3 = V3_VALUE.read(); + V3 = ((V3 * 3300)*x3)/n; + V3 = V3-V1-V2; + + V4 = V4_VALUE.read(); + V4 = ((V4 * 3300)*x4)/n; + V4 = V4-V1-V2-V3; + + VTOTAL=V1+V2+V3+V4; + abc1=V1; + abc2=V2; + abc3=V3; + abc4=V4; + if(mybutton==0) + { + lcd.cls(); + fprintf(fp,"0,%.1f V,%.1f V,%.1f V,%.1fV,%.1f\r\n",V1,V2,V3,V4,VTOTAL); + lcd.printf("Pengujian Dimulai\n"); + //pc.printf("0,Volt V1 = %.2f V, Volt V2 = %.2f V, Volt V3 = %.2f V, Volt V4 = %.2fV VTOTAL=%.2f\r\n",V1,V2,V3,V4,VTOTAL); + wait(1.0); + c=1; + x=0; + break; + } + } + //Timer Start + t.start(); + t1.start(); + t2.start(); + t3.start(); + t4.start(); + + + float Vsat=10.80; + int n=1000; + + ulang: + while(c==1) + { + lcd.cls(); + d=t.read(); + d1=t1.read(); + d2=t2.read(); + d3=t3.read(); + d4=t4.read(); + + if(d==59) + { + t.reset(); + m=m+1; + + } + if(d1==59) + { + t1.reset(); + m1=m1+1; + + } + if(d2==59) + { + t2.reset(); + m2=m2+1; + + } + if(d3==59) + { + t3.reset(); + m3=m3+1; + + } + + //Volt 4 Battery + V1 = V1_VALUE.read(); + V1 = (V1 * 3300*x1)/n; + jum1 += V1; + + V2 = V2_VALUE.read(); + V2 = ((V2 * 3300)*x2)/n; + V2 = V2-V1; + jum2 += V2; + + V3 = V3_VALUE.read(); + V3 = ((V3 * 3300)*x3)/n; + V3 = V3-V1-V2; + jum3 += V3; + + V4 = V4_VALUE.read(); + V4 = ((V4 * 3300)*x4)/n; + V4 = V4-V1-V2-V3; + jum4 += V4; + + count++; + + + stat=((m*100)/jam); + stat1=((m1*100)/jam); + stat2=((m2*100)/jam); + stat3=((m3*100)/jam); + + lcd.cls(); + if(V1<=Vsat) + { + lcd.locate(10, 0); + lcd.printf("C1=%.1f",stat); + lcd.locate(19, 0); + lcd.printf("%"); + t.stop(); + } + if(V2<=Vsat) + { + lcd.locate(10, 1); + lcd.printf("C2=%.1f",stat1); + t1.stop(); + } + if(V3<=Vsat) + { + lcd.locate(10, 2); + lcd.printf("C3=%.1f",stat2); + t2.stop(); + } + if(V4<=Vsat) + { + lcd.locate(10, 3); + lcd.printf("C4=%.1f",stat3); + t3.stop(); + } + + if((V4<Vsat)||(V3<Vsat)||(V2<Vsat)||(V1<Vsat)) + { + led=!led; + } + else + { + lcd.locate(9, 0); + lcd.printf("Time:%.0d:%.0f",d3,m3); + led=0; + } + + while (count == max){ + + jum1/=max; + jum2/=max; + jum3/=max; + jum4/=max; + VTOTAL = jum1+jum2+jum3+jum4; + + abc1=jum1; + abc2=jum2; + abc3=jum3; + abc4=jum4; + + jum1 = 0; + jum2 = 0; + jum3 = 0; + jum4 = 0; + count = 0; + + goto ulang; + + } + lcd.locate(0, 0); + lcd.printf("V1=%.1fV",abc1); + lcd.locate(0, 1); + lcd.printf("V2=%.1fV",abc2); + lcd.locate(0, 2); + lcd.printf("V3=%.1fV",abc3); + lcd.locate(0, 3); + lcd.printf("V4=%.1fV",abc4); + wait(1.0); + if(d4>902){ + fprintf(fp,"%.0f,%.1f V,%.1f V,%.1f V,%.1fV,%.1f\r\n",m,abc1,abc2,abc3,abc4,VTOTAL); + //pc.printf("%.0f,Volt V1 = %.2f V, Volt V2 = %.2f V, Volt V3 = %.2f V, Volt V4 = %.2fV VTOTAL=%.2f\r\n",m,V1,V2,V3,V4,VTOTAL); + t4.reset(); + } + + if(mybutton==0) + { + c=0; + led=0; + fprintf(fp,"%.0f,%.1f V,%.1f V,%.1f V,%.1fV,%.1f\r\n",m,abc1,abc2,abc3,abc4,VTOTAL); + break; + } + } + + fclose(fp); + lcd.cls(); + lcd.printf(" Pengujian Selesai"); + //pc.printf("Pengujian Selsai"); + wait(2.0); + goto restart; +}