Включите каждый из светодиодов по порядку, установив задержку цикла в 100 миллисекунд

У меня есть учебник для завершения, и я не знаю код, который я должен использовать, чтобы все (4 светодиода) включались по порядку. Так что это мой код и моя симуляция. Заранее спасибо!

 Figure 1

Мой код:

void setup() {
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(6, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(6, HIGH);
  delay(100); // Wait for 100 millisecond(s)

  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(9, LOW);
  digitalWrite(6, LOW);
  delay(100); // Wait for 100 millisecond(s)
}

Редакция: Я должен следовать за этим. Я думаю, мой симулятор в порядке.

 Figure 2

1 голос | спросил Zuhrain 26 FebruaryEurope/MoscowbMon, 26 Feb 2018 18:01:00 +0300000000pmMon, 26 Feb 2018 18:01:00 +030018 2018, 18:01:00

3 ответа


1

Я вижу на вашей второй диаграмме, что вы управляете заземлением светодиодов. digitalWrite (PinNumber, HIGH) выключит светодиод, digitalWrite (PinNumber, LOW) включит светодиод. Следует избегать использования delay () в эскизе.

void setup(){
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(6, OUTPUT); 
  digitalWrite(13, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(6, HIGH);
}

void loop(){
  digitalWrite(13, LOW);
  delay(100);
  digitalWrite(12, LOW);
  delay(100);
  digitalWrite(9, LOW);
  delay(100);
  digitalWrite(6, LOW);
  delay(100);
  digitalWrite(13, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(9, HIGH);
  digitalWrite(6, HIGH);
  delay(100);
}
ответил VE7JRO 26 FebruaryEurope/MoscowbMon, 26 Feb 2018 23:40:36 +0300000000pmMon, 26 Feb 2018 23:40:36 +030018 2018, 23:40:36
0

Ваш код включает и выключает их все одновременно.

Из вашего вопроса я прочитал, что вы хотите включить их по порядку. В этом случае используйте простую диаграмму состояний. Это означает, что вы должны создать переменную (предпочтительно перечисление), например:

enum EState { FIRST_ON, SECOND_ON, THIRD_ON, FOURTH_ON };

EState _state;

Вы можете лучше использовать лучшие имена, чем FIRST_ON, ..., но я не знаю, что означают ваши огни.

В настройках вы инициализируете _state, например.

_state = FIRST_ON;

Чем в цикле вы проверяете и меняете состояние:

switch (_state)
{
case FIRST_ON:
    digitalWrite(13, HIGH); // Assuming this is the first light
    digitalWrite(12, LOW); // Put the others off
    ...
    ...
    _state = SECOND_ON; // Set the next state
    break;

case SECOND_ON:
    digitalWrite(13, LOW); // Assuming this is the first light
    digitalWrite(12, HIGH); // Put the second LED on
    .. // Put the third/fourth off
    _state = THIRD_ON; // Set the next state
    break;

    // Do the same for THIRD_ON and FOURTH_ON

default: // in all other cases
     break; // Should not happen
}

delay(100: // Wait for 100 milliseconds

Обратите внимание, чтобы не усложнять пример, я написал (в основном) такие строки, как вы:

digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(9, HIGH);
digitalWrite(6, HIGH);

Однако, поскольку это почти копии (4 на диаграмме состояний), лучше написать отдельную функцию:

void SwitchLedsOn(int led1State, int led2State, int led3State, int led4State)
{
  digitalWrite(13, led1State);
  digitalWrite(12, led2State);
  digitalWrite(9, led3State);
  digitalWrite(6, led4State);
}

Теперь вы можете использовать в первом случае:

case FIRST_ON:
    SwitchLedsOn(HIGH, LOW, LOW, LOW); // Switch only first on
    break;

И делайте то же самое с другими государствами.

ответил Michel Keijzers 26 FebruaryEurope/MoscowbMon, 26 Feb 2018 18:20:58 +0300000000pmMon, 26 Feb 2018 18:20:58 +030018 2018, 18:20:58
0

добавьте это в конец цикла loop ()

 digitalWrite(13, HIGH);
 delay(100);
 digitalWrite(12, HIGH);
 delay(100);
 digitalWrite(9, HIGH);
 delay(100);
ответил Juraj 26 FebruaryEurope/MoscowbMon, 26 Feb 2018 18:46:57 +0300000000pmMon, 26 Feb 2018 18:46:57 +030018 2018, 18:46:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132