2013-05-03 3 views
0

Эй, я нашел, если есть что-нибудь. коммандос я могу прочитать, чтобы улучшить этот код? Atleast теперь работает, но нужно сделать тонкую настройку :)Светодиод скорости двигателя 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

Короткий ответ: научиться использовать циклы (для и в то время) и массивы.

Более длинный один:

определить 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); 
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); 
    } 
    } 
Смежные вопросы