Arduino电机速度LED(LED条形图代码)

时间:2013-05-03 15:56:36

标签: c arduino

嘿,如果有什么事情,我就知道了。我可以阅读一个突击队来改进这段代码? 至少它现在正在工作,但需要做一些微调:)

正如您所看到的,代码非常混乱,阅读时也很麻烦。希望有人可以提供帮助。

提前谢谢。

int potPin = 0;
int motorPin = 11;
int potValue = 0;
int on = 0;


int L2 = 2;
int L3 = 3;
int L4 = 4;
int L5 = 5;
int L6 = 6;
int L7 = 7;
int L8 = 8;
int L9 = 9;
int L10 = 10;


int M2 = 40;
int M3 = 75;
int M4 = 100;
int M5 = 125;
int M6 = 150;
int M7 = 175;
int M8 = 200;
int M9 = 225;
int M10 = 250;

void setup()
{ 
 pinMode( motorPin,OUTPUT);
 pinMode( potPin, INPUT);


pinMode (L2, OUTPUT);
pinMode (L3, OUTPUT);
pinMode (L4, OUTPUT);
pinMode (L5, OUTPUT);
pinMode (L6, OUTPUT);
pinMode (L7, OUTPUT);
pinMode (L8, OUTPUT);
pinMode (L9, OUTPUT);
pinMode (L10, OUTPUT);

 Serial.begin(9600);
}

void loop()
{
  Monitor();
  Motorspeed();
  LedBar();
};

void Monitor()
{
  int val = Serial.read() - '0';

  if (val == 1)
{
  Serial.println("Motor is ON");
  on = 1;
  digitalWrite(motorPin, HIGH);
}

  else if (val == 0)
{
    Serial.println("Motor is OFF");
    on = 0;
    digitalWrite(motorPin, LOW);
}

    Serial.flush();
}



  void Motorspeed()
  {
    potValue = analogRead(potPin) /4;

    if(on == 1)
  {
    analogWrite(motorPin, potValue);
  }
  }

  void LedBar()
  {
    potValue = analogRead(potPin) /4;
  if(on == 1){
  if (on == 1, potValue > M2) {
    digitalWrite(L2, HIGH);
  }
  else {
    digitalWrite(L2, LOW);
  }
  if (on == 1, potValue > M3) {
    digitalWrite(L3, HIGH);
  }
  else {
    digitalWrite(L3, LOW);
  }
  if (on == 1, potValue > M4) {
    digitalWrite(L4, HIGH);
  }
  else {
    digitalWrite(L4, LOW);
  }

   if (on == 1, potValue > M5) {
    digitalWrite(L5, HIGH);
  }
  else {
    digitalWrite(L5, LOW);
  }

   if (on == 1, potValue > M6) {
    digitalWrite(L6, HIGH);
  }
  else {
    digitalWrite(L6, LOW);
  }

   if (on == 1, potValue > M7) {
    digitalWrite(L7, HIGH);
  }
  else {
    digitalWrite(L7, LOW);
  }

   if (on == 1, potValue > M8) {
    digitalWrite(L8, HIGH);
  }
  else {
    digitalWrite(L8, LOW);
  }

   if (on == 1, potValue > M9) {
    digitalWrite(L9, HIGH);
  }
  else {
    digitalWrite(L9, LOW);
  }

   if (on == 1, potValue > M10) {
    digitalWrite(L10, HIGH);
   }

    else {
    digitalWrite(L10, LOW);
  }}
  else
   {
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    }
  }

2 个答案:

答案 0 :(得分:2)

简短回答:学习如何使用循环(for和while)和数组。

更长的一个:

像这样定义M:

int M[] = {40,75,...,250};

(用其余的值替换...)

并将LedBar函数更改为:

void LedBar()
{
    int potValue = analogRead(potPin) /4;
    if(on == 1)
        for (int i=0;i<=8;i++)
            if (potValue > M[i])
               digitalWrite(i+2, HIGH);
    else
        for (int i=0;i<=8;i++)
            digitalWrite(M[i+2], LOW);
}

另外,在设置中,您可以编写代码pinMode (L.., OUTPUT);行:

for (int i=2;i<=10;i++)
    pinMode (i, OUTPUT);

答案 1 :(得分:0)

凌乱的部分是LedBar功能......我建议像这样写:

void LedBar()
{
  if(on == 1)
  {
    if (potValue < M2) {
      //digitalWrite all leds 0;
    }
    else if (potValue > M2 && potValue < M3) {
      //digitalWrite first led 1;
      //digitalWrite all the others 0;
    }
    else if (potValue > M3 && potValue < M4) {
      //digitalWrite first and second led 1;
      //digitalWrite all others 0;
    }
    //and so on...
  }


  else
   {
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    }
  }