Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Things I2C从arduino 3v3读取_Arduino_I2c_Android Things - Fatal编程技术网

Android Things I2C从arduino 3v3读取

Android Things I2C从arduino 3v3读取,arduino,i2c,android-things,Arduino,I2c,Android Things,从Arduino-slave到RPi-master,我尝试着用Android的东西进行交流、读写 如果我使用电平转换器,从RPi到Arduino 5v 16Mhz,一切正常 所以我决定取消电平转换器,使用3v3 Arduino mini pro 8Mhz 写入工作正常,但当我尝试从Arduino读取时,信号停止 在设置到9、0地址并读取到9后,信号仍然很低并接收到数据。没问题 设置到9、0地址并读取到9后,信号变高,数据停止 我对从机使用了相同的示例: #include <Wire.h

从Arduino-slave到RPi-master,我尝试着用Android的东西进行交流、读写

如果我使用电平转换器,从RPi到Arduino 5v 16Mhz,一切正常

所以我决定取消电平转换器,使用3v3 Arduino mini pro 8Mhz

写入工作正常,但当我尝试从Arduino读取时,信号停止

在设置到9、0地址并读取到9后,信号仍然很低并接收到数据。没问题

设置到9、0地址并读取到9后,信号变高,数据停止

我对从机使用了相同的示例:

#include <Wire.h>

byte RFID[20] = {9,8,7,6,5,4,3,2,1,1,2,3,4,5,6,7,8,9,1,2};


void setup() {
  Wire.begin(8);          // join i2c bus with address #8
  Wire.onRequest(requestEvent); // register event
  Wire.onReceive(receiveEvent); // register event
  Serial.begin(115200);     // start serial for output
  pinMode(13, OUTPUT);
}

void loop() {
  delay(100);
}

// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent() {
  Serial.println("Master ask");
  digitalWrite(13, HIGH);
  delay(250);
  Wire.write(RFID, 20);
  digitalWrite(13, LOW);
}

// function should be executes whenever data is received from master
// this function is registered as an event, but it's called every time the RPi
// call the Device.
void receiveEvent(int howMany) {
  while (0 < Wire.available()) {
    byte RTC_syn = Wire.read(); // receive byte
    Serial.println(RTC_syn);
  }
}
我真的不知道怎么把信号调高。。。
有人能帮我吗?

如果液位转换器工作,你应该坚持使用它

像I2C这样的通信协议将数据编码成一系列逻辑高电平和逻辑低电平信号。高/低是什么意思?这取决于设备。对于大多数嵌入式设备,逻辑低电平将接地,0V

对于Arduinos和Raspberry Pis,电源电压分别为3.3V和5V。这种差异可能导致几个潜在问题

5V信号过高,Arduino无法处理,导致Arduino停止工作或重新启动

3.3V信号不够强,无法解释为逻辑高。嵌入式设备具有将信号舍入高/低的电路,阈值可能不完全均匀。5V输入只能接受4.5V或更高的电压,将其他一切解释为低或处于不确定状态

如果我使用电平转换器,从RPi到Arduino 5v 16Mhz,一切正常

所以我决定取消电平转换器,使用3v3 Arduino mini pro 8Mhz

写入工作正常,但当我尝试从Arduino读取时,信号停止

这是因为您在5V/3.3V版本中使用的电平转换器的作用不仅仅是改变电压。它还充当两个设备之间良好的高阻抗缓冲器,有助于保持信号驱动并避免负载效应

如果没有缓冲区,您的总线可能会遇到一些负载。您可以尝试通过添加更强的上拉电阻器来解决此问题。RPi3在I2C线路上有1.8k的上拉电阻器,通常可以工作,但根据从设备的输入阻抗,上拉电阻器可以是边缘电阻。Arduino Mini有安装I2C上拉的焊盘,但默认情况下没有

纯3.3V I2C总线的建议上拉电阻接近1k,因此您可能只需要在SCL/SDA和+3.3V之间添加一些更强的上拉电阻。您添加的任何内容都将与RPi3电阻器平行,因此将其纳入您的计算中。例如,添加4.7k电阻器可将有效电阻降低至约1.3k


如果你无法用上拉解决这个问题,你可以通过使用线路驱动器IC实现同样的缓冲效果,而无需电平转换。

他说他将5V Arduino换成了3.3V Arduino。对。但是arduino mini pro可用于3.3v,rpi也可用于gpio 3v3。