Arduino 压缩一个大的“}”else if{quot;语句正在处理中

Arduino 压缩一个大的“}”else if{quot;语句正在处理中,arduino,processing,Arduino,Processing,我正在尝试做一个项目,在这个项目中,不同的图像将根据与超声波测距传感器的距离显示。我同时使用了处理和Arduino,总共有37个图像。虽然现在我只有一个“else if”的质量声明控制了图像显示的距离,但坦率地说,它看起来很难看。有没有办法清理它 这就是它看起来的样子 if( val == 42) { img = loadImage("a_frame1_0.jpg"); image(img, 0, 0); } else if (val == 41) {

我正在尝试做一个项目,在这个项目中,不同的图像将根据与超声波测距传感器的距离显示。我同时使用了处理和Arduino,总共有37个图像。虽然现在我只有一个“else if”的质量声明控制了图像显示的距离,但坦率地说,它看起来很难看。有没有办法清理它

这就是它看起来的样子

 if( val == 42) {
      img = loadImage("a_frame1_0.jpg");
      image(img, 0, 0);
    } else if (val == 41) { 
      img = loadImage("a_frame1_1.jpg");
      image(img, 0, 0);
    } else if (val == 40) { 
      img = loadImage("a_frame1_2.jpg");
      image(img, 0, 0);
    } else if (val == 39) { 
      img = loadImage("a_frame1_3.jpg");
      image(img, 0, 0);
    } else if (val == 38) { 
      img = loadImage("a_frame1_4.jpg");
      image(img, 0, 0);
    } else if (val == 37) { 
      img = loadImage("a_frame1_5.jpg");
      image(img, 0, 0);
    } else if (val == 36) { 
      img = loadImage("a_frame1_6.jpg");
      image(img, 0, 0);
    } else if (val == 35) { 
      img = loadImage("a_frame1_7.jpg");
      image(img, 0, 0);
...

如果我需要在这里输入更多的代码,我也可以这样做。

尝试使用use a Switch语句

是否使用for循环

int min = 0;
int max = 42;

for (int i = max; i >= min; i--){

  if(val != i){
    continue;
  }

  img = loadImage("a_frame1_" + (max - i) + ".jpg");
  image(img, 0, 0);
  break;    
}

我想这条大语句放在您的
draw()
函数中。每次绘制场景时加载图像非常耗时,在
arduino
这样的平台上可能会出现问题,因此我建议您在
设置()中加载所有图像
函数,按照@ikegami的建议将它们存储在数组中,并使用一些循环来存储这些图像(我建议您重命名有问题的名字,以便使用简单的字符串连接)

只是你需要小心索引,这样它们就会在[0,36]范围内

编辑

正如@cup在评论中提到的,这在标准的Arduino工具集上不起作用,因此您需要将expresion更改为类似以下内容:

loadImage(String("a_frame1_") + i + ".jpg")

把文件名放在一个数组中。然后你会得到
path=images[val];img=loadImage(path);image(img,0,0);
@ikegami的想法(+1)是我最初想到的,但是如果你有一个你知道不会有例外的一般趋势,你真的可以这样做:
img=loadImage(“a_frame1+(42-val)+.jpg”);
如果文件名是可预测的,那么方法肯定是生成Jeremy显示的文件名。唯一会出现例外的是我的第一张图像,它的内容是“在44英寸以外的地方,显示这张图像”我不确定@Jeremy所建议的想法是否会有问题。@ChristineAustin Nah,一个快速的条件会让你克服它。使用数组解决方案需要相同的条件,所以通过减法生成它可能是你最好的选择(这样你就不必在程序内存中添加数组)非常C#ish语法。这不会按现状编译。建议将表达式更改为字符串(“a#frame1#”)+i+。.jpg“是的,可能是C#ish语法,但它编译和工作起来足够公平-我不知道该工具-我只是使用bog标准Arduino工具集。但Arduino标准工具集的优点很好。我将添加它来回答这个问题。
image(images[42-val], 0, 0);
loadImage(String("a_frame1_") + i + ".jpg")