嘿,如果有什么事情,我就知道了。我可以阅读一个突击队来改进这段代码? 至少它现在正在工作,但需要做一些微调:)
正如您所看到的,代码非常混乱,阅读时也很麻烦。希望有人可以提供帮助。
提前谢谢。
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);
}
}
答案 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);
}
}