2015-06-25 2 views
-1

Я пытаюсь использовать малину Pi 2, чтобы соединить два датчика и позволить им работать. Это аналоговый датчик света DFROBOT и аналоговый звуковой датчик DFROBOT.Как подключить два датчика к малине Pi?

Я также использую AD-конвертер, и конвертер подключается к контактам SCL и SDA на малине Pi.

Конвертер имеет четыре Ains, поэтому я могу использовать два из них, один подключается к датчику освещенности, один подключается к звуковому датчику.

Может ли кто-нибудь помочь мне с кодом Python? Я хочу, чтобы мой Pi получил 1 секунду для Ain1 (датчик освещенности) и 1 секунду для Ain2 (датчик звука), поочередно.

Вот мой код, но кажется, что он не работает.

import time 

import datetime 

from smbus import SMBus 

bus = SMBus(1) 

def readSoundSensor(): 

    return bus.read_byte(0x48) 

def runSoundSensor(): 

    bus.write_byte(0x48,0x00) 
    last_reading = -1 
    sound = readSoundSensor() 
    timestamp= datetime.datetime.utcnow() 
    record = str(timestamp) + ":" +str(sound) 
    print "Sound: "+record 

def readLightSensor(): 

    return bus.read_byte(0x48) 

def runLightSensor(): 

    bus.write_byte(0x48,0x01) 
    last_reading = -1 
    light = readLightSensor() 
    timestamp= datetime.datetime.utcnow() 
    record = str(timestamp) + ":" +str(light) 
    print "Light: "+record 

while(Ture): 

    runSoundSensor() 

    time.sleep(1) 

    runLightSensor() 

    time.sleep(1) 

Мой Pi имеет некоторые данные, но данные я не то, что я хочу, и не так, когда я подключить только один звук/датчик освещенности.

Я совершенно новый в малине Pi, и я ничего не знаю о адресе 0x48 и т. Д., Я просто узнал от какого-нибудь гида. Может ли кто-нибудь помочь мне, где я был неправ?

+0

Что не работает? – bish

ответ

2

Ваш while(Ture):, очевидно, является неправильным.

Вы пишете ту же команду - 0x48 0x00 для A/D для обоих датчиков - это не может быть правильным, если только они не пробуют все входы на каждом считывании?

У вас есть правильный адрес SMBUS - 0x48?
Что это за команда 0x00?

Чтобы уточнить, команды SMBUS будут состоять из address in hex, command byte(s) in hex. Возможно, вы захотите прочитать адресацию SMBUS/I2C: This статья неплохая.

Я бы предположил, что, по крайней мере, вам нужно отправить команду, чтобы выбрать один из входов Ain, а затем другой, чтобы пробовать его. 0x00 больше похоже на сброс.

Вы прочитали документацию для A/D?

+0

Спасибо за повторное воспроизведение! Я не знаю, в чем смысл 0x48,0x00, я думаю, 0x48 является адресом контактов SDA/SCL в Raspberry Pi? и 0x00 является Ain0 для A/D? Что делать, если я меняю второй 0x00 на 0x01? может это помочь? Я прочитаю документацию haha, спасибо за ваш совет. –

+0

'0x48' - это адрес подчиненного устройства, с которого вы пишете/читаете. Это свойство подчиненного устройства, в вашем случае, A/D. '0x00' - это командный байт, на который вы пишете, или регистр, который вы читаете. – SiHa