This is for our FYDP project. 2 MPU6050s are used
drivers/ACS712/ACS712.cpp@0:21019d94ad33, 2015-03-21 (annotated)
- Committer:
- majik
- Date:
- Sat Mar 21 21:31:29 2015 +0000
- Revision:
- 0:21019d94ad33
Both IMUs work now
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
majik | 0:21019d94ad33 | 1 | #include "ACS712.h" |
majik | 0:21019d94ad33 | 2 | |
majik | 0:21019d94ad33 | 3 | ACS712::ACS712() : sensor(SENSOR_PIN), |
majik | 0:21019d94ad33 | 4 | currentSwitch(SWITCH_PIN) |
majik | 0:21019d94ad33 | 5 | { |
majik | 0:21019d94ad33 | 6 | currentSwitch = 1; //turn off the currentSwitch (1 = off, 0 = on) |
majik | 0:21019d94ad33 | 7 | m = 0; |
majik | 0:21019d94ad33 | 8 | b = 0; |
majik | 0:21019d94ad33 | 9 | } |
majik | 0:21019d94ad33 | 10 | |
majik | 0:21019d94ad33 | 11 | void ACS712::calibrate(){ |
majik | 0:21019d94ad33 | 12 | float V1,V2,A1,A2; |
majik | 0:21019d94ad33 | 13 | A1 = LOW_CURRENT; |
majik | 0:21019d94ad33 | 14 | A2 = HIGH_CURRENT; |
majik | 0:21019d94ad33 | 15 | |
majik | 0:21019d94ad33 | 16 | currentSwitch = 1; |
majik | 0:21019d94ad33 | 17 | wait_ms(100); |
majik | 0:21019d94ad33 | 18 | //wait_ms(5000);//MARK |
majik | 0:21019d94ad33 | 19 | V1 = read_sensor(CALIBRATION_SAMPLES,10); |
majik | 0:21019d94ad33 | 20 | |
majik | 0:21019d94ad33 | 21 | currentSwitch = 0; |
majik | 0:21019d94ad33 | 22 | //Thread::wait(100); |
majik | 0:21019d94ad33 | 23 | //wait_ms(5000);//MARK |
majik | 0:21019d94ad33 | 24 | wait_ms(100); |
majik | 0:21019d94ad33 | 25 | V2 = read_sensor(CALIBRATION_SAMPLES,10); |
majik | 0:21019d94ad33 | 26 | currentSwitch = 1; |
majik | 0:21019d94ad33 | 27 | m = (A2-A1)/(V2-V1); |
majik | 0:21019d94ad33 | 28 | b = A1 - V1*m; |
majik | 0:21019d94ad33 | 29 | } |
majik | 0:21019d94ad33 | 30 | float ACS712::get_current(){ |
majik | 0:21019d94ad33 | 31 | return m*read_sensor(10,0) + b; |
majik | 0:21019d94ad33 | 32 | } |
majik | 0:21019d94ad33 | 33 | float ACS712::read_sensor(){ |
majik | 0:21019d94ad33 | 34 | sensor_val = sensor.read(); |
majik | 0:21019d94ad33 | 35 | return sensor_val; |
majik | 0:21019d94ad33 | 36 | } |
majik | 0:21019d94ad33 | 37 | float ACS712::read_sensor(int n, int t){ |
majik | 0:21019d94ad33 | 38 | sensor_val = 0; |
majik | 0:21019d94ad33 | 39 | for(int i = 0; i<n; i++){ |
majik | 0:21019d94ad33 | 40 | sensor_val += sensor.read(); |
majik | 0:21019d94ad33 | 41 | wait_ms(t); |
majik | 0:21019d94ad33 | 42 | //Thread::wait(10); |
majik | 0:21019d94ad33 | 43 | } |
majik | 0:21019d94ad33 | 44 | sensor_val = sensor_val/float(n); |
majik | 0:21019d94ad33 | 45 | return sensor_val; |
majik | 0:21019d94ad33 | 46 | } |