помогите запрограмировать кнопу на режимы
- Войдите на сайт для отправки комментариев
Чт, 28/11/2013 - 21:19
Помлгите сделать так чтобы при нажатии кнопки включался режим 1 еще раз нажать режим 2 и т.д
а при нажати кнопки 2 можно было венуца на предыдущий режим
int ledPins[] = {2,3,4,5,6,7};
void setup()
{
int index;
for(index = 0; index <= 5; index++)
{
pinMode(ledPins[index],OUTPUT);
}
}
void loop()
{
oneAfterAnotherNoLoop(); //режим 1
//oneAfterAnotherLoop(); //режим 2
//oneOnAtATime(); //режим 3
//pingPong(); //режим 4
//marquee(); // режим 5
//randomLED(); режим 6
}
void oneAfterAnotherNoLoop()
{
int delayTime = 100;
digitalWrite(ledPins[0], HIGH);
delay(delayTime);
digitalWrite(ledPins[1], HIGH);
delay(delayTime);
digitalWrite(ledPins[2], HIGH);
delay(delayTime);
digitalWrite(ledPins[3], HIGH);
delay(delayTime);
digitalWrite(ledPins[4], HIGH);
delay(delayTime);
digitalWrite(ledPins[5], HIGH);
delay(delayTime);
digitalWrite(ledPins[5], LOW);
delay(delayTime);
digitalWrite(ledPins[4], LOW);
delay(delayTime);
digitalWrite(ledPins[3], LOW);
delay(delayTime);
digitalWrite(ledPins[2], LOW);
delay(delayTime);
digitalWrite(ledPins[1], LOW);
delay(delayTime);
digitalWrite(ledPins[0], LOW);
delay(delayTime);
}
void oneAfterAnotherLoop()
{
int index;
int delayTime = 100;
for(index = 0; index <= 5; index++)
{
digitalWrite(ledPins[index], HIGH);
delay(delayTime);
}
for(index = 5; index >= 0; index--)
{
digitalWrite(ledPins[index], LOW);
delay(delayTime);
}
}
void oneOnAtATime()
{
int index;
int delayTime = 100;
for(index = 0; index <= 5; index++)
{
digitalWrite(ledPins[index], HIGH);
delay(delayTime);
digitalWrite(ledPins[index], LOW);
}
}
void pingPong()
{
int index;
int delayTime = 100;
for(index = 0; index <= 5; index++)
{
digitalWrite(ledPins[index], HIGH);
delay(delayTime);
digitalWrite(ledPins[index], LOW);
}
for(index = 5; index >= 0; index--)
{
digitalWrite(ledPins[index], HIGH);
delay(delayTime);
digitalWrite(ledPins[index], LOW);
}
}
void marquee()
{
int index;
int delayTime = 200;
for(index = 0; index <= 3; index++)
{
digitalWrite(ledPins[index], HIGH);
digitalWrite(ledPins[index+3], HIGH);
delay(delayTime);
digitalWrite(ledPins[index], LOW);
digitalWrite(ledPins[index+3], LOW);
}
}
void randomLED()
{
int index;
int delayTime;
index = random(6); delayTime = 100;
digitalWrite(ledPins[index], HIGH);
delay(delayTime);
digitalWrite(ledPins[index], LOW);
}
int button = 6; int button2 = 7; int counT=0; //номера режимов void loop(){ if(button==HIGH) { counT++; if(counT>7) counT=1; // при превышении числа лимитов возвращаемся к 1-му } if(button==HIGH) { counT++; if(counT<1) counT=7; } switch (counT) { //Если режим = 1, выполняем первую функцию и т.д. case 1: oneAfterAnotherNoLoop(); break; case 2: oneAfterAnotherLoop(); break; case 3: oneOnAtATime(); break; case 4: pingPong(); break; case 5: marquee(); break; case 6: randomLED(); break;} }Не многовато ли int'ов ?
Не многовато ли int'ов ?
Спасибо исправил, Ctrl+C нечаянно int захватил.
Так же не учтен дребезг. А так как в функциях испольвована delay() кнопочки прийдется обрабатывать в прерываниях.
в самай раз все работает, мне надо зделать так чтобы все режимы переключались по нажатии кнопки
скетч взял отсюда там http://www.youtube.com/watch?v=Z_CYSAE8UAs
в самай раз все работает, мне надо зделать так чтобы все режимы переключались по нажатии кнопки
скетч взял отсюда там http://www.youtube.com/watch?v=Z_CYSAE8UAs
maksim хотел сказать что мой код, который я показал Вам для примера, будет работать только в "идеальных" условиях. И указал причины почему он может работать некорректно.