| 
 | 
 
為了運用ACS712低電流檢測器測量電池殘餘電量, 
我修改了GP2D12的程式碼,目的是將GP2D12的顯示接收距離值取消轉換,直接顯示其量測電壓值, 
但是BASIC STAMP界面顯示數值始終為0伏特,請問以下程式碼該如何修改才能達到其目的, 
謝謝。 
---以下為未經修改的原始碼--- 
' -----[ I/O Definitions ]------------------------------------------------- 
Adc0831         PIN     0               ' ADC0831 Chip Select (ADC0831.1) 
AdcClock        PIN     1               ' ADC0831 Clock (ADC0831.7) 
AdcData         PIN     2               ' ADC0831 Data (ADC0831.6) 
' -----[ Constants ]------------------------------------------------------- 
span            CON     5               ' 5 cm Per Data Point 
' -----[ Variables ]------------------------------------------------------- 
result          VAR     Byte            ' ADC8031 Result 
volts           VAR     Word            ' Volts (0.01 Increments) 
cm              VAR     Byte            ' centimeters 
index           VAR     Nib 
test1           VAR     Byte            ' Values For 
test2           VAR     Byte            ' Interpolation 
slope           VAR     Word            ' mV/cm between test points 
' -----[ EEPROM Data ]----------------------------------------------------- 
Vout            DATA    251, 179, 139, 114,  97 
                DATA     85,  76,  67,  62,  57 
                DATA     53,  50,  48,  46,  43 
                DATA      0 
' -----[ Initialization ]-------------------------------------------------- 
HIGH Adc0831                            ' Disable ADC0831 
 
' -----[ Program Code ]---------------------------------------------------- 
  DO 
    GOSUB Read_GP2D12                     ' Read Sensor Value 
    GOSUB Calculate_Distance              ' Convert Value To cm 
    DEBUG HOME, "Distance = ", DEC cm, " cm " 
    PAUSE 100 
  LOOP 
  END 
' -----[ Subroutines ]----------------------------------------------------- 
Read_GP2D12: 
  volts = 0                             ' Reset Sensor Value 
  FOR index = 0 TO 2                    ' Read 3 Times 
    LOW Adc0831                         ' Enable ADC0831 
    SHIFTIN AdcData, AdcClock, MSBPOST, [result\9]  ' Read The Voltage 
    HIGH Adc0831                        ' Disable ADC0831 
    volts = volts + result              ' Add The Values 
    PAUSE 30 
  NEXT 
  volts = volts / 3                     ' Average The Readings 
  RETURN 
Calculate_Distance: 
  FOR index = 0 TO 15                   ' Search DATA Table For Value 
    READ (Vout + index), test2          ' Get Value From DATA Table 
    IF (test2 <= volts) THEN EXIT       ' Found Value 
  NEXT 
  SELECT index 
    CASE 0 
      cm = 10                           ' Set To Minimum Distance 
    CASE 1 TO 14                        ' Calculate Distance 
      cm = 10 + (5 * index) 
      IF (test2 < volts) THEN           ' Estimate Using Interpolation 
        READ (Vout + index - 1), test1 
        slope = (test1 - test2) * 10 / span  ' Calculate Slope 
        cm = cm - ((volts - test2) * 10 / slope) 
      ENDIF 
    CASE 15 
      cm = 80                           ' Set To Maximum Distance 
  ENDSELECT 
  RETURN |   
 
 
 
 |