Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.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
Python 如何在DB410C上打招呼,DB410C的芯片选择引脚很高。这是在arduino mega上扮演s大师的角色_Python_C_Arduino_Raspberry Pi_Spi - Fatal编程技术网

Python 如何在DB410C上打招呼,DB410C的芯片选择引脚很高。这是在arduino mega上扮演s大师的角色

Python 如何在DB410C上打招呼,DB410C的芯片选择引脚很高。这是在arduino mega上扮演s大师的角色,python,c,arduino,raspberry-pi,spi,Python,C,Arduino,Raspberry Pi,Spi,我在raspberry端使用spidev,这里是我的示例代码,用于将10和11发送到arduino,但现在我想在raspberry bi上接收hello import time import spidev spi = spidev.SpiDev() spi.open(0,0) spi.max_speed_hz=100000 while True: resp = spi.xfer([0x31,0X31,0x0A]) print resp time.sleep(1) re

我在raspberry端使用spidev,这里是我的示例代码,用于将10和11发送到arduino,但现在我想在raspberry bi上接收hello

import time
import spidev

spi = spidev.SpiDev()
spi.open(0,0)
spi.max_speed_hz=100000

while True:
   resp = spi.xfer([0x31,0X31,0x0A])
   print resp
   time.sleep(1)
   resp1 = spi.xfer([0x31,0x30,0x0A])
   print resp1
   time.sleep(1)
代码在上面。。。。发送10和11到arduino,下面给出的代码是要编写的 7,8位乘客 注意:我想收到arduino对raspberry pi的问候

#include <SPI.h>
#include <stdlib.h>

char buf [100];
volatile byte pos;
volatile boolean process_it;

void setup (void)
{
//Start the Serial for the debugging
 Serial.begin (115200);   

 // have to send on master in, *slave out*
 pinMode(MISO, OUTPUT);
 pinMode(53,INPUT);

 //Setting up the LED pin as OUTPUT
 pinMode(7,OUTPUT);
 pinMode(6,OUTPUT);

 // turn on SPI in slave mode
 SPCR |= _BV(SPE);

 // get ready for an interrupt 
 pos = 0;   // buffer empty
 process_it = false;

 // now turn on interrupts
SPI.attachInterrupt();

}  // end of setup


// SPI interrupt routine
ISR (SPI_STC_vect)
{
byte c = SPDR;
// grab byte from SPI Data Register
if(digitalRead(53)==0){
// add to buffer if room
if (pos < sizeof buf)
{
 buf [pos++] = c;

  // example: newline means time to process buffer
 if (c == '\n')
  process_it = true;

  }  // end of room available

  }
  }  // end of interrupt routine SPI_STC_vect

  // main loop - wait for flag set in interrupt routine
  void loop (void)
  {
 if (process_it)

 {

 buf [pos] = 0;
 int buff = atoi(buf);  
 Serial.println (buff);
 switch(buff){
  case 10:

    digitalWrite(6,HIGH);
    digitalWrite(7,LOW);
    break;
   case 11:
    digitalWrite(6,LOW);
    digitalWrite(7,HIGH);
    break;
   }
  pos = 0;
  process_it = false;

}  // end of flag set

  }  

提前感谢

在SPI连接中,主设备必须发送一些数据才能从从设备接收数据。它就像一个循环缓冲区

为了完成您想要的任务,主机必须再发送5个字节以从从机获取“h”、“e”、“l”、“l”、“o”

这是素描的例子

#include <SPI.h>
#include <stdlib.h>

char in_buf[100];
char out_buf[20] = "hello";
volatile int in_pos;
volatile int out_pos;
volatile boolean is_sending;
volatile boolean process_it;

void setup (void)
{
  //Start the Serial for the debugging
  Serial.begin (115200);

  // have to send on master in, *slave out*
  pinMode(MISO, OUTPUT);
  pinMode(SS,INPUT);

  //Setting up the LED pin as OUTPUT
  pinMode(7,OUTPUT);
  pinMode(6,OUTPUT);

  // turn on SPI in slave mode
  SPCR |= _BV(SPE);

  // get ready for an interrupt
  in_pos = 0;   // in_buf empty
  out_pos = 0;   // out_buf empty
  is_sending = false;

  // now turn on interrupts
  SPI.attachInterrupt();

}  // end of setup


// SPI interrupt routine
ISR (SPI_STC_vect)
{
  byte c = SPDR; // grab byte from SPI Data Register

  if(is_sending == false){
    // add to in_buf if room
    if (in_pos < sizeof(in_buf))
    {
      in_buf[in_pos++] = c;

      // example: newline means time to process buffer and to send out_buf
      if (c == '\n')
      {
        is_sending = true;
        process_it = true;
        SPDR = out_buf[out_pos++]; // send first byte
      }
    }  // end of room available
  }
  else
  {
    SPDR = out_buf[out_pos];
    if(out_buf[out_pos] == 0 || ++out_pos >= sizeof(out_buf))
    {
      is_sending = false;
      out_pos = 0;
    }
  }
}  // end of interrupt routine SPI_STC_vect

// main loop - wait for flag set in interrupt routine
void loop (void)
{
  if(process_it)
  {
    in_buf[in_pos] = 0;
    int buff = atoi(in_buf);
    Serial.println(buff);
    switch(buff){
      case 10:
        digitalWrite(6,HIGH);
        digitalWrite(7,LOW);
        break;
      case 11:
        digitalWrite(6,LOW);
        digitalWrite(7,HIGH);
        break;
    }
    in_pos = 0;
    process_it = false;
  }  // end of flag set
}
我认为下面这个网站对你也很有用。

我的主设备的cs引脚未连接到从设备cs…实际上,我的主设备的cs引脚一直处于高位,这就是为什么我将我的从设备cs连接到地面,并使用了您的代码,但我没有收到任何信息。当然,如果CSs的主设备和从设备未连接,它将不起作用。ISR中断功能通过改变CS值触发。您能否成功运行您提供的代码?如果CS未连接,您应该无法与SPI通信。我认为您必须在实现hello代码之前纠正master的CS pin的行为。我建议您在问题中添加一些详细信息:您如何安装spidev,如何使其工作,如何连接设备,以及您为解决此问题所做的工作。ss用于选择从属设备我使用的是一个从属设备,因此我将从属设备的ss引脚与接地连接。。。这是我关于如何在DB410cHmm上安装spidev库的教程。。。你能把整个系统的示意图附在这篇文章后面吗?我认为这是充分了解您的情况的最佳方式。最后,我找到了一个解决方案导入时间导入spidev导入sys spi=spidev.spidev spi.open0,0 spi.max_speed_hz=100000,而True:buf=[]用于范围0100:time.sleep.15 buff=spi.xfer2[pos]如果buff=[33]:break-else:buf.append buff打印buf a=reducelambda x,y:x+y,未打印。在[1:]时间内加入[chr_uuufor]
import time
import spidev

spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 100000

while True:
  resp = spi.xfer([0x31, 0X31, 0x0A, 0x01, 0x01, 0x01, 0x01, 0x01])
  print(''.join([chr(_) for _ in resp[-5:]]))
  time.sleep(1)
  resp1 = spi.xfer([0x31, 0x30, 0x0A, 0x01, 0x01, 0x01, 0x01, 0x01])
  print(''.join([chr(_) for _ in resp1[-5:]]))
  time.sleep(1)