Top.Mail.Ru
Ответы

Решить задачу в Tinkercad/Wokwi плата Arduino

Дано: 6 светодиодов, 6 резисторов номиналом 220 Ом, 1 кнопка, 1 резистор номиналом 10 кОм, потенциометр, провода, контроллер.
Построить схему и написать программу «случайные вспышки» для 6 светодиодов. Потенциометром изначально выбираем количество светодиодов (они должны светить). Затем нажимаем кнопку и начинается работа алгоритма “случайные вспышки”.

По дате
По рейтингу
Аватар пользователя
Мудрец
9мес
1234567891011121314151617181920212223242526272829303132333435363738394041
 const int buttonPin = 8; 
const int potPin = A0; 
const int ledPins[] = {2, 3, 4, 5, 6, 7}; 
int numLeds = 0; 
bool lastButtonState = HIGH; 
unsigned long lastDebounceTime = 0; 
unsigned long debounceDelay = 50; 
 
void setup() { 
    for (int i = 0; i < 6; i++) { 
        pinMode(ledPins[i], OUTPUT); 
    } 
    pinMode(buttonPin, INPUT_PULLUP); 
    randomSeed(analogRead(A1)); 
} 
 
void loop() { 
    int reading = digitalRead(buttonPin); 
    if (reading != lastButtonState) { 
        lastDebounceTime = millis(); 
    } 
     
    if ((millis() - lastDebounceTime) > debounceDelay) { 
        if (reading == LOW) { 
            numLeds = map(analogRead(potPin), 0, 1023, 1, 6); 
            triggerRandomFlashes(numLeds); 
        } 
    } 
     
    lastButtonState = reading; 
} 
 
void triggerRandomFlashes(int count) { 
    for (int i = 0; i < count; i++) { 
        int ledIndex = random(count); 
        digitalWrite(ledPins[ledIndex], HIGH); 
        delay(500); 
        digitalWrite(ledPins[ledIndex], LOW); 
        delay(100); 
    } 
} 
Аватар пользователя
Просветленный
9мес
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
 const int ledPins[] = {2, 3, 4, 5, 6, 7}; // Пины светодиодов 
const int numLeds = 6; 
const int buttonPin = 8; // Пин кнопки 
const int potPin = A0;   // Пин потенциометра 
 
bool randomFlash = false; // Флаг режима "случайные вспышки" 
 
void setup() { 
  // Инициализация пинов светодиодов как выходы 
  for (int i = 0; i < numLeds; i++) { 
    pinMode(ledPins[i], OUTPUT); 
  } 
   
  // Инициализация пина кнопки как вход 
  pinMode(buttonPin, INPUT); 
   
  // Инициализация генератора случайных чисел 
  randomSeed(analogRead(A1)); // Чтение с неиспользуемого аналогового пина 
} 
 
void loop() { 
  if (!randomFlash) { 
    // Чтение значения потенциометра 
    int potValue = analogRead(potPin); 
    // Преобразование значения в количество светодиодов (от 0 до 6) 
    int ledCount = map(potValue, 0, 1023, 0, numLeds); 
     
    // Выключаем все светодиоды 
    for (int i = 0; i < numLeds; i++) { 
      digitalWrite(ledPins[i], LOW); 
    } 
     
    // Включаем выбранное количество светодиодов 
    for (int i = 0; i < ledCount; i++) { 
      digitalWrite(ledPins[i], HIGH); 
    } 
     
    // Проверка нажатия кнопки 
    if (digitalRead(buttonPin) == HIGH) { // Кнопка нажата 
      delay(50); // Задержка для антидребезга 
      if (digitalRead(buttonPin) == HIGH) { 
        randomFlash = true; 
        // Выключаем все светодиоды перед началом случайных вспышек 
        for (int i = 0; i < numLeds; i++) { 
          digitalWrite(ledPins[i], LOW); 
        } 
      } 
    } 
     
  } else { 
    // Режим "случайные вспышки" 
    int ledIndex = random(numLeds); // Случайный индекс светодиода 
    int flashTime = random(100, 500); // Случайная длительность вспышки (мс) 
     
    digitalWrite(ledPins[ledIndex], HIGH); 
    delay(flashTime); 
    digitalWrite(ledPins[ledIndex], LOW); 
     
    // Задержка между вспышками 
    delay(random(100, 500)); 
  } 
} 
 
Аватар пользователя
Искусственный Интеллект
9мес

Конечно! Давайте пошагово рассмотрим, как построить схему и написать программу для проекта "Случайные вспышки" на Arduino с использованием Tinkercad или Wokwi.

## 1. Необходимые компоненты

- **Arduino Uno** (или совместимый контроллер)
- **6 светодиодов**
- **6 резисторов 220 Ом**
- **1 кнопка**
- **1 резистор 10 кОм** (для подтягивания кнопки)
- **1 потенциометр** (например, 10 кОм)
- **Соединительные провода**
- **Макетная плата** (опционально)

## 2. Схема подключения

### Подключение светодиодов

1. **Светодиоды:**
- Подключите аноды (длинные ножки) 6 светодиодов к цифровым пинам Arduino. Предположим, пины **2** до **7**.
- Катоды (короткие ножки) каждого светодиода подключите через резистор 220 Ом к GND.

2. **Кнопка:**
- Подключите один контакт кнопки к цифровому пину, например, **8**.
- Другой контакт кнопки подключите к GND через резистор 10 кОм (подтягивающий резистор).
- Также подключите один контакт кнопки напрямую к 5V, чтобы обеспечить высокий уровень сигнала при нажатии.

3. **Потенциометр:**
- Один из крайних выводов потенциометра подключите к 5V.
- Другой крайний вывод подключите к GND.
- Средний вывод (сигнальный) подключите к аналоговому пину **A0** на Arduino.

### Итоговая схема подключения:

```
Arduino Uno:
- Светодиоды:
- LED1: Анод -> пин 2 через провод
Катод -> резистор 220 Ом -> GND
- LED2: Анод -> пин 3 через провод
Катод -> резистор 220 Ом -> GND
- LED3: Анод -> пин 4 через провод
Катод -> резистор 220 Ом -> GND
- LED4: Анод -> пин 5 через провод
Катод -> резистор 220 Ом -> GND
- LED5: Анод -> пин 6 через провод
Катод -> резистор 220 Ом -> GND
- LED6: Анод -> пин 7 через провод
Катод -> резистор 220 Ом -> GND

- Кнопка:
- Один контакт кнопки -> пин 8 через провод
- Другой контакт кнопки -> GND через резистор 10 кОм
- Один контакт кнопки также подключен к 5V

- Потенциометр:
- Один крайний вывод -> 5V
- Другой крайний вывод -> GND
- Средний вывод -> A0
```

## 3. Программирование Arduino

Ниже представлен пример кода для реализации требуемой функциональности. Код снабжен подробными комментариями для лучшего понимания.

https://codeshare.io/r4786z

### Пояснения к коду:

1. **Инициализация:**
- Все 6 светодиодов устанавливаются как выходы и выключены по умолчанию.
- Кнопка настроена как вход без внутреннего подтягивающего резистора (используется внешний резистор 10 кОм).

2. **Чтение потенциометра:**
- Значение потенциометра считывается через аналоговый пин A0 и масштабируется от 1 до 6, чтобы определить количество активных светодиодов.

3. **Обработка кнопки:**
- Реализован механизм антидребезга для кнопки.
- При нажатии кнопки переключается состояние мигания (`flashing`).
- Если мигание включено, запускается алгоритм случайных вспышек.
- Если мигание выключено, светодиоды возвращаются в исходное состояние, заданное потенциометром.

4. **Алгоритм случайных вспышек:**
- Если мигание активно, случайным образом выбирается один из активных светодиодов.
- Выбранный светодиод включается на 200 мс, затем выключается.
- Между вспышками предусмотрена задержка в 200 мс для лучшей видимости эффекта.

## 4. Тестирование в Tinkercad или Wokwi