<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://wiki.umki-kit.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=2001serial_joy4jostik</id>
	<title>2001serial joy4jostik - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.umki-kit.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=2001serial_joy4jostik"/>
	<link rel="alternate" type="text/html" href="http://wiki.umki-kit.ru/wiki/index.php?title=2001serial_joy4jostik&amp;action=history"/>
	<updated>2026-04-14T20:15:10Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>http://wiki.umki-kit.ru/wiki/index.php?title=2001serial_joy4jostik&amp;diff=190&amp;oldid=prev</id>
		<title>Evgen в 11:33, 15 ноября 2019</title>
		<link rel="alternate" type="text/html" href="http://wiki.umki-kit.ru/wiki/index.php?title=2001serial_joy4jostik&amp;diff=190&amp;oldid=prev"/>
		<updated>2019-11-15T11:33:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki.umki-kit.ru/wiki/index.php?title=2001serial_joy4jostik&amp;amp;diff=190&amp;amp;oldid=130&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Evgen</name></author>
	</entry>
	<entry>
		<id>http://wiki.umki-kit.ru/wiki/index.php?title=2001serial_joy4jostik&amp;diff=130&amp;oldid=prev</id>
		<title>Woronin: Новая страница: «&lt;code&gt;  //////////////////////////////////////////////  //     2018.08.28 woronin,  umkiedu@gmail.com  //     Robot UMKI controller  K6_2  //     To connect using…»</title>
		<link rel="alternate" type="text/html" href="http://wiki.umki-kit.ru/wiki/index.php?title=2001serial_joy4jostik&amp;diff=130&amp;oldid=prev"/>
		<updated>2019-08-12T10:41:29Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «&amp;lt;code&amp;gt;  //////////////////////////////////////////////  //     2018.08.28 woronin,  umkiedu@gmail.com  //     Robot UMKI controller  K6_2  //     To connect using…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;code&amp;gt;&lt;br /&gt;
 //////////////////////////////////////////////&lt;br /&gt;
 //     2018.08.28 woronin,  umkiedu@gmail.com&lt;br /&gt;
 //     Robot UMKI controller  K6_2&lt;br /&gt;
 //     To connect using 4joyjostik mobile app by link http://arduino-robot.site/basic/serial&lt;br /&gt;
 //     - for ANDROID 4.0.1 or later version;&lt;br /&gt;
 //////////////////////////////////////////////&lt;br /&gt;
 #include &amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;
 #define diod_led A1 // Аналоговый порт для диодика&lt;br /&gt;
 SoftwareSerial BTSerial(6, 7); // RX, TX&lt;br /&gt;
 int byte_forward[] = {0, 0,   129, 0, 4, 0, 0};&lt;br /&gt;
 int byte_bakward[] = {0, 0,   127, 0, 4, 0, 0};&lt;br /&gt;
 int byte_left[]    = {0, 129, 0,   0, 4, 0, 0};&lt;br /&gt;
 int byte_right[]   = {0, 127, 0,   0, 4, 0, 0};&lt;br /&gt;
 int byte_stop[]    = {0, 0,   0,   0, 4, 0, 0};&lt;br /&gt;
 int byte_start[]   = {0, 0,   0,   0, 4, 0, 2};&lt;br /&gt;
 int byte_a[]       = {0, 0,   0,   0, 4, 1, 0}; // A&lt;br /&gt;
 int byte_b[]       = {0, 0,   0,   0, 4, 2, 0}; // B&lt;br /&gt;
 int byte_c[]       = {0, 0,   0,   0, 4, 4, 0}; // C&lt;br /&gt;
 int byte_x[]       = {0, 0,   0,   0, 4, 8, 0}; // X&lt;br /&gt;
 int byte_y[]       = {0, 0,   0,   0, 4, 16, 0};// Y&lt;br /&gt;
 int byte_z[]       = {0, 0,   0,   0, 4, 32, 0};// Z&lt;br /&gt;
 int ml_speed = 3; // скорость моторов&lt;br /&gt;
 int mr_speed = 5; // скорость моторов только для К6&lt;br /&gt;
 int motor_r1 = 2; // направление правый&lt;br /&gt;
 int motor_l1 = 4; // направление левый&lt;br /&gt;
 int speaker = 6; // ножка спикера&lt;br /&gt;
 int program_move[255], program_time[255], program_speed[255]; //инициализация трех массивов, направления, времени, &lt;br /&gt;
 скорости&lt;br /&gt;
 int side, pwm = 255, press_time, time1, time2, press_but = 0, press_last = 0, flag_last_but = 0, flag_start_program = 0;&lt;br /&gt;
 int flag_source = 0; // флаг источника данных команд 0- ничего , 1 - блютус, 2 - снап&lt;br /&gt;
 int timeX = 150; // время в милисек для кнопки X&lt;br /&gt;
 int timeY = 300; // время в милисек для кнопки Y&lt;br /&gt;
 int n = 0; //  номер команды движения из 128&lt;br /&gt;
 int count_snap_cikl = 0 ; // счетчик циклов в коде от снапа,задается в подпрограмме снапа&lt;br /&gt;
 void setup() {&lt;br /&gt;
  // инициализируем те порты,&lt;br /&gt;
  BTSerial.begin(9600);&lt;br /&gt;
  Serial.begin(19200);&lt;br /&gt;
  pinMode(diod_led, OUTPUT); // назначаем пин для диода с резистором на плате&lt;br /&gt;
  Serial.println(&amp;quot;88888&amp;quot;); //  отладка поиска старта программы&lt;br /&gt;
 }&lt;br /&gt;
 void loop() // выполняется циклически записываем в порт по шнурку все полученны данные с блютуса&lt;br /&gt;
 {&lt;br /&gt;
  int inByte[128], i, count; //i - это элемент массива команды из 7 байт&lt;br /&gt;
  static int count_snap = 0; //  длина в байтах команды от снапа&lt;br /&gt;
  static int flag_snap = 0; // только для снапа, когда 0 - ожидает конца пакета, 1 - получен последний байт пакета&lt;br /&gt;
  // todo  сделать защиту от переполнения массива inByte[]&lt;br /&gt;
  // todo  сдедать таймаут для ожидания 0x8f&lt;br /&gt;
  // читаем из блютус порта 7 байт&lt;br /&gt;
  count = BTSerial.available();&lt;br /&gt;
  if (count &amp;lt; 1) return;&lt;br /&gt;
  switch (flag_source) {&lt;br /&gt;
    case 0: //  определяем по первому байту откуда пришли байты в порт - либо с моб, либо от снап&lt;br /&gt;
      inByte[0] = BTSerial.read(); //  прочитали первый байт&lt;br /&gt;
      if (inByte[0] == 0) flag_source = 1; // идут команды с мобилки пульта блютус&lt;br /&gt;
      else if (inByte[0] == 0x8e) {&lt;br /&gt;
        flag_source = 2; //  идет программа снапа&lt;br /&gt;
        count_snap = 1; // первый байт мы уже прочитали&lt;br /&gt;
        flag_snap = 0; // признак принятия пакета&lt;br /&gt;
      }&lt;br /&gt;
      Serial.println(); // перевод строки в мониторе когда  пришел первый байт в слове&lt;br /&gt;
      Serial.print(inByte[0], HEX); // вывод в COM порт побайтоно в шестнадцатиричной системе&lt;br /&gt;
      Serial.print(&amp;quot; &amp;quot;); // ставим пробел между байтаами, чтобы удобно было смотреть монитор порта&lt;br /&gt;
      return;&lt;br /&gt;
      break;&lt;br /&gt;
    case 1: //  здесь идут 7 байт с мобильника. Один уже прочтен ранее&lt;br /&gt;
      //            Serial.print(&amp;quot;count = &amp;quot;);&lt;br /&gt;
      //            Serial.println(count);&lt;br /&gt;
      if (count &amp;gt; 11) return; // Защита от перезаписывания в ардуино при режиме гироскопа&lt;br /&gt;
      if (count &amp;lt; 6) return; //  ни чего не обрабатываем до последнего байта слова&lt;br /&gt;
      for (i = 0; i &amp;lt; count; i++) {&lt;br /&gt;
        inByte[i + 1] = BTSerial.read();&lt;br /&gt;
        delay(10);&lt;br /&gt;
        Serial.print(inByte[i + 1], HEX); // вывод в COM порт побайтоно в шестнадцатиричной системе&lt;br /&gt;
        Serial.print(&amp;quot; &amp;quot;); // ставим пробел между байтаами, чтобы удобно было смотреть монитор порта&lt;br /&gt;
      }&lt;br /&gt;
      break;&lt;br /&gt;
    case 2: //  здесь мы читаем байты от програмы SNAP&lt;br /&gt;
      for (i = 0; i &amp;lt; count; i++) {&lt;br /&gt;
        inByte[count_snap] = BTSerial.read();&lt;br /&gt;
        if (inByte[count_snap] == 0x8f) {&lt;br /&gt;
          count_snap++;&lt;br /&gt;
          flag_snap = 1;&lt;br /&gt;
          break;&lt;br /&gt;
        }&lt;br /&gt;
        delay(10);&lt;br /&gt;
        count_snap++; // увеличиывем счетчик для массива исполняемой программы из Снапа&lt;br /&gt;
      }&lt;br /&gt;
      if (flag_snap == 0) return;&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
  // начало разбор принятых байт&lt;br /&gt;
  if (flag_source == 1) { //  функция  обработки по пультику&lt;br /&gt;
    if ((inByte[1] == byte_forward[1]) &amp;amp;&amp;amp; (inByte[2] == byte_forward[2]) &amp;amp;&amp;amp; (inByte[5] == byte_forward[5]) &amp;amp;&amp;amp; (inByte[6] == &lt;br /&gt;
 byte_forward[6])) {&lt;br /&gt;
      press_but = 48; // нажата кнопка вперед&lt;br /&gt;
    }&lt;br /&gt;
    else if ((inByte[1] == byte_left[1]) &amp;amp;&amp;amp; (inByte[2] == byte_left[2])  &amp;amp;&amp;amp; (inByte[5] == byte_left[5]) &amp;amp;&amp;amp; (inByte[6] == &lt;br /&gt;
 byte_left[6])) {&lt;br /&gt;
      press_but = 52; // нажата кнопка влево&lt;br /&gt;
    }&lt;br /&gt;
    else if ((inByte[1] == byte_right[1]) &amp;amp;&amp;amp; (inByte[2] == byte_right[2])  &amp;amp;&amp;amp; (inByte[5] == byte_right[5]) &amp;amp;&amp;amp; (inByte[6] == &lt;br /&gt;
 byte_right[6])) {&lt;br /&gt;
      press_but = 56; // нажата кнопка вправо&lt;br /&gt;
    }&lt;br /&gt;
    else if ((inByte[1] == byte_bakward[1]) &amp;amp;&amp;amp; (inByte[2] == byte_bakward[2])  &amp;amp;&amp;amp; (inByte[5] == byte_bakward[5]) &amp;amp;&amp;amp; &lt;br /&gt;
 (inByte[6] == byte_bakward[6])) {&lt;br /&gt;
      press_but = 60; // нажата кнопка назад&lt;br /&gt;
    }&lt;br /&gt;
    else if ((inByte[1] == byte_stop[1]) &amp;amp;&amp;amp; (inByte[2] == byte_stop[2]) &amp;amp;&amp;amp; (inByte[5] == byte_stop[5]) &amp;amp;&amp;amp; (inByte[6] == &lt;br /&gt;
 byte_stop[6])) {&lt;br /&gt;
      press_but = 65; // нажата кнопка стоп&lt;br /&gt;
    }&lt;br /&gt;
    else if ((inByte[1] == byte_start[1]) &amp;amp;&amp;amp; (inByte[2] == byte_start[2]) &amp;amp;&amp;amp; (inByte[5] == byte_start[5]) &amp;amp;&amp;amp; (inByte[6] == &lt;br /&gt;
 byte_start[6])) {&lt;br /&gt;
      press_but = 66; // нажата кнопка старт&lt;br /&gt;
    }&lt;br /&gt;
    // Разбор нажатия дополнительных кнопок&lt;br /&gt;
    else if ((inByte[1] == byte_a[1]) &amp;amp;&amp;amp; (inByte[2] == byte_a[2]) &amp;amp;&amp;amp; (inByte[4] == byte_a[4]) &amp;amp;&amp;amp; (inByte[5] == byte_a[5])) &lt;br /&gt;
 {&lt;br /&gt;
      press_but = 71; // нажата кнопка A&lt;br /&gt;
    }&lt;br /&gt;
    else  if ((inByte[1] == byte_b[1]) &amp;amp;&amp;amp; (inByte[2] == byte_b[2]) &amp;amp;&amp;amp; (inByte[4] == byte_b[4]) &amp;amp;&amp;amp; (inByte[5] == byte_b[5])) &lt;br /&gt;
 {&lt;br /&gt;
      press_but = 72; // нажата кнопка B&lt;br /&gt;
    }&lt;br /&gt;
    else  if ((inByte[1] == byte_c[1]) &amp;amp;&amp;amp; (inByte[2] == byte_c[2]) &amp;amp;&amp;amp; (inByte[4] == byte_c[4]) &amp;amp;&amp;amp; (inByte[5] == byte_c[5])) &lt;br /&gt;
 {&lt;br /&gt;
      press_but = 74; // нажата кнопка C&lt;br /&gt;
    }&lt;br /&gt;
    else if ((inByte[1] == byte_x[1]) &amp;amp;&amp;amp; (inByte[2] == byte_x[2]) &amp;amp;&amp;amp; (inByte[4] == byte_x[4]) &amp;amp;&amp;amp; (inByte[5] == byte_x[5])) &lt;br /&gt;
 {&lt;br /&gt;
      press_but = 78; // нажата кнопка X&lt;br /&gt;
    }&lt;br /&gt;
    else if ((inByte[1] == byte_y[1]) &amp;amp;&amp;amp; (inByte[2] == byte_y[2]) &amp;amp;&amp;amp; (inByte[4] == byte_y[4]) &amp;amp;&amp;amp; (inByte[5] == byte_y[5])) &lt;br /&gt;
 {&lt;br /&gt;
      press_but = 80; // нажата кнопка Y&lt;br /&gt;
    }&lt;br /&gt;
    else if ((inByte[1] == byte_z[1]) &amp;amp;&amp;amp; (inByte[2] == byte_z[2]) &amp;amp;&amp;amp; (inByte[4] == byte_z[4]) &amp;amp;&amp;amp; (inByte[5] == byte_z[5])) &lt;br /&gt;
 {&lt;br /&gt;
      press_but = 90; // нажата кнопка Z&lt;br /&gt;
    }&lt;br /&gt;
    // конец разбор принятых байт&lt;br /&gt;
    if (n &amp;gt;= 25) n = 0; // массив из 25 шагов команды, защита от переполнения&lt;br /&gt;
    // обработка нажатия кнопки&lt;br /&gt;
    if ( press_but &amp;gt; 67) { // если нажата кнопка A B C X Y Z то&lt;br /&gt;
      flag_source = 0; //  опускаем флаг источника данных&lt;br /&gt;
      press_last = press_but; // запоминаем последнюю нажатую кнопку&lt;br /&gt;
      return; // уходим на следующий цикл&lt;br /&gt;
    }&lt;br /&gt;
    // Разбор кнопок движения +++++++++++++++++++++++++++++++++++&lt;br /&gt;
    // Движение вперед&lt;br /&gt;
    if ( press_but == 48) {&lt;br /&gt;
      n++; // для программы увеличиваем на единицу индекс массива&lt;br /&gt;
      time1 = millis();  // Запоминаем время нажатия кнопки&lt;br /&gt;
      flag_last_but = 1; // поднимаем флаг нажатой кнопки   для подсчета времени&lt;br /&gt;
      if (flag_start_program == 1)  {&lt;br /&gt;
        memset (program_move, 0, sizeof(int) * 25); //для первой команды  после программы обнуляем массив&lt;br /&gt;
        n = 1; // ставим индексы всех массивов в 0&lt;br /&gt;
        flag_start_program = 0; // опускаем флаг старта программы&lt;br /&gt;
      }&lt;br /&gt;
      if (press_last == 78) {&lt;br /&gt;
        go_forward_x(pwm);&lt;br /&gt;
        program_move[n] = 0x0; //запоминаем в программе шаг вперед на времяX&lt;br /&gt;
      }&lt;br /&gt;
      else if (press_last == 80) {&lt;br /&gt;
        go_forward_y(pwm);&lt;br /&gt;
        program_move[n] = 0x2; //запоминаем в программе шаг впере на время Y&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        go_forward_z(pwm);&lt;br /&gt;
        program_move[n] = 0x1; //запоминаем в программе шаг вперед на время Z  по стопу&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Движение влево ++++++++++++++++++++++++++++&lt;br /&gt;
    if ( press_but == 52) {&lt;br /&gt;
      n++; // для программы увеличиваем на единицу индекс массива&lt;br /&gt;
      time1 = millis();  // Запоминаем время нажатия кнопки&lt;br /&gt;
      flag_last_but = 1; // поднимаем флаг нажатой кнопки   для подсчета времени&lt;br /&gt;
      if (flag_start_program == 1)  {&lt;br /&gt;
        memset (program_move, 0, sizeof(int) * 25); //для первой команды  после программы обнуляем массив&lt;br /&gt;
        n = 1; // ставим индексы всех массивов в 0&lt;br /&gt;
        flag_start_program = 0; // опускаем флаг старта программы&lt;br /&gt;
      }&lt;br /&gt;
      if (press_last == 78) {&lt;br /&gt;
        go_left_x(pwm);&lt;br /&gt;
        program_move[n] = 0x4; //запоминаем в программе шаг влево на времяX&lt;br /&gt;
      }&lt;br /&gt;
      else if (press_last == 80) {&lt;br /&gt;
        go_left_y(pwm);&lt;br /&gt;
        program_move[n] = 0x6; //запоминаем в программе шаг влево на время Y&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        go_left_z(pwm);&lt;br /&gt;
        program_move[n] = 0x5; //запоминаем в программе шаг влево на время Z  по стопу&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Движение вправо ++++++++++++++++++++++++++++++&lt;br /&gt;
    if ( press_but == 56) {&lt;br /&gt;
      n++; // для программы увеличиваем на единицу индекс массива&lt;br /&gt;
      time1 = millis();  // Запоминаем время нажатия кнопки&lt;br /&gt;
      flag_last_but = 1; // поднимаем флаг нажатой кнопки   для подсчета времени&lt;br /&gt;
      if (flag_start_program == 1)  {&lt;br /&gt;
        memset (program_move, 0, sizeof(int) * 25); //для первой команды  после программы обнуляем массив&lt;br /&gt;
        n = 1; // ставим индексы всех массивов в 0&lt;br /&gt;
        flag_start_program = 0; // опускаем флаг старта программы&lt;br /&gt;
      }&lt;br /&gt;
      if (press_last == 78) {&lt;br /&gt;
        go_right_x(pwm);&lt;br /&gt;
        program_move[n] = 0x8; //запоминаем в программе шаг вправо на времяX&lt;br /&gt;
      }&lt;br /&gt;
      else if (press_last == 80) {&lt;br /&gt;
        go_right_y(pwm);&lt;br /&gt;
        program_move[n] = 0xA; //запоминаем в программе шаг вправо на время Y&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        go_right_z(pwm);&lt;br /&gt;
        program_move[n] = 0x9; //запоминаем в программе шаг вправо на время Z  по стопу&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Движение назад +++++++++++++++++++++++++++++++++++++&lt;br /&gt;
    if ( press_but == 60) {&lt;br /&gt;
      n++; // для программы увеличиваем на единицу индекс массива&lt;br /&gt;
      time1 = millis();  // Запоминаем время нажатия кнопки&lt;br /&gt;
      flag_last_but = 1; // поднимаем флаг нажатой кнопки   для подсчета времени&lt;br /&gt;
      if (flag_start_program == 1)  {&lt;br /&gt;
        memset (program_move, 0, sizeof(int) * 25); //для первой команды  после программы обнуляем массив&lt;br /&gt;
        n = 1; // ставим индексы всех массивов в 0&lt;br /&gt;
        flag_start_program = 0; // опускаем флаг старта программы&lt;br /&gt;
      }&lt;br /&gt;
      if (press_last == 78) {&lt;br /&gt;
        go_bakward_x(pwm);&lt;br /&gt;
        program_move[n] = 0xC; //запоминаем в программе шаг назад на времяX&lt;br /&gt;
      }&lt;br /&gt;
      else if (press_last == 80) {&lt;br /&gt;
        go_bakward_y(pwm);&lt;br /&gt;
        program_move[n] = 0xE; //запоминаем в программе шаг назад на время Y&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        go_bakward_z(pwm);&lt;br /&gt;
        program_move[n] = 0xD; //запоминаем в программе шаг назад на время Z  по стопу&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Движение стоп ++++++++++++++++++++++++++++++&lt;br /&gt;
    if ( press_but == 65) {&lt;br /&gt;
      time2 = millis();  // Запоминаем время нажатия кнопки&lt;br /&gt;
      if (n &amp;gt; 0) {&lt;br /&gt;
        if (flag_last_but == 1)&lt;br /&gt;
          program_time[n] = time2 - time1; //записываем по индексу в массив время движения&lt;br /&gt;
        flag_last_but = 0; // опускаем флаг нажатой кнопки&lt;br /&gt;
      }&lt;br /&gt;
      go_stop(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    // Движение по кнопке программа +++++++++++++++++++&lt;br /&gt;
    if ( press_but == 66) {&lt;br /&gt;
      if (press_last == 71)go_program_a (pwm, n); // запускаем езду по командам программе в прямой последовательности&lt;br /&gt;
      if (press_last == 72)go_program_b (pwm, n); // запускаем езду по командам программе в обратной последовательности&lt;br /&gt;
      flag_start_program = 1; // поднимаем флаг старта программы&lt;br /&gt;
    }&lt;br /&gt;
    flag_source = 0; //  опускаем флаг источника данных&lt;br /&gt;
  } //  endif (flag_source == 1)&lt;br /&gt;
  if (flag_source == 2) { // обрабатываем массив принятых данных от СНАПА ++++++++++++++++&lt;br /&gt;
    for (i = 0; i &amp;lt; count_snap - 2; i++) {&lt;br /&gt;
      if (inByte[i] == 0x03 )  count_snap_cikl++; // подсчитываем количество повторов цикла в коде&lt;br /&gt;
      if (count_snap_cikl == 0) count_snap_cikl = 1; //Задаем один проход если небыло циклов в программе снапа&lt;br /&gt;
    }&lt;br /&gt;
    for (i = 1; i &amp;lt;= count_snap - 2; i++) {&lt;br /&gt;
      program_move[i - 1] = inByte[i]; // переносим принятый массив байт в массив для исполнения&lt;br /&gt;
    }&lt;br /&gt;
    for (i = 1; i &amp;lt; count_snap_cikl; i++) { //  исполняем программу в цикле с учетом повторов&lt;br /&gt;
      go_program_a (pwm, count_snap - 2); // запускаем езду по командам программе в прямой последовательности&lt;br /&gt;
    }&lt;br /&gt;
    flag_source = 0; //  опускаем флаг источника данных&lt;br /&gt;
  }//  endif (flag_source == 2)&lt;br /&gt;
 }//все, конец рабочего цикла&lt;br /&gt;
 ////////// подпрограммы ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
 void go_forward_x(int pwm) // вперед поехали после нажатой X&lt;br /&gt;
 {&lt;br /&gt;
  digitalWrite(motor_r1, LOW); // вперед правый&lt;br /&gt;
  digitalWrite(motor_l1, LOW); // вперед левый&lt;br /&gt;
  analogWrite(ml_speed, pwm); // скорость&lt;br /&gt;
  analogWrite(mr_speed, pwm);&lt;br /&gt;
  delay(timeX);&lt;br /&gt;
  analogWrite(ml_speed, 0); // скорость стоп&lt;br /&gt;
  analogWrite(mr_speed, 0);&lt;br /&gt;
 }&lt;br /&gt;
 void go_forward_y(int pwm)  // вперед поехали после нажатой Y&lt;br /&gt;
 {&lt;br /&gt;
  digitalWrite(motor_r1, LOW); // вперед правый&lt;br /&gt;
  digitalWrite(motor_l1, LOW); // вперед левый&lt;br /&gt;
  analogWrite(ml_speed, pwm); // скорость&lt;br /&gt;
  analogWrite(mr_speed, pwm);&lt;br /&gt;
  delay(timeY);&lt;br /&gt;
  analogWrite(ml_speed, 0); // скорость стоп&lt;br /&gt;
  analogWrite(mr_speed, 0);&lt;br /&gt;
 }&lt;br /&gt;
 void go_forward_z(int pwm)  // вперед поехали после нажатой Z&lt;br /&gt;
 {&lt;br /&gt;
  digitalWrite(motor_r1, LOW); // вперед правый&lt;br /&gt;
  digitalWrite(motor_l1, LOW); // вперед левый&lt;br /&gt;
  analogWrite(ml_speed, pwm); // скорость&lt;br /&gt;
  analogWrite(mr_speed, pwm);&lt;br /&gt;
 }&lt;br /&gt;
 void go_back(int pwm)  // назад поехали&lt;br /&gt;
 {&lt;br /&gt;
  digitalWrite(motor_r1, HIGH); // назад правый&lt;br /&gt;
  digitalWrite(motor_l1, HIGH); // назад левый&lt;br /&gt;
  analogWrite(ml_speed, pwm); // скорость&lt;br /&gt;
  analogWrite(mr_speed, pwm);&lt;br /&gt;
 }&lt;br /&gt;
 void go_bakward_x(int pwm) // назад поехали после нажатой X&lt;br /&gt;
 {&lt;br /&gt;
  digitalWrite(motor_r1, HIGH); // назад правый&lt;br /&gt;
  digitalWrite(motor_l1, HIGH); // назад левый&lt;br /&gt;
  analogWrite(ml_speed, pwm); // скорость&lt;br /&gt;
  analogWrite(mr_speed, pwm);&lt;br /&gt;
  delay(timeX);&lt;br /&gt;
  analogWrite(ml_speed, 0); // скорость стоп&lt;br /&gt;
  analogWrite(mr_speed, 0);&lt;br /&gt;
 }&lt;br /&gt;
 void go_bakward_y(int pwm)  // назад поехали после нажатой Y&lt;br /&gt;
 {&lt;br /&gt;
  digitalWrite(motor_r1, HIGH); // назад правый&lt;br /&gt;
  digitalWrite(motor_l1, HIGH); // назад левый&lt;br /&gt;
  analogWrite(ml_speed, pwm); // скорость&lt;br /&gt;
  analogWrite(mr_speed, pwm);&lt;br /&gt;
  delay(timeY);&lt;br /&gt;
  analogWrite(ml_speed, 0); // скорость стоп&lt;br /&gt;
  analogWrite(mr_speed, 0);&lt;br /&gt;
 }&lt;br /&gt;
 void go_bakward_z(int pwm)  // назад поехали после нажатой Z&lt;br /&gt;
 {&lt;br /&gt;
  digitalWrite(motor_r1, HIGH); // назад правый&lt;br /&gt;
  digitalWrite(motor_l1, HIGH); // назад левый&lt;br /&gt;
  analogWrite(ml_speed, pwm); // скорость&lt;br /&gt;
  analogWrite(mr_speed, pwm);&lt;br /&gt;
 }&lt;br /&gt;
 void go_left_x(int pwm)  // влево поехали после нажатой X&lt;br /&gt;
 {&lt;br /&gt;
  digitalWrite(motor_r1, LOW); // вперед правый&lt;br /&gt;
  digitalWrite(motor_l1, HIGH); // назад левый&lt;br /&gt;
  analogWrite(ml_speed, pwm); // скорость&lt;br /&gt;
  analogWrite(mr_speed, pwm);&lt;br /&gt;
  delay(timeX);&lt;br /&gt;
  analogWrite(ml_speed, 0); // скорость стоп&lt;br /&gt;
  analogWrite(mr_speed, 0);&lt;br /&gt;
 }&lt;br /&gt;
 void go_left_y(int pwm)  // влево поехали после нажатой Y&lt;br /&gt;
 {&lt;br /&gt;
  digitalWrite(motor_r1, LOW); // вперед правый&lt;br /&gt;
  digitalWrite(motor_l1, HIGH); // назад левый&lt;br /&gt;
  analogWrite(ml_speed, pwm); // скорость&lt;br /&gt;
  analogWrite(mr_speed, pwm);&lt;br /&gt;
  delay(timeY);&lt;br /&gt;
  analogWrite(ml_speed, 0); // скорость стоп&lt;br /&gt;
  analogWrite(mr_speed, 0);&lt;br /&gt;
 }&lt;br /&gt;
 void go_left_z(int pwm)  // влево поехали после нажатой Z&lt;br /&gt;
 {&lt;br /&gt;
  digitalWrite(motor_r1, LOW); // вперед правый&lt;br /&gt;
  digitalWrite(motor_l1, HIGH); // назад левый&lt;br /&gt;
  analogWrite(ml_speed, pwm); // скорость&lt;br /&gt;
  analogWrite(mr_speed, pwm);&lt;br /&gt;
 }&lt;br /&gt;
 void go_right_x(int pwm) // вправо поехали после нажатой X&lt;br /&gt;
 {&lt;br /&gt;
  digitalWrite(motor_r1, HIGH ); // назад правый&lt;br /&gt;
  digitalWrite(motor_l1, LOW); // вперед левый&lt;br /&gt;
  analogWrite(ml_speed, pwm); // скорость&lt;br /&gt;
  analogWrite(mr_speed, pwm);&lt;br /&gt;
  delay(timeX);&lt;br /&gt;
  analogWrite(ml_speed, 0); // скорость стоп&lt;br /&gt;
  analogWrite(mr_speed, 0);&lt;br /&gt;
 }&lt;br /&gt;
 void go_right_y(int pwm) // вправо поехали после нажатой Y&lt;br /&gt;
 {&lt;br /&gt;
  digitalWrite(motor_r1, HIGH ); // назад правый&lt;br /&gt;
  digitalWrite(motor_l1, LOW); // вперед левый&lt;br /&gt;
  analogWrite(ml_speed, pwm); // скорость&lt;br /&gt;
  analogWrite(mr_speed, pwm);&lt;br /&gt;
  delay(timeY);&lt;br /&gt;
  analogWrite(ml_speed, 0); // скорость стоп&lt;br /&gt;
  analogWrite(mr_speed, 0);&lt;br /&gt;
 }&lt;br /&gt;
 void go_right_z(int pwm) // вправо поехали после нажатой Z&lt;br /&gt;
 {&lt;br /&gt;
  digitalWrite(motor_r1, HIGH ); // назад правый&lt;br /&gt;
  digitalWrite(motor_l1, LOW); // вперед левый&lt;br /&gt;
  analogWrite(ml_speed, pwm); // скорость&lt;br /&gt;
  analogWrite(mr_speed, pwm);&lt;br /&gt;
 }&lt;br /&gt;
 void go_speaker(int pwm) // Писк спикера&lt;br /&gt;
 {&lt;br /&gt;
  analogWrite(speaker, pwm - 1); // вкл спикер не знаю почему но так включается&lt;br /&gt;
  delay (500);&lt;br /&gt;
  analogWrite(speaker, pwm); // выкл спикер&lt;br /&gt;
 }&lt;br /&gt;
 void go_blink(int pwm) // моргание диодика&lt;br /&gt;
 {&lt;br /&gt;
  digitalWrite(diod_led, HIGH); // вкл диодик&lt;br /&gt;
  delay (1500);&lt;br /&gt;
  digitalWrite(diod_led, LOW); // выкл диодик&lt;br /&gt;
 }&lt;br /&gt;
 void go_stop(int pwm) // стоп&lt;br /&gt;
 {&lt;br /&gt;
  analogWrite(ml_speed, 0); // скорость стоп&lt;br /&gt;
  analogWrite(mr_speed, 0);&lt;br /&gt;
 }&lt;br /&gt;
 /////////////////// Подпрограммы езды по ранее введенным командам +++++++++++++++++++++++++++++++++++++++++++++++++++++++&lt;br /&gt;
 void go_program_a(int pwm, int n_con) // Подпрограмма езды по заданым шагам программы после А&lt;br /&gt;
 {&lt;br /&gt;
  int n;&lt;br /&gt;
  for (n = 0; n &amp;lt; n_con; n++) {&lt;br /&gt;
    Serial.print(n);&lt;br /&gt;
    Serial.print(&amp;quot; np= &amp;quot;);&lt;br /&gt;
    Serial.print(program_move[n], HEX);&lt;br /&gt;
    Serial.print(&amp;quot; tm= &amp;quot;);&lt;br /&gt;
    Serial.println(program_time[n]);&lt;br /&gt;
    if     (program_move[n] == 0x0)  { // вперед при нажатой X; T min&lt;br /&gt;
      go_forward_x(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0x2) { // вперед при нажатой Y; T ave&lt;br /&gt;
      go_forward_y(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0x1) { // вперед при нажатой Z; T max&lt;br /&gt;
      go_forward_z(pwm);&lt;br /&gt;
      delay(program_time[n]);&lt;br /&gt;
      go_stop(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0x4) {// влево при нажатой X; T min&lt;br /&gt;
      go_left_x(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0x6) {// влево при нажатой Y; T ave&lt;br /&gt;
      go_left_y(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0x5) {// влево при нажатой Z; T max&lt;br /&gt;
      go_left_z(pwm);&lt;br /&gt;
      delay(program_time[n]);&lt;br /&gt;
      go_stop(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0x7) {// звук спикера&lt;br /&gt;
      go_speaker(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0x8) {// вправо при нажатой X; T min&lt;br /&gt;
      go_right_x(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0xA) {// вправо при нажатой Y; T ave&lt;br /&gt;
      go_right_y(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0x9) {// вправо при нажатой Z; T max&lt;br /&gt;
      go_right_z(pwm);&lt;br /&gt;
      delay(program_time[n]);&lt;br /&gt;
      go_stop(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0xC) {// назад при нажатой X; T min&lt;br /&gt;
      go_bakward_x(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0xE) {// назад при нажатой Y; T ave&lt;br /&gt;
      go_bakward_y(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0xD) {// назад при нажатой Z; T max&lt;br /&gt;
      go_bakward_z(pwm);&lt;br /&gt;
      delay(program_time[n]);&lt;br /&gt;
      go_stop(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0xF) {// Моргнуть диодиком&lt;br /&gt;
      go_blink(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    delay(500);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 void go_program_b(int pwm, int n_con) // Подпрограмма езды по заданым шагам программы после B&lt;br /&gt;
 {&lt;br /&gt;
  int n;&lt;br /&gt;
  for (n = n_con; n &amp;gt; 0; n--) {&lt;br /&gt;
    Serial.print(n);&lt;br /&gt;
    Serial.print(&amp;quot; np= &amp;quot;);&lt;br /&gt;
    Serial.print(program_move[n]);&lt;br /&gt;
    Serial.print(&amp;quot; tm= &amp;quot;);&lt;br /&gt;
    Serial.println(program_time[n]);&lt;br /&gt;
    if     (program_move[n] == 0x0)  { // вперед при нажатой X; T min&lt;br /&gt;
      go_forward_x(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0x2) { // вперед при нажатой Y; T ave&lt;br /&gt;
      go_forward_y(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0x1) { // вперед при нажатой Z; T max&lt;br /&gt;
      go_forward_z(pwm);&lt;br /&gt;
      delay(program_time[n]);&lt;br /&gt;
      go_stop(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0x4) {// влево при нажатой X; T min&lt;br /&gt;
      go_left_x(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0x6) {// влево при нажатой Y; T ave&lt;br /&gt;
      go_left_y(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0x5) {// влево при нажатой Z; T max&lt;br /&gt;
      go_left_z(pwm);&lt;br /&gt;
      delay(program_time[n]);&lt;br /&gt;
      go_stop(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0x8) {// вправо при нажатой X; T min&lt;br /&gt;
      go_right_x(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0xA) {// вправо при нажатой Y; T ave&lt;br /&gt;
      go_right_y(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0x9) {// вправо при нажатой Z; T max&lt;br /&gt;
      go_right_z(pwm);&lt;br /&gt;
      delay(program_time[n]);&lt;br /&gt;
      go_stop(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0xC) {// назад при нажатой X; T min&lt;br /&gt;
      go_bakward_x(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0xE) {// назад при нажатой Y; T ave&lt;br /&gt;
      go_bakward_y(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    else if (program_move[n] == 0xD) {// назад при нажатой Z; T max&lt;br /&gt;
      go_bakward_z(pwm);&lt;br /&gt;
      delay(program_time[n]);&lt;br /&gt;
      go_stop(pwm);&lt;br /&gt;
    }&lt;br /&gt;
    delay(500);&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Видео эпизоды УМКИ]]&lt;/div&gt;</summary>
		<author><name>Woronin</name></author>
	</entry>
</feed>