Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 如何删除浮动或减少代码函数的实际文件大小?(阿杜伊诺)_Arduino_Floating Point_Filesize - Fatal编程技术网

Arduino 如何删除浮动或减少代码函数的实际文件大小?(阿杜伊诺)

Arduino 如何删除浮动或减少代码函数的实际文件大小?(阿杜伊诺),arduino,floating-point,filesize,Arduino,Floating Point,Filesize,我正在尝试使用neopixels获取gemma的arduino代码,该代码的内存更小,因此我可以在程序中输入更多内容。 目前,我正在尝试删除浮动/减小以下代码段的大小: void gradient(Color c1, Color c2, float time) { for (float i = 0; i < time; i += 0.001) { Color result(0, 0, 0); result.Red = c1.Red * (1 - (i / time))

我正在尝试使用neopixels获取gemma的arduino代码,该代码的内存更小,因此我可以在程序中输入更多内容。
目前,我正在尝试删除浮动/减小以下代码段的大小:

void gradient(Color c1, Color c2, float time) {
  for (float i = 0; i < time; i += 0.001) {
    Color result(0, 0, 0);
    result.Red = c1.Red * (1 - (i / time)) + c2.Red * (i / time);
    result.Green = c1.Green * (1 - (i / time)) + c2.Green * (i / time);
    result.Blue = c1.Blue * (1 - (i / time)) + c2.Blue * (i / time);
    for (uint8_t x = 0; x < 20; x++)pixels.setPixelColor(x, result.Red, result.Green, result.Blue);
    pixels.show();
    delay(1);
  }
}
这将是在2秒内从红色渐变为绿色。

提前谢谢

-首先,您的颜色对象应该包含3个无符号字符(0-255)。没有理由在其中添加int。(arduino中的字节类型)

-其次,我不确定您是如何实现时间的,但通常在arduino中,您是以毫秒为单位工作的。此外,在没有看到其他实现的情况下,我猜测时间是一段时间,根据您的延迟,我将猜测您可以短时间发送时间(如有必要,可以将时间乘以x1000)(这将持续32秒,以毫秒为单位)

void渐变(颜色c1,颜色c2,短时){
短最大值=(短)(时间/10);
颜色结果(0,0,0);
对于(int i=0;i如果可以从所有代码中提取“delay()”,似乎可以避免包含100字节大小的库?idk tbh,但下面是我建议的修改,在我的测试中,它可以节省100字节的内存:

    void gradient(Color c1, Color c2, float time) {
  float stepsize = 0.01;    // Stepsize in seconds
  float lambda;
  int maxiter = (int) (time/ stepsize);
  Color result(0, 0, 0);
  for (int i = 0; i <= maxiter; i++) {
    lambda = (float) i / maxiter;
    result.Red = c1.Red * (1 - lambda) + c2.Red * (lambda);
    result.Green = c1.Green * (1 - lambda) + c2.Green * (lambda);
    result.Blue = c1.Blue * (1 - lambda) + c2.Blue * (lambda);
    for (uint8_t x = 0; x < 20; x++)pixels.setPixelColor(x, result.Red, result.Green, result.Blue);
    pixels.show();
    //delay(stepsize * 1000);  // delay in milliseconds

    long lastTime=millis();
    long delayTime = stepsize * 1000;
    while(millis()-lastTime<delayTime){}
  }
}
void渐变(颜色c1、颜色c2、浮动时间){
浮点步长=0.01;//步长(秒)
浮动λ;
int最大值=(int)(时间/步长);
颜色结果(0,0,0);

对于(int i=0;i),您似乎只使用了
stepsize
一次。尝试用0.01f替换它的一次使用(结尾的f表示浮点文字,而不是双精度)可能会节省一些字节。请发布完整的代码。在测试中,这些都没有起到任何作用:/
gradient(Color(255, 0, 0), Color(0, 255, 0), 2);
  void gradient(Color c1, Color c2, short time) {
  short maxiter = (short) (time/ 10);
  Color result(0, 0, 0);
  for (int i = 0; i <= maxiter; i++) {
    result.Red = (c1.Red * (maxiter-i) + c2.Red * i)/maxiter;
    result.Green = (c1.Green* (maxiter-i) + c2.Green* i)/maxiter;
    result.Blue = (c1.Blue* (maxiter-i) + c2.Blue* i)/maxiter;
    for (uint8_t x = 0; x < 20; x++)pixels.setPixelColor(x, result.Red, result.Green, result.Blue);
    pixels.show();
    delay(10);  // delay in milliseconds
  }
}
    void gradient(Color c1, Color c2, float time) {
  float stepsize = 0.01;    // Stepsize in seconds
  float lambda;
  int maxiter = (int) (time/ stepsize);
  Color result(0, 0, 0);
  for (int i = 0; i <= maxiter; i++) {
    lambda = (float) i / maxiter;
    result.Red = c1.Red * (1 - lambda) + c2.Red * (lambda);
    result.Green = c1.Green * (1 - lambda) + c2.Green * (lambda);
    result.Blue = c1.Blue * (1 - lambda) + c2.Blue * (lambda);
    for (uint8_t x = 0; x < 20; x++)pixels.setPixelColor(x, result.Red, result.Green, result.Blue);
    pixels.show();
    //delay(stepsize * 1000);  // delay in milliseconds

    long lastTime=millis();
    long delayTime = stepsize * 1000;
    while(millis()-lastTime<delayTime){}
  }
}