РЕШЕНО Олимпиадная задача

Тема в разделе "Arduino & Shields", создана пользователем Ramterdam, 28 окт 2019.

  1. Ramterdam

    Ramterdam Гик

    Есть задача: Соберите устройство, содержащее 3 кнопки, 1 светодиод. Светодиод должен загораться только при определённых комбинациях нажатых кнопок. Его состояние должно изменяться в соответствии с таблицей. Начертите электрическую схему устройства.
    Таблица:
    Кнопка1 Кнопка2 Кнопка3 Светодиод
    1 Замкнута Замкнута Разомкнута Горит
    2 Замкнута Разомкнута Замкнута Горит
    3 Замкнута Замкнута Замкнута Горит
    4 Разомкнута Замкнута Замкнута НЕГорит
    5 Разомкнута Замкнута Разомкнута НЕГорит
    6 Разомкнута Разомкнута Замкнута НЕГорит
    7 Разомкнута Разомкнута Разомкнута НЕГорит
    8 Замкнута Разомкнута Разомкнута НЕГорит
    Не понимаю что не так, помогите пожалуйста
    Вот код:
    Код (Text):

    int knop1 = 0;
    int knop2 = 0;
    int knop3 = 0;
    int kod = -1;
    void setup() {
      // put your setup code here, to run once:
      pinMode(4, OUTPUT);
      pinMode(12, INPUT);
      pinMode(11, INPUT);
      pinMode(10, INPUT);
      Serial.begin(9600);
      digitalWrite(4, 0);
    }

    void loop() {
      // put your main code here, to run repeatedly:
      knop1 = digitalRead(12);
      knop2 = digitalRead(11);
      knop3 = digitalRead(10);
      if ((knop1 == 1) & (knop2 == 1) & (knop3 == 0)) {
        kod = 1;
      }
      if ((knop1 == 1) & (knop2 == 0) & (knop3 == 1)) {
        kod = 2;
      }
      if ((knop1 == 1) & (knop2 == 1) & (knop3 == 1)) {
        kod = 3;
      }
      if ((knop1 == 0) & (knop2 == 1) & (knop3 == 1)) {
        kod = 4;
      }
      if ((knop1 == 0) & (knop2 == 1) & (knop3 == 0)) {
        kod = 5;
      }
      if ((knop1 == 0) & (knop2 == 0) & (knop3 == 1)) {
        kod = 6;
      }
      if ((knop1 == 0) & (knop2 == 0) & (knop3 == 0)) {
        kod = 7;
      }
      if ((knop1 == 1) & (knop2 == 0) & (knop3 == 0)) {
        kod = 8;
      }

      switch (kod) {
        case 1: {
            digitalWrite(4, 0);
            break;
          }
        case 2: {
            digitalWrite(4, 1);
            break;
          }
        case 3: {
            digitalWrite(4, 1);
            break;
          }
        case 4: {
          digitalWrite(4, 0);
            break;
          }
        case 5: {
          digitalWrite(4, 0);
            break;
          }
        case 6: {
          digitalWrite(4, 0);
            break;
          }
        case 7: {
          digitalWrite(4, 0);
            break;
          }
        case 8: {
          digitalWrite(4, 0);
            break;
          }
      }
    }
     
    И можно ещё схему составить электрическую, чтобы я посмотрел может в схеме проблема.
    Заранее спасибо.
     
  2. parovoZZ

    parovoZZ Гуру

    не понял - это кому посыл? С такими задачами в
    http://forum.amperka.ru/forums/Закажу-проект.22/
     
  3. Ramterdam

    Ramterdam Гик

    я просто прошу код проверить
    устройство то я собрал, там и собирать нечего
     
  4. Ariadna-on-Line

    Ariadna-on-Line Гуру

    А че, кроме кнопок и светодиода (ну еще источника тока и проводников конечно) - вообще ничего ?
     
  5. Ramterdam

    Ramterdam Гик

    кнопки,светодиод,плата,провода,резистор
    а разве нужно что - то ещё?
     
  6. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Мммм, я только спросил. У меня с комбинаторикой быстро не получается и кубики-рубики я не умею. А если устройство вы собрали - нафига код проверять ? Жмите кнопки и смотрите. Ах да - плата. Не понимаю что за плата. Кусочек картонки что ли ?
    Олимпиады я выигрывал, но - по химии.
     

    Вложения:

    • Olimp.JPG
      Olimp.JPG
      Размер файла:
      38,3 КБ
      Просмотров:
      403
    Последнее редактирование: 28 окт 2019
  7. Ramterdam

    Ramterdam Гик

    так что на счёт кода?
    там всё правильно
    и вы его вообще смотрели?
     
  8. DetSimen

    DetSimen Guest

    раз задача олимпиадная - $500.
     
    parovoZZ и NikitOS нравится это.
  9. Ramterdam

    Ramterdam Гик

    полагаю вы шутите
    это только отборочный тур, так что цена падает до нуля
    ладно бы финал был, тогда ещё ладно...
     
  10. NikitOS

    NikitOS Король шутов Администратор

    По Вашему это сработает?
    Как условие "и" обозначается?
     
  11. Ramterdam

    Ramterdam Гик

    вот таким значком &&
     
  12. Ramterdam

    Ramterdam Гик

    у меня почему-то светодиод в самом начале загорается, а потом сам мигать начинает
     
  13. NikitOS

    NikitOS Король шутов Администратор

    & и && - это разные вещи
     
    Ramterdam нравится это.
  14. Ramterdam

    Ramterdam Гик

    эммм...
    я что-то не так понял...или....
    вообщем я поменял знак, всё равно не работало
    потом я поменял у светодиода цифры 1 на 0
    и всё заработало!!!!
    что-то здесь не так.....
     
  15. liahim55

    liahim55 Нерд

    это простейший 3х входовый шифратор реализуется на одной логической микросхеме. Но если хотите програмно, то таблица истиннсти - если а, b, c входы то горит если a&b&!c || a&!b&c || a&b&c ==1
     
    Daniil нравится это.
  16. Ariadna-on-Line

    Ariadna-on-Line Гуру

    См. выше.
     
  17. b707

    b707 Гуру

    Ramterdam - двойка вам за код. Если это олимпиадная задача. то значит не стоит решать ее в лоб, кодируя все 8 условий - так сделает только двоечник.
    Во-первых, присмотритесь к условиям. на самом деле их не восемь, а меньше
    Во-вторых, на выходе один светодиод, который или горит или нет - а значит восемь кодов результата не нужны. достаточно двух
    И в третьих, если в первой части уже закодировали условия - то зачем в них устанавливать какие-то коды и выбирать их потом в switch -case. когда можно зажигать и гасить диод прямо в условиях?

    Короче, с таким стилем программирование нечего вам делать на олимпиаде....
     
    ИгорьК, Daniil и NikitOS нравится это.
  18. b707

    b707 Гуру

    можно записать значительно короче
     
  19. liahim55

    liahim55 Нерд

    Да я знаю что это выражение можно сократить, но думаю тс так лучше поймет, что надо просто по или собрать все условия когда горит в единственном операторе if
     
  20. Daniil

    Daniil Гуру

    Я в школе по информатике таких задач не видел, т.к. не мой уклон, но штука полезная
    карты карно