64 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python3
 | |
| #############################################################################
 | |
| # Filename    : ADC.py
 | |
| # Description : ADC and DAC
 | |
| # Author      : freenove
 | |
| # modification: 2018/09/15
 | |
| ########################################################################
 | |
| import smbus
 | |
| import time
 | |
| class Adc:
 | |
|     def __init__(self):
 | |
|         self.address = 0x48  #default address of PCF8591
 | |
|         self.bus=smbus.SMBus(1)
 | |
|         self.cmd=0x40        #command
 | |
| 
 | |
|     def analogRead(self,chn):#read ADC value,chn:0,1,2,3
 | |
|         value=[0,0,0,0,0,0,0,0,0]
 | |
|         for i in range(9):
 | |
|             value[i] = self.bus.read_byte_data(self.address,self.cmd+chn)
 | |
|         value=sorted(value)
 | |
|         return value[4]
 | |
|     def analogWrite(self,value):#write DAC value
 | |
|         self.bus.write_byte_data(address,cmd,value)
 | |
|     def loop(self):
 | |
|         while True:
 | |
|             self.value = self.analogRead(2)   #read the ADC value of channel 0,1,2,3
 | |
|             #analogWrite(value)      #write the DAC value
 | |
|             self.voltage = self.value / 256.0 * 3.3  #calculate the voltage value
 | |
|             print ('ADC Value : %d, Voltage : %.2f'%(self.value,self.voltage))
 | |
|             time.sleep(0.01)
 | |
|     def recvADC(self,channel):
 | |
|         while(1):
 | |
|             self.value = self.analogRead(channel)   #read the ADC value of channel 0,1,2,
 | |
|             self.value1 = self.analogRead(channel)
 | |
|             if self.value==self.value1:
 | |
|                 break;
 | |
|         self.voltage = self.value / 256.0 * 3.3  #calculate the voltage value
 | |
|         self.voltage = round(self.voltage,2)
 | |
|         return self.voltage
 | |
|     def destroy():
 | |
|         self.bus.close()
 | |
| 
 | |
| def loop():
 | |
|     while True:
 | |
|         adc=Adc()
 | |
|         Left_IDR=adc.recvADC(0)
 | |
|         print (Left_IDR)
 | |
|         Right_IDR=adc.recvADC(1)
 | |
|         print (Right_IDR)
 | |
|         Power=adc.recvADC(2)
 | |
|         print (Power)
 | |
|         time.sleep(1)
 | |
|         #print '----'
 | |
| 
 | |
| def destroy():
 | |
|     pass
 | |
| 
 | |
| # Main program logic follows:
 | |
| if __name__ == '__main__':
 | |
|     print ('Program is starting ... ')
 | |
|     try:
 | |
|         loop()
 | |
|     except KeyboardInterrupt:  # When 'Ctrl+C' is pressed, the child program destroy() will be  executed.
 | |
|         destroy() |