Random ное включение светодиодов и выключение кнопкой.

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем otis, 30 апр 2020.

  1. otis

    otis Гик

    Есть схема из UNO Slot+Expander Slot(43). К плате ехпандер подключил 2 светодиода и 2 кнопки(Led1-Key1 и Led2-Key2) На плате Uno подключен бузер. Нужно рандомно зажигать светодиод. Изменение состояния порта светодиода(1 й или 2й) запускают таймер Реакция(3 секунды) Если нажата кнопка которая соответствует своему светодиоду то свето диод гаснет. Если кнопка не нажата или нажата не та кнопка то таймер Реакция включает бузер.
    Как сделать рандом из порта А0 и как включить и выключить светодиод от кнопки на плате ехпандер я знаю. А как от рандома включить порт светодиода на плате ехспандер а выключить кнопкой понять не могу.
     
  2. Daniil

    Daniil Гуру

    Набираем рандомный код из А0, если этот код соответствует коду СД, то зажигаем.
    Повторяем с нужным периодом.
     
  3. parovoZZ

    parovoZZ Гуру

    из порта A0 рандома не будет. Он сильно коррелирован с выполняемым кодом. Настоящий рандом берется из радиоэфира.
     
  4. otis

    otis Гик

    [
    Код (C++):
    // библиотека для работы I²C
    #include <Wire.h>
    // библиотека для работы с модулем GPIO Expander (I²C IO)
    #include <GpioExpander.h>
    // создаём объект adio класса GpioExpander по адресу 43
    GpioExpander adio1(43);
    // создаём объект adio класса GpioExpander по адресу 44
    GpioExpander adio2(44);
    // создаём объект adio класса GpioExpander по адресу 45
    GpioExpander adio3(45);
    // создаём объект adio класса GpioExpander по адресу 45
    GpioExpander adio4(46);
    long randNumber;
    #define BuzzeOut 3
    void setup()
    {
      randomSeed(analogRead(0));
      // Инициализируем объекты expander. Для Arduino Due - adio.begin(&Wire1);
      adio1.begin();
      adio2.begin();
      adio3.begin();
      adio4.begin();
      // включаем I²C. Для Arduino Due - Wire1.begin();
      Wire.begin();
      // Инициализируем объект adio. Для Arduino Due - adio.begin(&Wire1);
      adio1.begin();
      // настраиваем пин 5 на модуле GPIO Expander в режим выхода
      adio1.pinMode(5, OUTPUT);
      // настраиваем пин 2 на модуле GPIO Expander в режим входа
      adio1.pinMode(2, OUTPUT);
       // настраиваем пин 0 на модуле GPIO Expander в режим выхода
      adio1.pinMode(0, INPUT);
      // настраиваем пин 3 на модуле GPIO Expander в режим входа
      adio1.pinMode(3, INPUT);
       // включаем I²C. Для Arduino Due - Wire1.begin();
      Wire.begin();
      // Инициализируем объект adio. Для Arduino Due - adio.begin(&Wire1);
      adio2.begin();
      // настраиваем пин 5 на модуле GPIO Expander в режим выхода
      adio2.pinMode(5, OUTPUT);
      // настраиваем пин 2 на модуле GPIO Expander в режим входа
      adio2.pinMode(2, OUTPUT);
       // настраиваем пин 0 на модуле GPIO Expander в режим выхода
      adio2.pinMode(0, INPUT);
      // настраиваем пин 3 на модуле GPIO Expander в режим входа
      adio2.pinMode(3, INPUT);
       // включаем I²C. Для Arduino Due - Wire1.begin();
      Wire.begin();
      // Инициализируем объект adio. Для Arduino Due - adio.begin(&Wire1);
      adio3.begin();
      // настраиваем пин 5 на модуле GPIO Expander в режим выхода
      adio3.pinMode(5, OUTPUT);
      // настраиваем пин 2 на модуле GPIO Expander в режим входа
      adio3.pinMode(2, OUTPUT);
      // настраиваем пин 0 на модуле GPIO Expander в режим выхода
      adio3.pinMode(0, INPUT);
      // настраиваем пин 3 на модуле GPIO Expander в режим входа
      adio3.pinMode(3, INPUT);
       // включаем I²C. Для Arduino Due - Wire1.begin();
      Wire.begin();
      // Инициализируем объект adio. Для Arduino Due - adio.begin(&Wire1);
      adio4.begin();
      // настраиваем пин 5 на модуле GPIO Expander в режим выхода
      adio4.pinMode(5, OUTPUT);
      // настраиваем пин 2 на модуле GPIO Expander в режим входа
      adio4.pinMode(2, OUTPUT);
      // настраиваем пин 0 на модуле GPIO Expander в режим выхода
      adio4.pinMode(0, INPUT);
      // настраиваем пин 3 на модуле GPIO Expander в режим входа
      adio4.pinMode(3, INPUT);
    }
    void loop()
    {
    randNumber = random(1, 8);
    digitalWrite(randNumber, HIGH);
      // считываем состояние кнопки с 0 пина на модуле GPIO Expander
      if (!adio1.digitalRead(0)) {
        // подаём на пин 2 модуля GPIO Expander «высокий сигнал»
        adio1.digitalWrite(2, HIGH);
      } else {
        // подаём на пин 2 модуля GPIO Expander «низкий сигнал»
        adio1.digitalWrite(2, LOW);
      }
      // считываем состояние кнопки с 3 пина на модуле GPIO Expander
      if (!adio1.digitalRead(3)) {
        // подаём на пин 5 модуля GPIO Expander «высокий сигнал»
        adio1.digitalWrite(5, HIGH);
      } else {
        // подаём на пин 5 модуля GPIO Expander «низкий сигнал»
        adio1.digitalWrite(5, LOW);
      }
       // считываем состояние кнопки с 0 пина на модуле GPIO Expander
      if (!adio2.digitalRead(0)) {
        // подаём на пин 2 модуля GPIO Expander «высокий сигнал»
        adio2.digitalWrite(2, HIGH);
      } else {
        // подаём на пин 2 модуля GPIO Expander «низкий сигнал»
        adio2.digitalWrite(2, LOW);
      }
      // считываем состояние кнопки с 3 пина на модуле GPIO Expander
      if (!adio2.digitalRead(3)) {
        // подаём на пин 5 модуля GPIO Expander «высокий сигнал»
        adio2.digitalWrite(5, HIGH);
      } else {
        // подаём на пин 5 модуля GPIO Expander «низкий сигнал»
        adio2.digitalWrite(5, LOW);
      }
       // считываем состояние кнопки с 0 пина на модуле GPIO Expander
      if (!adio3.digitalRead(0)) {
        // подаём на пин 2 модуля GPIO Expander «высокий сигнал»
        adio3.digitalWrite(2, HIGH);
      } else {
        // подаём на пин 2 модуля GPIO Expander «низкий сигнал»
        adio3.digitalWrite(2, LOW);
      }
      // считываем состояние кнопки с 3 пина на модуле GPIO Expander
      if (!adio3.digitalRead(3)) {
        // подаём на пин 5 модуля GPIO Expander «высокий сигнал»
        adio3.digitalWrite(5, HIGH);
      } else {
        // подаём на пин 5 модуля GPIO Expander «низкий сигнал»
        adio3.digitalWrite(5, LOW);
      }
       // считываем состояние кнопки с 0 пина на модуле GPIO Expander
      if (!adio4.digitalRead(0)) {
        // подаём на пин 2 модуля GPIO Expander «высокий сигнал»
        adio4.digitalWrite(2, HIGH);
      } else {
        // подаём на пин 2 модуля GPIO Expander «низкий сигнал»
        adio4.digitalWrite(2, LOW);
      }
      // считываем состояние кнопки с 3 пина на модуле GPIO Expander
      if (!adio4.digitalRead(3)) {
        // подаём на пин 5 модуля GPIO Expander «высокий сигнал»
        adio4.digitalWrite(5, HIGH);
      } else {
        // подаём на пин 5 модуля GPIO Expander «низкий сигнал»
        adio4.digitalWrite(5, LOW);
      }
     
     

    }
    Добрый день.Собрал схему из UNO Slot+ Slot Expander(43)+Slot Expander(44)+Slot Expander(45)+Slot Expander(46). К пинам 2 и 5 подключил светодиоды. К пинам 0 и 3 подключил кнопки. Помогите новичку.Слепил скетч из примеров амперки. Научился включать светодиоды от кнопок. Теперь хочу научиться как зажигать рандомно светодиоды. Проекты и инета показывают как это сделать на UNO и прочих платах. Мне нужно что бы рандомно светодиоды включались. А выключить светодиод нужно кнопкой. Если в течении 3 секунд не "погасил светодиод " то сигнал бузера. И потом цикл повторяем.
    Вот такую простую игрушку делаю племяннику.