#!/bin/bash
# by K.Jacobs / http://www.grautier.com / CC-by-NC-SA

### Set ADC, Set VARs###
i2c="0x4b"                                                                      # I2C Adresse
i2cdrv="twi0"                                                                   # I2C Drive
vref="3.3"                                                                      # Referenzspannung
vin="3"                                                                         # Volt in 12V/5V/3.3V = 3V
ADCbit="255"                                                                    # ADC Auflösung

### Werte Auslesen ###
case "$1" in
   12V)
     adc=$(/usr/sbin/i2cget -y $i2cdrv $i2c 0x02 w |awk -F "0x" '{print $2}')   #ADC zweimal auslesen !!! Read DB !!!
     adc=$(/usr/sbin/i2cget -y $i2cdrv $i2c 0x02 w |awk -F "0x" '{print $2}')
     adc=$(echo "$adc" | cut -c3-4)                                             # LSB verwerten
     adc=$(echo "$adc" | tr '[a-z]' '[A-Z]')                                    # In Grossbuchstaben wandeln für BC
     adc=$(echo "ibase=16; $adc" | bc)                                          # HEX -> DEC
     Vbit=$(echo "scale=10; $vref / $ADCbit" | bc)                              # Volt per BIT bei 3,3V
     V3vbit=$(echo "scale=10; $vin / $Vbit" | bc)                               # BITS bei 3V
     V12Vbit=$(echo "scale=10; 12 / $V3Vbit" | bc)                              # Volt per Bit bei 12V
     adc=$(echo "scale=2; $V12Vbit * $adc" | bc)                                # Spannung Berechnen
   ;;
   5V)
     adc=$(/usr/sbin/i2cget -y $i2cdrv $i2c 0x01 w |awk -F "0x" '{print $2}')
     adc=$(/usr/sbin/i2cget -y $i2cdrv $i2c 0x01 w |awk -F "0x" '{print $2}')
     adc=$(echo "$adc" | cut -c3-4)                                             # LSB verwerten
     adc=$(echo "$adc" | tr '[a-z]' '[A-Z]')                                    # In Grossbuchstaben wandeln für BC
     adc=$(echo "ibase=16; $adc" | bc)                                          # HEX -> DEC
     Vbit=$(echo "scale=10; $vref / $ADCbit" | bc)                              # Volt per BIT bei 3,3V
     V3vbit=$(echo "scale=10; $vin / $Vbit" | bc)                               # BITS bei 3V
     V5Vbit=$(echo "scale=10; 5 / $V3Vbit" | bc)                                # Volt per Bit bei 5V
     adc=$(echo "scale=2; $V5Vbit * $adc" | bc)                                 # Spannung Berechnen
   ;;
   3V3)
     adc=$(/usr/sbin/i2cget -y $i2cdrv $i2c 0x00 w |awk -F "0x" '{print $2}')
     adc=$(/usr/sbin/i2cget -y $i2cdrv $i2c 0x00 w |awk -F "0x" '{print $2}')
     adc=$(echo "$adc" | cut -c3-4)                                             # LSB verwerten
     adc=$(echo "$adc" | tr '[a-z]' '[A-Z]')                                    # In Grossbuchstaben wandeln für BC
     adc=$(echo "ibase=16; $adc" | bc)                                          # HEX -> DEC
     Vbit=$(echo "scale=10; $vref / $ADCbit" | bc)                              # Volt per BIT bei 3,3V
     V3vbit=$(echo "scale=10; $vin / $Vbit" | bc)                               # BITS bei 3V
     V3V3bit=$(echo "scale=10; 3.3 / $V3Vbit" | bc)                             # Volt per Bit bei 3,3V
     adc=$(echo "scale=2; $V3V3bit * $adc" | bc)                                # Spannung Berechnen

   ;;
   1V2)
     adc=$(/usr/sbin/i2cget -y $i2cdrv $i2c 0x03 w |awk -F "0x" '{print $2}')
     adc=$(/usr/sbin/i2cget -y $i2cdrv $i2c 0x03 w |awk -F "0x" '{print $2}')
     adc=$(echo "$adc" | cut -c3-4)                                             # LSB verwerten
     adc=$(echo "$adc" | tr '[a-z]' '[A-Z]')                                    # In Grossbuchstaben wandeln für BC
     adc=$(echo "ibase=16; $adc" | bc)                                          # HEX -> DEC
     Vbit=$(echo "scale=10; $vref / $ADCbit" | bc)                              # Volt per BIT bei 3,3V
     adc=$(echo "scale=2; $Vbit * $adc" | bc)                                   # Spannung Berechnen

   ;;

   *)
     echo "Parameter:"
     echo "spg.sh <Sensor>"
     echo "<Sensor> = 12V, 5V, 3V3, 1V2"
   ;;
esac

### Wert ausgeben ###
echo $adc

exit 0