怎么用Arduino读取多组数据

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

#include 

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、在循环中读取数据,并将每个数据值与当前最大值进行比较。如果当前值大于最大值,则将当前值设为最大值。

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();

望采纳。