使用联合通过SPI从arduino向另一个arduino发送花车

约瑟夫·罗伯茨

我试图使用联合通过SPI从一个arduino向另一个发送花车。我知道接线正确,因为我可以发送整数。该代码对我来说看起来是正确的,因此我必须丢失一些东西。当我运行代码时,串行监视器仅打印出0.0000。

这是我的主码

#include <SPI.h>
#include "pins_arduino.h"

void setup ()
{
  Serial.begin (115200);

  digitalWrite(SS, HIGH);  // ensure SS stays high for now

  // Put SCK, MOSI, SS pins into output mode
  // also put SCK, MOSI into LOW state, and SS into HIGH state.
  // Then put SPI hardware into Master mode and turn SPI on
  SPI.begin ();

  // Slow down the master a bit
  SPI.setClockDivider(SPI_CLOCK_DIV8);
}

byte transferAndWait (const byte what)
{
  byte a = SPI.transfer (what);
  delayMicroseconds (10);
  return a;
} 

union first_union
{
  float f;
  byte b[4];
}data;

float yaw, pitch, roll, alt, temp;   

void loop (void)
{
  digitalWrite(SS, LOW);

  //YAW
  transferAndWait ('Y');
  data.b[0] = transferAndWait ('1');
  data.b[1] = transferAndWait ('2');
  data.b[2] = transferAndWait ('3');
  data.b[3] = transferAndWait ('Z');
  yaw = data.f;

  //PITCH
  transferAndWait ('P');  
  data.b[0] = transferAndWait ('1');
  data.b[1] = transferAndWait ('2');
  data.b[2] = transferAndWait ('3');
  data.b[3] = transferAndWait ('Z');
  pitch = data.f;

  //ROLL
  transferAndWait ('R');  
  data.b[0] = transferAndWait ('1');
  data.b[1] = transferAndWait ('2');
  data.b[2] = transferAndWait ('3');
  data.b[3] = transferAndWait ('Z');
  roll = data.f;

  //TEMP
  transferAndWait ('T');  
  data.b[0] = transferAndWait ('1');
  data.b[1] = transferAndWait ('2');
  data.b[2] = transferAndWait ('3');
  data.b[3] = transferAndWait ('Z');
  temp = data.f;

  //ALT
  transferAndWait ('A');  
  data.b[0] = transferAndWait ('1');
  data.b[1] = transferAndWait ('2');
  data.b[2] = transferAndWait ('3');
  data.b[3] = transferAndWait ('Z');
  alt = data.f;

  digitalWrite(SS, HIGH);

  Serial.print("yaw:");
  Serial.println(yaw, 4);
  Serial.print("pitch: ");
  Serial.println(pitch,4);
  Serial.print("roll:");
  Serial.println(roll,4);
  Serial.print("alt: ");
  Serial.println(alt,4);
  Serial.print("temp: ");
  Serial.println(temp,4);

  delay(100);
}

和我的奴隶代码

#include <EEPROM.h>
#include <FreeIMU.h>
#include <Wire.h>
#include <SPI.h>
#include <HMC58X3.h>
#include <MS561101BA.h>
#include <I2Cdev.h>
#include <MPU60X0.h>
#include "pins_arduino.h"

//Set the default object
FreeIMU my3IMU = FreeIMU();
float ypr[3];
float alt = 0;
float temp = 0;

void setup()
{
  //Setup IMU
  Wire.begin();
  delay(500);
  my3IMU.init(true);
  delay(500);

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

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

  // turn on interrupts
  SPCR |= _BV(SPIE);
}

union first_union
{
    float f;
    byte b[4];
}data;

ISR (SPI_STC_vect)
{
  byte command = SPDR;

  switch (command)
  {
  case 'Z':
    data.f = 0;
    SPDR = 0;
  case 'Y':
    data.f = ypr[0];
    SPDR = data.b[0]; 
    break;
  case 'P':
    data.f = ypr[2];
    SPDR = data.b[0]; 
    break;
  case 'R':
    data.f = ypr[1];
    SPDR = data.b[0]; 
    break;
  case 'A':
    data.f = alt;
    SPDR = data.b[0]; 
    break;
  case 'T':
    data.f = temp;
    SPDR = data.b[0]; 
    break;
  case 1:
    SPDR = data.b[1];
    break;
  case 2:
    SPDR = data.b[2];
    break;
  case 3:
    SPDR = data.b[3];
    break;
  }
}

void loop() 
{
  //my3IMU.getYawPitchRoll(ypr);
  //alt = my3IMU.getBaroAlt();
  //temp = my3IMU.getBaroTemp();

  ypr[0] = 1.1111;
  ypr[1] = 2.2222;
  ypr[2] = 3.3333;

  alt = 4.4444;
  temp = 5.5555;
}

有任何想法吗?

谢谢

名称

您发送'1''2''3'(即ASCII字符),但开关验看123(即数字)。

另外,您break在的处理程序中缺少'Z'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在另一个类中使用SoftwareSerial类的Arduino / C ++

来自分类Dev

在端口忙于另一个 Java 程序时使用 arduino 串行监视器?

来自分类Dev

如何通过EXECL从一个进程向另一个进程发送连续数据流

来自分类Dev

如何使用 Guzzle 向 Laravel 中的另一个控制器发送请求

来自分类Dev

使用Parse从一个用户向另一个用户发送推送通知?

来自分类Dev

从一个jsp向另一个jsp发送变量

来自分类Dev

如何从一个模块向另一个模块发送消息?

来自分类Dev

从一个端口向另一个端口发送消息

来自分类Dev

从一个终端用户向另一个用户发送消息

来自分类Dev

在C ++ / Arduino中为2D矩阵分配另一个变量

来自分类Dev

Arduino 中断函数可以调用另一个函数吗?

来自分类Dev

通过串行向 Arduino 发送 Numpy 数组?

来自分类Dev

如何使用Arduino将数字从一个数字范围转换为另一个数字范围

来自分类Dev

如何通过SignalR从一个客户端向另一个客户端发送javascript对象

来自分类Dev

无法使用pthread_cond_signal向C中的另一个进程发送信号

来自分类Dev

如何使用Tcpclient从另一个类向所有连接的套接字连接发送数据

来自分类Dev

如何使用PHP在另一个页面上向对象标签发送和打开可变网址?

来自分类Dev

字典联合并总结另一个领域

来自分类Dev

快速使用委托从一个视图控制器向另一个视图控制器发送字符串

来自分类Dev

如何通过意图发送从另一个活动发送的数据?

来自分类Dev

如何向现有进程发送另一个命令?

来自分类Dev

向Java中的另一个线程发送关闭信号

来自分类Dev

Python flask服务器,如何向另一个请求的线程发送消息?

来自分类Dev

如何从另一个shell向bash脚本发送信号

来自分类Dev

从另一个脚本向Ratchet WebSocket服务器发送消息

来自分类Dev

Python flask服务器,如何向另一个请求的线程发送消息?

来自分类Dev

如何从另一个线程向GUI发送标签-PyQt

来自分类Dev

通过使用另一个表更新表

来自分类Dev

如何在联合查询中的另一个选择中使用选择的结果?

Related 相关文章

  1. 1

    在另一个类中使用SoftwareSerial类的Arduino / C ++

  2. 2

    在端口忙于另一个 Java 程序时使用 arduino 串行监视器?

  3. 3

    如何通过EXECL从一个进程向另一个进程发送连续数据流

  4. 4

    如何使用 Guzzle 向 Laravel 中的另一个控制器发送请求

  5. 5

    使用Parse从一个用户向另一个用户发送推送通知?

  6. 6

    从一个jsp向另一个jsp发送变量

  7. 7

    如何从一个模块向另一个模块发送消息?

  8. 8

    从一个端口向另一个端口发送消息

  9. 9

    从一个终端用户向另一个用户发送消息

  10. 10

    在C ++ / Arduino中为2D矩阵分配另一个变量

  11. 11

    Arduino 中断函数可以调用另一个函数吗?

  12. 12

    通过串行向 Arduino 发送 Numpy 数组?

  13. 13

    如何使用Arduino将数字从一个数字范围转换为另一个数字范围

  14. 14

    如何通过SignalR从一个客户端向另一个客户端发送javascript对象

  15. 15

    无法使用pthread_cond_signal向C中的另一个进程发送信号

  16. 16

    如何使用Tcpclient从另一个类向所有连接的套接字连接发送数据

  17. 17

    如何使用PHP在另一个页面上向对象标签发送和打开可变网址?

  18. 18

    字典联合并总结另一个领域

  19. 19

    快速使用委托从一个视图控制器向另一个视图控制器发送字符串

  20. 20

    如何通过意图发送从另一个活动发送的数据?

  21. 21

    如何向现有进程发送另一个命令?

  22. 22

    向Java中的另一个线程发送关闭信号

  23. 23

    Python flask服务器,如何向另一个请求的线程发送消息?

  24. 24

    如何从另一个shell向bash脚本发送信号

  25. 25

    从另一个脚本向Ratchet WebSocket服务器发送消息

  26. 26

    Python flask服务器,如何向另一个请求的线程发送消息?

  27. 27

    如何从另一个线程向GUI发送标签-PyQt

  28. 28

    通过使用另一个表更新表

  29. 29

    如何在联合查询中的另一个选择中使用选择的结果?

热门标签

归档