first re-commit.
This commit is contained in:
		
							
								
								
									
										3
									
								
								pigpio-master/EXAMPLES/C/POT_CAP_RECHARGE/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								pigpio-master/EXAMPLES/C/POT_CAP_RECHARGE/README
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| Function to time capacitor charging (through a resistance). | ||||
|  | ||||
| The time can be used to estimate the resistance. | ||||
							
								
								
									
										94
									
								
								pigpio-master/EXAMPLES/C/POT_CAP_RECHARGE/pot_cap_charge.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								pigpio-master/EXAMPLES/C/POT_CAP_RECHARGE/pot_cap_charge.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include <pigpio.h> | ||||
|  | ||||
| /* | ||||
|    Measure how long a capacitor takes to charge through a resistance. | ||||
|  | ||||
|    A potentimeter is used to vary the resistance. | ||||
|  | ||||
|    The time taken will be proportional to the resistance. | ||||
|  | ||||
|    3V3 ----- Potentiometer --+-- Capacitor ----- Ground | ||||
|                              | | ||||
|                              +-- gpio | ||||
|  | ||||
|  | ||||
|   gcc -o pot_cap_charge pot_cap_charge.c -lpigpio -lpthread -lrt | ||||
|   sudo ./pot_cap_charge | ||||
|  | ||||
| */ | ||||
|  | ||||
| #define GPIO 25 | ||||
|  | ||||
| #define MAX_READING 1000 | ||||
|  | ||||
| static uint32_t rechargeTick = 0; | ||||
|  | ||||
| void callback(int gpio, int level, uint32_t tick) | ||||
| { | ||||
|    static uint32_t smooth = 0; | ||||
|    static int reading = 0; | ||||
|  | ||||
|    uint32_t raw; | ||||
|  | ||||
|    if (level == 1) /* measure recharge time */ | ||||
|    { | ||||
|       ++reading; | ||||
|  | ||||
|       if (rechargeTick) | ||||
|       { | ||||
|          raw = tick - rechargeTick; /* set in main */ | ||||
|  | ||||
|          if (raw < MAX_READING) /* ignore outliers */ | ||||
|          { | ||||
|             /* smooth using 0.8 * smooth + 0.2 * raw */ | ||||
|  | ||||
|             smooth = (raw + (4 * smooth)) / 5; | ||||
|  | ||||
|             printf("%d %d %d\n", reading, raw, smooth); | ||||
|          } | ||||
|          else | ||||
|          { | ||||
|             /* ignore outlier, set dot at fixed position */ | ||||
|             printf("%d %d %d\n", reading, 40, smooth); | ||||
|          } | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|          /* ignore reschedule, set dot at fixed position */ | ||||
|          printf("%d %d %d\n", reading, 20, smooth); | ||||
|       } | ||||
|    } | ||||
| } | ||||
|  | ||||
| int main (int argc, char *argv[]) | ||||
| { | ||||
|    uint32_t t1, t2; | ||||
|    int tDiff; | ||||
|  | ||||
|    if (gpioInitialise()<0) return 1; | ||||
|  | ||||
|    gpioSetAlertFunc(GPIO, callback); /* callback when GPIO changes state */ | ||||
|      | ||||
|    while (1) | ||||
|    { | ||||
|       gpioWrite(GPIO, PI_OFF); /* drain capacitor */ | ||||
|  | ||||
|       gpioDelay(200); /* microseconds */ | ||||
|  | ||||
|       t1 = gpioTick(); | ||||
|  | ||||
|       gpioSetMode(GPIO, PI_INPUT); /* start capacitor recharge */ | ||||
|  | ||||
|       t2 = gpioTick(); | ||||
|  | ||||
|       /* dump reading if rechargeTick not accurate to 3 micros */ | ||||
|  | ||||
|       if ((t2 - t1) < 3) rechargeTick = t1; else rechargeTick = 0; | ||||
|  | ||||
|       gpioDelay(5000); /* microseconds, nominal 200 readings per second */ | ||||
|    } | ||||
|  | ||||
|    gpioTerminate(); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user