开关控制ADXL357 软硬件设计

之前完成了三个模块的软硬件的介绍,接下来,制作PCB板,对三个模块进行连接设计。
首先结合之前的各部分原理图组合成一份原理图

再进行绘制简单的PCB板

通过PCB制板厂,发送PCB订单,最后再进行焊接,完成PCB板的部分

对此,我们进行一个比较简单的软件设计。使用arduino继续进行开发。
首先根据原理图对引脚进行进行常量的定义。

// ========== 按键引脚定义 ==========
#define PIN_KEY_ON   2
#define PIN_KEY_OFF  3

两个开关分别为2和3。本次项目简单的使用开关控制串口的输出,如果2按下,就打开串口的输出,会输出ADXL357的信息。如果3按下,就会关闭串口的输出。

  // 配置按键引脚,使用内部上拉
  pinMode(PIN_KEY_ON, INPUT_PULLUP);
  pinMode(PIN_KEY_OFF, INPUT_PULLUP);

按钮的原理图设计都是默认进行上拉,当按下的时候会是低电平。

  // ========== 按键检测 ==========
  if (digitalRead(PIN_KEY_ON) == LOW) {
    print_enabled = true;
    Serial.println("打印开启");
    delay(200); // 简易去抖
  }
  if (digitalRead(PIN_KEY_OFF) == LOW) {
    print_enabled = false;
    Serial.println("打印关闭");
    delay(200); // 简易去抖
  }

后面通过判断变量就可以进行决定数据的接收

  // ========== 若开启打印,则输出数据 ==========
  if (print_enabled) {
    int axisAddresses[] = {TEMP2, TEMP1, XDATA3, XDATA2, XDATA1, YDATA3, YDATA2, YDATA1, ZDATA3, ZDATA2, ZDATA1};
    int axisMeasures[11] = {0};

    readMultipleData(axisAddresses, 11, axisMeasures);

    unsigned int tdata = (axisMeasures[0] << 8) + axisMeasures[1];
    unsigned long xdata = (axisMeasures[4] >> 4) + (axisMeasures[3] << 4) + (axisMeasures[2] << 12);
    unsigned long ydata = (axisMeasures[7] >> 4) + (axisMeasures[6] << 4) + (axisMeasures[5] << 12);
    unsigned long zdata = (axisMeasures[10] >> 4) + (axisMeasures[9] << 4) + (axisMeasures[8] << 12);

    if (xdata >= 0x80000) xdata = ~xdata + 1;
    if (ydata >= 0x80000) ydata = ~ydata + 1;
    if (zdata >= 0x80000) zdata = ~zdata + 1;

    Serial.print("X = "); Serial.print((int32_t)xdata); Serial.print("\t");
    Serial.print("Y = "); Serial.print((int32_t)ydata); Serial.print("\t");
    Serial.print("Z = "); Serial.print((int32_t)zdata); Serial.print("\t");
    Serial.print("Temp = "); Serial.println(tdata);
  }

最后,这个简单的按钮与加速度计的配合就完成了。后面通过磁铁放在开关的上面就可以直接开关。