Raspberry pi Raspberry pi和Atmega 328之间的硬件中断

Raspberry pi Raspberry pi和Atmega 328之间的硬件中断,raspberry-pi,atmega,Raspberry Pi,Atmega,我已经将我的RPI和atmega328连接在一起,以便控制arduino上活动的开始。为此,GPIO 25(RPI)直接连接到引脚7(Arduino PD7)。我在RPI开关上有一个python脚本,将GPIO 25设置为高,然后再设置为低: import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(25, GPIO.OUT) GPIO.output(25, 1) #Do some stuff

我已经将我的RPI和atmega328连接在一起,以便控制arduino上活动的开始。为此,GPIO 25(RPI)直接连接到引脚7(Arduino PD7)。我在RPI开关上有一个python脚本,将GPIO 25设置为高,然后再设置为低:

    import RPi.GPIO as GPIO 

    GPIO.setmode(GPIO.BCM)
    GPIO.setup(25, GPIO.OUT)

    GPIO.output(25, 1)
    #Do some stuff
    GPIO.output(25, 0)
arduino正在循环中等待按下物理按钮或RPI将pin7设置为高:

const int interrupt = 7;
const int button = 13;
const int led = 9;

void setup() {
  Serial.begin(9600);
  pinMode(interrupt, INPUT);
  pinMode(button,INPUT);
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
}

void loop() {
  bool on = false;
  bool buttonOn = false;

  while (!on || !buttonOn) {
    on = digitalRead(interrupt);
    buttonOn = digitalRead(button);
    digitalWrite(led, LOW);
  }
  digitalWrite(led, HIGH);
  delay(1000);
}
不幸的是,这不起作用。我已经检查了atmega328()的逻辑电平,似乎3.3V对于高信号已经足够好了

我是否缺少上拉/下拉阻力?我知道atmega上的PD7规定如下:

端口D是一个具有内部上拉功能的8位双向I/O端口 电阻器(为每个位选择)。端口D输出缓冲区具有 对称驱动特性,同时具有高接收器和源 能力。作为输入,外部拉低的端口D引脚将 上拉电阻器激活时的电源电流。端口D引脚 当重置条件变为激活状态时,即使时钟 他没有跑步

编辑: 我已经做了更多的测试,我得到了正确的高或低值。问题似乎来自:

while((!on)|(!buttonOn)){


while循环中的Arduino和OR运算符是否存在问题?即使一个条件为真,另一个条件为假,它也不会退出循环。

3.3 v输出应可以将Arduino输入调高

你可能有接线问题,或者你的树莓pi速度太快,以至于arduino错过了脉冲

更改raspberry pi上的程序,使输出保持高电平长时间(例如10)秒,以便可以用万用表测量,以确定设置的引脚是否正确

Arduino现在看到输入了吗

while ((!on) || (!buttonOn)) {
}
只要其中一个变量为false,该循环就会运行。
昨天,我出于某种原因认为,在读取代码时,您正在读取两次中断引脚。

1.我从来不会直接将3.3v系统与5v系统一起使用。始终使用电平移位器或某种缓冲器。2.buttonOn=digitalRead(中断);->buttonOn=digitalRead(按钮);3.你用万用表检查过输入引脚上的电压吗?我假设从3.3V到5V是安全的,我总是使用5V到3.3V的电平转换器。是的,我用万用表检查过,ATmega的输入引脚上的电压约为3.3V。我应该对其进行精确,但“做些什么”部分持续超过20秒。使用万用表,我在RPI引脚上有3.29V电压,在ATmega的引脚7上也有3.29V电压。嗯。可能是因为您将电线连接到arduino上的引脚错误吗?arduino是否看到引脚始终处于低位或高位?这肯定是正确的引脚,我已经检查了多次。arduino从未从e循环“while(!on | |!buttonOn)”因此,即使引脚7上的电压已验证为3.29V,它仍保持在较低水平……2个建议:1)从回路中移除引脚7的双读数,只是为了好玩,看看它是否有作用。2)如果没有作用,则使用微调电位计,其值约为1K到10Ohm。断开rpi与arduino的连接。将微调电位计的一端连接到回路arduino+5v,另一端接地。将微调电位器的中间连接到引脚7和万用表。现在将引脚7中的电压调整到0.5…4.5v之间,然后查看代码是否触发。如果没有,则代码或atmega有问题。不要将微调电位器调整到两端的10%以下,以避免损坏。感谢您的回答,我已经完成了今天早上进行了一些测试,它似乎达到了预期的高电平和低电平。问题似乎来自while循环和OR运算符。谢谢,我应该使用&&运算符。它现在可以工作了。