m0_69199723 2022-12-27 12:41 采纳率: 100%
浏览 31
已结题

怎么用Arduino读取多组数据

怎么用Arduino读取多组数据,取最大值?

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11);//10连接模块TX,11连接模块RX
unsigned char order[4] = {0xAA, 0x06, 0x00, 0xB0};


void setup() {
  mySerial.begin(9600);
  Serial.begin(9600);
  volume(0x0F);//音量设置0x00-0x1E,下面是1-30级音量对应的参数
  //--1-----2-----3-----4-----5-----6-----7-----8-----9----10----11----12----13----14----15--
  //0x01--0x02--0x03--0x04--0x05--0x06--0x07--0x08--0x09--0x0A--0x0B--0x0C--0x0D--0x0E--0x0F-
  //-16----17----18----19----20----21----22----23----24----25----26----27----28----29----30--
  //0x10--0x11--0x12--0x13--0x14--0x15--0x16--0x17--0x18--0x19--0x1A--0x1B--0x1C--0x1D--0x1E-
}

void loop() {
  
   int power = Serial.read();
  

  if (power > 10){
     play(0x01);
  delay(3000);
  }
 else {
  play(0x02);
  delay(3000);}
}

void play(unsigned char Track) {  //序列播放,顺序由文件拷贝进内存的顺序而定,和文件名无关
  unsigned char play[6] = {0xAA, 0x07, 0x02, 0x00, Track, Track + 0xB3}; //0xB3=0xAA+0x07+0x02+0x00,即最后一位为校验和
  mySerial.write(play, 6);
}

void volume(unsigned char vol) {
  unsigned char volume[5] = {0xAA, 0x13, 0x01, vol, vol + 0xBE}; //0xBE=0xAA+0x13+0x01,即最后一位为校验和
  mySerial.write(volume, 5);
}


  • 写回答

1条回答 默认 最新

  • |__WhoAmI__| 2022-12-27 13:14
    关注

    可以使用以下方法:

    1、在循环中读取数据,并将每个数据值与当前最大值进行比较。如果当前值大于最大值,则将当前值设为最大值。

    int maxValue = 0;
    while (true) {
      int value = Serial.read();
      if (value > maxValue) {
        maxValue = value;
      }
    }
    

    2、使用C++的STL库中的函数,比如std::max。

    #include <algorithm>
    
    int maxValue = 0;
    while (true) {
      int value = Serial.read();
      maxValue = std::max(maxValue, value);
    }
    

    3、还可以使用类似于栈的数据结构,比如队列或双端队列,将数据存储起来,然后使用std::sort函数对数据进行排序,最后取最大值。

    #include <algorithm>
    #include <deque>
    
    std::deque<int> values;
    while (true) {
      int value = Serial.read();
      values.push_back(value);
      if (values.size() > 10) {
        values.pop_front();
      }
    }
    std::sort(values.begin(), values.end());
    int maxValue = values.back();
    

    望采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月14日
  • 已采纳回答 1月6日
  • 创建了问题 12月27日

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记