#!/bin/sh # process sensor data then print to console # @Param 1 adc128 data high 8bit # @Param 2 adc128 data low 8bit # @Param 3 customization channel name # @Param 4 division factor convert_adc128_data(){ # remove data prefix '0x' hex_value1=$(echo "$1" | awk '{sub(/^0x/,""); print}') hex_value2=$(echo "$2" | awk '{sub(/^0x/,""); print}') merge_value="${hex_value1}${hex_value2}" # bc calculator recognized upper case only, change data to upper case upper_hex_value=$(echo "$merge_value" | awk '{ for(i=1; i<=length($0); i++){ if(tolower(substr($0,i,1)) ~ /^[a-f]$/) printf toupper(substr($0,i,1)); else printf substr($0,i,1); } print "" }') # calculate dec value then print it to console dec_val=$(echo "ibase=16; $upper_hex_value" | bc) volt=$(echo "scale=4; $dec_val / 16 / 4096 * 2.65 / $4" | bc) format_volt=$(echo "$volt" | awk '{ if ($0 ~ /^\./) print "0" $0; else print $0 }') echo "$3 : $format_volt v, hex value: $upper_hex_value" } # E.G. convert_adc128_data 0x08 0x20 "3V3" "1" convert_adc128_data $1 $2 $3 $4