2017-02-14 3 views
1

Я использую какой-то код от Fraser May для MCP8004 (adc), который я модифицировал для MCP3002, подключенного к Raspberry Pi 1B +, ​​и теперь я пытаюсь отправить данные, которые я собираю, на искровой сервер, только я нахожу свои попытки захват данных возвращает пустую строку. Я новичок в Python, но имею некоторый опыт кодирования из школы (ME).Python: Как это работает {} форматирование, чтобы вытащить правильные данные?

Вот что я должен собрать АДК данные:

def getAdc (channel): 
     #check valid channel 
     if ((channel>1)or(channel<0)): 
      return -1 

     # Preform SPI transaction and store returned bits in 'r' 
     r = spi.xfer([1, (4+2+channel) << 4, 0]) 

     #Filter data bits from retruned bits 
     adcOut = ((r[0]&3) << 8) + r[1] 
     percent = int(round(adcOut/10.24)) 

     #print out 0-1023 value and percentage 
     print("ADC Output: {0:4d} Percentage: {1:3}%".format (adcOut,percent)) 
     sleep(1) 
     return adcOut 

Теперь в моем сценарии, чтобы отправить данные на сервер, что я делаю это (плюс модифицированный материал Phant):

adcOut=[] 
while True: 

      print("collecting data") 
      adc = []   #sets adc as a list 

      for i in range(2): 
        getAdc(i) 
        adc.append(adcOut) 
        print adcOut 
      print("ADC data collected!") 

я думал Я могу просто позвонить adc[0] или adc[1], чтобы получить нужные данные, которые отображаются в функции getAdc, но, видимо, нет, я получаю пустой список ([]).

Я думаю, что моя проблема в том, что происходит в getAdc, где используются {0:4d} и {1:3}, но я не уверен, что они делают. Может кто-нибудь помочь сломать эту часть? До сих пор все, что мне удалось найти, это документы, объясняющие, что делают d и %, но они не имеют для меня смысла, как применимо здесь.

Заранее благодарен!

* примечание: adcOut объявлен глобальным до моего getAdc сценария.

+3

Вы должны сделать возвращаемые значения getAdc вместо того, чтобы просто печатать их. – BrenBarn

+1

Где «adcOut» заполняется значением? Почему вы не храните 'getAdc (i)' в переменной? – Dan

+0

Упс, отредактированный для исправления. Код, который я использую, имеет «return adcOut» в конце ... Я скопировал это из файла, который у меня есть на моем ПК, а не в точной версии на моем Pi. Моя проблема, похоже, заключается в том, чтобы вытащить то, что я хочу от adcOut. adcOut заселен в getAdc (верхний код) и далее вниз Я вызываю getAdc (нижний код), чтобы захватить adcOut – gr8flux

ответ

2

Вариант 1: Необходимо указать, что вы хотите изменить глобальную переменную adcOut, а не просто прочитать ее значение. Изменение getAdc() следующим добавлением global adcOut функции:

def getAdc (channel): 
    global adcOut # <-- this line is added 
    #check valid channel 
    if ((channel>1)or(channel<0)): 
     return -1 

    # Preform SPI transaction and store returned bits in 'r' 
    r = spi.xfer([1, (4+2+channel) << 4, 0]) 

    #Filter data bits from retruned bits 
    adcOut = ((r[0]&3) << 8) + r[1] 
    percent = int(round(adcOut/10.24)) 

    #print out 0-1023 value and percentage 
    print("ADC Output: {0:4d} Percentage: {1:3}%".format (adcOut,percent)) 
    sleep(1) 

Вариант 2: В качестве альтернативы, вы можете вернуться adcOut путем добавления return adcOut к концу функции и изменения кода в вашей точке вызова следующим образом:

adcOut=[] 
while True: 

     print("collecting data") 
     adc = []   #sets adc as a list 

     for i in range(2): 
       adcOut = getAdc(i) # <-- note this changed line 
       adc.append(adcOut) 
       print adcOut 
     print("ADC data collected!") 

лучший вариант, ИМО, является # 2 - вернуть adcOut, а не использовать глобальные переменные.

+0

Фантастический Виджай Варадан, спасибо! Не ожидал, что это будет проблемой, рад, что вы это заметили. – gr8flux

Смежные вопросы