"Вы читаете о роботах и программировании и думаете: «Было бы здорово сделать что-то подобное самому!» Теми, кем эта идея овладевает чуть больше просто мыслей смотрят кто и как делал своего робота. Читают статьи, смотрят видео. На картинках все понятно. В видеороликах тоже обычно показываются уже готовые продукты, а также сжато показываются технологии их изготовления. И вроде бы то же всё понятно: отпилил, прикрутил, припаял, соединил, запрограммировал вон на той программе вот этим кодом."

суббота, 6 февраля 2021 г.

КРУЖОК ОТ 05.02.21

 И да, мы подошли в плотную к усложнению нашей схемы кнопкой. Больших затруднений это не вызвало. Группой товарищей была принята идея заменить четыре сегмента на один из индикации 4 цифр, при правельной сборке такой схемы исправленная программа должна работать и здесь. Но вот введение кнопки требует небольшого пересмотра алгоритма управления секундомером. Так как с этим возникли определенные сложности я размещаю схему алгоритма управления секундомером ниже.


Ранее написанная программа разделена на два блока - пошаговый отсчет секунд и индикация текущего отсчета и показана на схеме ввиде вставок кода. Теперь дело за вами. Напишите программный код управления секундомером или создайте свой альтернативный алгоритм с записью его в виде схемы и программного кода. 

И да, приведенная схема алгоритма показывает реализацию управления кнопкой, а схема по которой была написана действующая программа показано ниже. Соответственно приведена не вся а только фрагмент управления кнопкой.



    // Z:\home\kovi\DRACON\др длкр-20201219T045303Z-001\др длкр\tablo1a.drt
    // 1. Схема - процедура, Изменение 06.02.2021 16:26:24, Начало

int kn, sch1, sch2, sch3, sch4, sch5, sch6, sch0;

void setup()
{
DDRB = 0xff;
DDRD = 0xff;
sch1 = 0;
sch2 = 0;
sch3 = 0;
sch4 = 0;
sch5 = 0; 
}

void loop()
{

    // ==================== Шампур

    // 4. Заголовок / TABLO

    // 5. Ветка / СЧЕТЧИК

    // 6. Вставка / секундомер

goto L1_25;

    // 7. Адрес -> 8. Ветка / кнопка

    // ==================== Шампур

    // 8. Ветка / кнопка

    // 9. Цикл Вставка / индикация


L10: ;
    // 10. Вопрос / kn == 0 == Да
if (kn == 0) goto L15;

    // 11. Вопрос / kn == 2 == Да
if (kn == 2) goto L15;

    // 12. Вопрос / кнопка нажата? == Да
if ((PIND & (1 << PORTD1))) goto L14;

    // 13. Конец / Конец
goto L_end1;

    // ==================== Шампур

L14: ;
    // 14. Цикл Вопрос / кнопка нажата? == Да
if ((PIND & (1 << PORTD1))) goto L14;

L15: ;
    // 15. Действие / sch6 = 0
sch6 = 0;

    // 16. Вопрос / kn == 1 == Да
if (kn == 1) goto L21;

    // 17. Вопрос / кнопка нажата? == Нет
if (!((PIND & (1 << PORTD1)))) goto L2_42;

    // 18. Вопрос / kn == 2 == Да
if (kn == 2) goto L22;

L19: ;
    // 19. Действие / кн++
kn++;

L20: ;
    // 20. Цикл Вопрос / кнопка нажата? == Да
if ((PIND & (1 << PORTD1))) goto L20;
goto L_end1;

    // ==================== Шампур

L21: ;
    // 21. Действие / kn = 2
kn = 2;
goto L2_42;

    // ==================== Шампур

L22: ;
    // 22. Действие / kn = 0
kn = 0;

    // 23. Действие / sch1 = 0; sch2 = 0; sch3 = 0; sch4 = 0; sch5 = 0;
sch1 = 0;
sch2 = 0;
sch3 = 0;
sch4 = 0;
sch5 = 0;
goto L19;

    // Z:\home\kovi\DRACON\др длкр-20201219T045303Z-001\др длкр\tablo1a.drt
    // 2. Схема - вставка, Изменение 06.02.2021 15:50:44, Начало

    // ==================== Шампур

    // 24. Заголовок / секундомер


L1_25: ;
    // 25. Действие / //sch1++
sch1++;

    // 26. Вопрос / если счетчик sch1 == 100 == Да
if (sch1 == 100) goto L1_39;

L1_27: ;
    // 27. Вопрос / sch2 == 10 == Да
if (sch2 == 10) goto L1_32;

L1_28: ;
    // 28. Вопрос / sch3 == 6 == Да
if (sch3 == 6) goto L1_34;

L1_29: ;
    // 29. Вопрос / sch4 == 10 == Да
if (sch4 == 10) goto L1_36;

L1_30: ;
    // 30. Вопрос / sch5 == 6 == Да
if (sch5 == 6) goto L1_38;

    // 31. Конец / Конец
goto L2_42;

    // ==================== Шампур

L1_32: ;
    // 32. Действие / sch2 = 0
sch2 = 0;

    // 33. Действие / sch3++
sch3++;
goto L1_28;

    // ==================== Шампур

L1_34: ;
    // 34. Действие / sch3= 0
sch3= 0;

    // 35. Действие / sch4++
sch4++;
goto L1_29;

    // ==================== Шампур

L1_36: ;
    // 36. Действие / sch4= 0
sch4= 0;

    // 37. Действие / sch5++
sch5++;
goto L1_30;

    // ==================== Шампур

L1_38: ;
    // 38. Действие / sch5= 0
sch5= 0;
goto L2_42;

    // ==================== Шампур

L1_39: ;
    // 39. Действие / обнулить счетчик sch1
sch1 = 0;

    // 40. Действие / sch2++
sch2++;
goto L1_27;

    // Z:\home\kovi\DRACON\др длкр-20201219T045303Z-001\др длкр\tablo1a.drt
    // 3. Схема - вставка, Изменение 06.02.2021 16:25:26, Начало

    // ==================== Шампур

    // 41. Заголовок / индикация

L2_42: ;
    // 42. Цикл Выбор / выбор табло
if (sch6 == 0) goto L2_44; // 43. sch6 = 0
if (sch6 == 1) goto L2_54; // 53. sch6 = 1
if (sch6 == 2) goto L2_58; // 57. sch6 = 2
goto L2_62; // 61. 3

    // 43. Вариант / sch6 = 0

L2_44: ;
    // 44. Действие / включить табло 1 sch0 = sch2
PORTD = 0b00001000;
sch0 = sch2;

L2_45: ;
    // 45. Выбор / выбрать цифру
if (sch0 == 0) goto L2_47; // 46. sch0 = 0
if (sch0 == 1) goto L2_56; // 55. sch0 = 1
if (sch0 == 2) goto L2_60; // 59. sch0 = 2
if (sch0 == 3) goto L2_64; // 63. sch0 = 3
if (sch0 == 4) goto L2_66; // 65. sch0 = 4
if (sch0 == 5) goto L2_68; // 67. sch0 = 5
if (sch0 == 6) goto L2_70; // 69. sch0 = 6
if (sch0 == 7) goto L2_72; // 71. sch0 = 7
if (sch0 == 8) goto L2_74; // 73. sch0 = 8
goto L2_76; // 75. 9

    // 46. Вариант / sch0 = 0

L2_47: ;
    // 47. Действие / индикация цифры 0
PORTD &= ~(1 << 7);
PORTB = 0b00000100;

L2_48: ;
    // 48. Действие / sch6++
sch6++;

    // 49. Действие / выключить табло 0,1,2.3
delay(2);

    // 50. Вопрос / sch6 == 5 == Нет
if (!(sch6 == 4)) goto L2_42;

    // 51. Действие / sch6 = 0
sch6 = 0;

    // 52. Конец / Конец
goto L10;

    // ==================== Шампур

    // 53. Вариант / sch6 = 1


L2_54: ;
    // 54. Действие / включить табло 2 sch0 = sch3
PORTD = 0b00010000;
sch0 = sch3;
goto L2_45;

    // ==================== Шампур

    // 55. Вариант / sch0 = 1


L2_56: ;
    // 56. Действие / индикация цифры 1
PORTD &= ~(1 << 7);
PORTB = 0b11011111;
goto L2_48;

    // ==================== Шампур

    // 57. Вариант / sch6 = 2


L2_58: ;
    // 58. Действие / включить табло 3 sch0 = sch4
PORTD = 0b00100000;
sch0 = sch4;
goto L2_45;

    // ==================== Шампур

    // 59. Вариант / sch0 = 2


L2_60: ;
    // 60. Действие / индикация цифры 2
PORTD |= 1 << 7;
PORTB = 0b00001000;
goto L2_48;

    // ==================== Шампур

    // 61. Вариант / 3

L2_62: ;
    // 62. Действие / включить табло 4 sch0 = sch5
PORTD = 0b01000000;
sch0 = sch5;
goto L2_45;

    // ==================== Шампур

    // 63. Вариант / sch0 = 3


L2_64: ;
    // 64. Действие / индикация цифры 3
PORTD &= ~(1 << 7);
PORTB = 0b11001010;
goto L2_48;

    // ==================== Шампур

    // 65. Вариант / sch0 = 4


L2_66: ;
    // 66. Действие / индикация цифры 4
PORTD &= ~(1 << 7);
PORTB = 0b00010011;
goto L2_48;

    // ==================== Шампур

    // 67. Вариант / sch0 = 5


L2_68: ;
    // 68. Действие / индикация цифры 5
PORTD &= ~(1 << 7);
PORTB = 0b00100010;
goto L2_48;

    // ==================== Шампур

    // 69. Вариант / sch0 = 6


L2_70: ;
    // 70. Действие / индикация цифры 6
PORTD &= ~(1 << 7);
PORTB = 0b00100000;
goto L2_48;

    // ==================== Шампур

    // 71. Вариант / sch0 = 7


L2_72: ;
    // 72. Действие / индикация цифры 7
PORTD &= ~(1 << 7);
PORTB = 0b00001111;
goto L2_48;

    // ==================== Шампур

    // 73. Вариант / sch0 = 8


L2_74: ;
    // 74. Действие / индикация цифры 8
PORTD &= ~(1 << 7);
PORTB = 0b00000000;
goto L2_48;

    // ==================== Шампур

    // 75. Вариант / 9


L2_76: ;
    // 76. Действие / индикация цифры 9
PORTD &= ~(1 << 7);
PORTB = 0b00000010;
goto L2_48;

    // 1. Схема, Конец
L_end1: ;
//
}