<?xml version="1.0" encoding="UTF-8"?>        <rss version="2.0"
             xmlns:atom="http://www.w3.org/2005/Atom"
             xmlns:dc="http://purl.org/dc/elements/1.1/"
             xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
             xmlns:admin="http://webns.net/mvcb/"
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:content="http://purl.org/rss/1.0/modules/content/">
        <channel>
            <title>
									Форум | Микроконтроллеры, электроника и программирование - Свежие записи				            </title>
            <link>https://microtechnics.ru/community/</link>
            <description>Обсуждение вопросов, посвященных программированию микроконтроллеров, разработке электроники и не только.</description>
            <language>ru-RU</language>
            <lastBuildDate>Sun, 20 Sep 2026 13:23:57 +0000</lastBuildDate>
            <generator>wpForo</generator>
            <ttl>60</ttl>
							                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/9/#post-4262</link>
                        <pubDate>Thu, 10 Sep 2026 09:12:45 +0000</pubDate>
                        <description><![CDATA[@olga549 Рад, что все работает! &#x1f642;&#x1f44d;]]></description>
                        <content:encoded><![CDATA[@olga549 Рад, что все работает! &#x1f642;&#x1f44d;]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/"></category>                        <dc:creator>Aveal MT</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/9/#post-4262</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/9/#post-4261</link>
                        <pubDate>Mon, 07 Sep 2026 18:54:46 +0000</pubDate>
                        <description><![CDATA[здравствуйте. вы как всегда правы!!! эти строки отвечают за время отображения картинки. спасибо за помощь. вот теперь точно все !!!!! замучила я вас наверное с вопросами да расспросами. спас...]]></description>
                        <content:encoded><![CDATA[<p>здравствуйте. вы как всегда правы!!! эти строки отвечают за время отображения картинки. спасибо за помощь. вот теперь точно все !!!!! замучила я вас наверное с вопросами да расспросами. спасибо огромное еще раз за помощь!!!!!!!!</p>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/"></category>                        <dc:creator>ОЛЬГА549</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/9/#post-4261</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/9/#post-4260</link>
                        <pubDate>Thu, 03 Sep 2026 17:42:59 +0000</pubDate>
                        <description><![CDATA[Здесь попробуйте время настраивать.]]></description>
                        <content:encoded><![CDATA[<p></p>
<p>Попробуйте здесь задавать нужное время в миллисекундах (<strong>задается в 2-х местах</strong>):</p>
<pre contenteditable="false">end_time = millis() + (random(10,20) * 1000);</pre>
<p>Например, 20 с:</p>
<pre contenteditable="false">end_time = millis() + 20000;</pre>
<p></p>
<p>Здесь попробуйте время настраивать.</p>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/"></category>                        <dc:creator>Aveal MT</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/9/#post-4260</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/9/#post-4259</link>
                        <pubDate>Thu, 03 Sep 2026 17:34:20 +0000</pubDate>
                        <description><![CDATA[проверила!!!!! ВОТ здорово получилось!!!!!! все как и просила!!!!! время можно добавить для управления висения картинок и больше не надо ничего.]]></description>
                        <content:encoded><![CDATA[<p>проверила!!!!! ВОТ здорово получилось!!!!!! все как и просила!!!!! время можно добавить для управления висения картинок и больше не надо ничего. </p>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/"></category>                        <dc:creator>ОЛЬГА549</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/9/#post-4259</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/9/#post-4258</link>
                        <pubDate>Thu, 03 Sep 2026 17:12:26 +0000</pubDate>
                        <description><![CDATA[здравствуйте. вот это я знаю для чего. это привязка к скорости двигателя.

мне рассказали когда то когда я разбиралась для чего каждая строка.
// время задержки скорости двигателя 
  for...]]></description>
                        <content:encoded><![CDATA[<p>здравствуйте. вот это я знаю для чего. это привязка к скорости двигателя.</p>
930
<p>мне рассказали когда то когда я разбиралась для чего каждая строка.</p>
<pre contenteditable="false">// время задержки скорости двигателя 
  for (byte a=0; a&lt;50; a++)
  {
    while (digitalRead(LS_Pin) == HIGH) {delayMicroseconds(1);}
    delay(20);
  }
  
  digitalWrite(debug_pin, LOW);
  
  end_time = millis() + (random(10,20) * 1000);
  mode = 1;

  //подготовить прерывание
  attachInterrupt(digitalPinToInterrupt(LS_Pin), Erkenne_Flanke, FALLING);
}</pre>
<p>это для корректировки скорости мотора. если под рукой нет подходящего мотора который был в проекте использован, то скорость мотора можно подобрать. большая скорость мотора, тогда уменьшаешь время на сектор что бы не двоило или не запаздывало, а если мотор с меньшими оборотами, то время на сектор надо увеличивать.вот расчет и пояснения принципа. Я ПРОВЕРЯЛА. ЕСЛИ НЕ ИЗМЕНЯТЬ ЭТИ ПАРАМЕТРЫ, А УВЕЛИЧИВАТЬ СКОРОСТЬ МОТОРА. ИЗОБРАЖЕНИЕ НАЧИНАЕТ ДВОИТСЯ ИЛИ НЕ ПОЛНЫЙ КАДР ПОЛУЧАЕТСЯ ПРИ МАЛОЙ СКОРОСТИ МОТОРА. ВОТ КАК ЭТО РАБОТАЕТ......</p>
<p><strong>Расчет таймингов POV</strong></p>
<p>Для того, чтобы в определенном положении POV отображать соответствующие данные, мы должны очень точно рассчитать все тайминги и задержки. К счастью, контроллер  содержит встроенный таймер, который мы и будем использовать.</p>
<p>Частота вращения мотора = 3800 об/мин<br />Найдем частоту вращения в секунду 3800/60 = 63.3333 об/сек.<br />1 полный круг = 1/63.3333 = 0.015789 секунд<br />1° вращения = 0.015789/360 = 0.000043859 секунд<br />Частота выполнения инструкции 40 МГц/4 = 10 МГц<br />Инструкций на 1° вращения = 43.86 мкс/10000000 = 438.6<br />Получается 438 инструкций на каждый 1° вращения</p>
<p>Т.о. зная частоту вращения мотора, мы можем найти время для поворота на 1°. У нас получилось значение 43.86 мкс, это будет интервал вызова прерывания микроконтроллера, по которому будет обновляться состояние светодиодов. Для получения полной картинки, нам нужно будет выводить для каждого из 360 градусов свое состояние светодиодов. ВОТ ДЛЯ ЭТОГО И НАПИСАНЫ СТРОКИ. прошу прощения я ошиблась указав на не ту строку. вот в этой строке</p>
<pre contenteditable="false">#define v_offset 1  //скорость вращения отображаемого изображения</pre>
<p>изначально стояло 3 и рядом коменты на немецком. я перевела и вот что получила. если 3, то картинки вращаются МЕДЛЕННО вокруг оси. если 0, то БЫСТРО. а вот время сколько будет висеть каждая картинка до смены на следующую я такой функции не нашла.  вот исходник настоящий!! ни чьей рукой не тронутый. оригинал!!!!! вот что бы хотелось добавить ЕЩЕ!!!. какую нибудь функцию что бы время смены картинок менять ( например поставила в строке 1000 в миллисекундах ВСЕ картинки весят по минуте, разделять на у каждой свое время отображения не надо!!!! сменила на 500 по пол минуты отображаются каждая картинка и тд.</p>
929
<p>&nbsp;</p>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/"></category>                        <dc:creator>ОЛЬГА549</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/9/#post-4258</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/9/#post-4257</link>
                        <pubDate>Thu, 03 Sep 2026 11:21:12 +0000</pubDate>
                        <description><![CDATA[@olga549 Вообще значение вот тут ни на что не влияет, оно в динамике пересчитывается потом...
unsigned long   end_time = 0;
Попробуйте здесь задавать нужное время в миллисекундах (задается...]]></description>
                        <content:encoded><![CDATA[<p>@olga549 Вообще значение вот тут ни на что не влияет, оно в динамике пересчитывается потом...</p>
<pre contenteditable="false">unsigned long   end_time = 0;</pre>
<p>Попробуйте здесь задавать нужное время в миллисекундах (задается в 2-х местах):</p>
<pre contenteditable="false">end_time = millis() + (random(10,20) * 1000);</pre>
<p>Например, 20 с:</p>
<pre contenteditable="false">end_time = millis() + 20000;</pre>
<p>Режимы:</p>
<pre contenteditable="false">void loop()                     
{    
    LS = 0;
    
    if (flag == 0)
    {
      if (counter &lt; (N_O_S)) {sector_time--;}
      if (counter &gt; (N_O_S)) {sector_time++;}
    }
    
    if (counter == N_O_S) {flag = 1;}
    if ((counter &lt; (N_O_S - TOL)) || (counter &gt; (N_O_S + TOL))) {flag = 0;}
  
    if (end_time &lt; millis())
    {
      end_time = millis() + (random(10,20) * 1000);
      flag=0;
      mode++;
      if (mode == 10) {mode = 1;}
    }
  
    counter = 0;
    if (offset &gt; (N_O_S - 1)) {offset = 0;}
    
    EnableSPI();
 
    while (LS == 0) 
    {
        if (counter &lt; N_O_S) {pointer = counter;} else {pointer = N_O_S - 1;}      
        pointer = pointer + offset;
        if (pointer &gt; (N_O_S - 1)) {pointer = pointer - N_O_S;}
      
        int sector_index = pointer;
        if (sector_index == 0)
        {
            test_counter++;
        }
        
        int led_index = test_counter % 20;        
        if ((mode == 7) || (mode == 8) || (mode == 9))
        {
            led_index = 19 - led_index;
        }
        
        pointer = pointer * 15;
        
        int bit_index = 2 * led_index;
        int color_bit_offset = 0;
        
        switch (mode)
        {
            case 5:
            case 8:    
                color_bit_offset = 40;
                break;                
            case 6:
            case 9:    
                color_bit_offset = 80;
                break;
        }
        
        int cached_bit_1 = GetBit(&amp;test_array, bit_index + color_bit_offset);
        int cached_bit_2 = GetBit(&amp;test_array, bit_index + 1 + color_bit_offset);
        
        SetBit(&amp;test_array, bit_index + color_bit_offset);
        SetBit(&amp;test_array, bit_index + 1 + color_bit_offset);
    
        digitalWrite(latchPin, LOW);
        
        switch (mode)
        {
            case 1: 
                for (int l=0; l&lt;15; l++){SendRecSPI(bild_01);}
                break;
            case 2: 
                for (int l=0; l&lt;15; l++){SendRecSPI(bild_02);}
                break;
            case 3: 
                for (int l=0; l&lt;15; l++){SendRecSPI(bild_03);}
                break;
            case 4:
            case 5:    
            case 6:
            case 7: 
            case 8:
            case 9:             
                for (int l=0; l&lt;15; l++){SendRecSPI(test_array);}
                break;     
        }
        
        digitalWrite(latchPin, HIGH);
        
        if (cached_bit_1 == 0) ClearBit(&amp;test_array, bit_index + color_bit_offset);
        if (cached_bit_2 == 0) ClearBit(&amp;test_array, bit_index + 1 + color_bit_offset);
        
        counter++;
                                                           
        unsigned long end_micros = micros() + sector_time;                                    
        while ((micros() &lt; end_micros) &amp;&amp; (LS == 0)) {}                         
    }  
    
    DisableSPI();
    
    offset = offset + v_offset;
}</pre>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/"></category>                        <dc:creator>Aveal MT</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/9/#post-4257</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/8/#post-4256</link>
                        <pubDate>Thu, 03 Sep 2026 09:13:40 +0000</pubDate>
                        <description><![CDATA[здравствуйте. проверила, все работает!!!!! высший класс!!!!!, но вот какое появилось не удобство. которое я поняла и если можно его поправить. а получилось так:-при прохождении 4 цикла 3 цве...]]></description>
                        <content:encoded><![CDATA[<p>здравствуйте. проверила, все работает!!!!! высший класс!!!!!, но вот какое появилось не удобство. которое я поняла и если можно его поправить. а получилось так:-при прохождении 4 цикла 3 цвета переключаются между собой так быстро что создаётся эффект что они все вместе горят и тоже самое происходит на 5 цикле. а можно все эти эффекты разделить на циклы самостоятельные. то-есть 4 цикл (R) в низ, 5 цикл (G) вниз, 6 цикл (B) вниз, 7 цикл (R) вверх, 8 цикл (G) вверх, 9 цикл (B) вверх и опять по кругу порядок цветов не важен</p>
928
<p>. и еще просьба, а сложно сделать чтобы увеличить время отображения цикла. то-есть что бы длительность отображения картинки можно было дольше отображать.  вот эта строка управляет временем отображения картинки,</p>
<pre contenteditable="false">unsigned long   end_time = 0;    // ВОТ ЗДЕСЬ ЕСЛИ ПОСТАВИТЬ 3, ТО ПРОГРАММЫ СМЕНЯЮТСЯ ОЧЕНЬ БЫСТРО. ЕСЛИ 0 , ТО ПОМЕДЛЕННЕЕ!!!!!!!!</pre>
<p>но работает он своеобразно 0-(например 5 сек), а 3 -(например 0.5 сек)  и если дальше увеличивать ,то 25 кадр получается , а хотелось так что бы картинки стояли например минуту или 1.5 минуты. но разделять каждую на собственное время , этого не надо. пусть будет что бы все картинки были привязаны к одинаковому времени. вот какие просьбы появились. будьте добры!!! пожалуйста!!!!</p>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/"></category>                        <dc:creator>ОЛЬГА549</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/8/#post-4256</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/8/#post-4255</link>
                        <pubDate>Wed, 02 Sep 2026 08:46:07 +0000</pubDate>
                        <description><![CDATA[@olga549 
void loop()                     
{    
    LS = 0;
    
    if (flag == 0)
    {
      if (counter &lt; (N_O_S)) {sector_time--;}
      if (counter &gt; (N_O_S)) {sector_ti...]]></description>
                        <content:encoded><![CDATA[<p>@olga549 </p>
<pre contenteditable="false">void loop()                     
{    
    LS = 0;
    
    if (flag == 0)
    {
      if (counter &lt; (N_O_S)) {sector_time--;}
      if (counter &gt; (N_O_S)) {sector_time++;}
    }
    
    if (counter == N_O_S) {flag = 1;}
    if ((counter &lt; (N_O_S - TOL)) || (counter &gt; (N_O_S + TOL))) {flag = 0;}
  
    if (end_time &lt; millis())
    {
      end_time = millis() + (random(10,20) * 1000);
      flag=0;
      mode++;
      if (mode == 6) {mode = 1;}
    }
  
    counter = 0;
    if (offset &gt; (N_O_S - 1)) {offset = 0;}
    
    EnableSPI();
 
    while (LS == 0) 
    {
        if (counter &lt; N_O_S) {pointer = counter;} else {pointer = N_O_S - 1;}      
        pointer = pointer + offset;
        if (pointer &gt; (N_O_S - 1)) {pointer = pointer - N_O_S;}
      
        int sector_index = pointer;
        if (sector_index == 0)
        {
            test_counter++;
        }
        
        int led_index = test_counter % 20;        
        if (mode == 5)
        {
            led_index = 19 - led_index;
        }
        
        pointer = pointer * 15;
        
        int bit_index = 2 * led_index;
        int color_bit_offset = 40 * (test_counter % 3);
        
        int cached_bit_1 = GetBit(&amp;test_array, bit_index + color_bit_offset);
        int cached_bit_2 = GetBit(&amp;test_array, bit_index + 1 + color_bit_offset);
        
        SetBit(&amp;test_array, bit_index + color_bit_offset);
        SetBit(&amp;test_array, bit_index + 1 + color_bit_offset);
    
        digitalWrite(latchPin, LOW);
        
        switch (mode)
        {
            case 1: 
                for (int l=0; l&lt;15; l++){SendRecSPI(bild_01);}
                break;
            case 2: 
                for (int l=0; l&lt;15; l++){SendRecSPI(bild_02);}
                break;
            case 3: 
                for (int l=0; l&lt;15; l++){SendRecSPI(bild_03);}
                break;
            case 4:
            case 5:            
                for (int l=0; l&lt;15; l++){SendRecSPI(test_array);}
                break;     
        }
        
        digitalWrite(latchPin, HIGH);
        
        if (cached_bit_1 == 0) ClearBit(&amp;test_array, bit_index + color_bit_offset);
        if (cached_bit_2 == 0) ClearBit(&amp;test_array, bit_index + 1 + color_bit_offset);
        
        counter++;
                                                           
        unsigned long end_micros = micros() + sector_time;                                    
        while ((micros() &lt; end_micros) &amp;&amp; (LS == 0)) {}                         
    }  
    
    DisableSPI();
    
    offset = offset + v_offset;
}</pre>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/"></category>                        <dc:creator>Aveal MT</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/8/#post-4255</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/8/#post-4254</link>
                        <pubDate>Wed, 02 Sep 2026 07:42:45 +0000</pubDate>
                        <description><![CDATA[здравствуйте проверила я 10 скетч и вот что получилось. если вот так написано,
int led_index = test_counter % 20;
то работают правильно все пять режимов зелёным цветом.4 с верху в низ, а 5...]]></description>
                        <content:encoded><![CDATA[<p>здравствуйте проверила я 10 скетч и вот что получилось. если вот так написано,</p>
<pre contenteditable="false">int led_index = test_counter % 20;</pre>
<p>то работают правильно все пять режимов зелёным цветом.4 с верху в низ, а 5 снизу в верх. если как вы говорили для перебора RGB добавить вот так</p>
<pre contenteditable="false">int led_index = test_counter % 20 + 20 + 20;</pre>
<p>, то цвет меняется на синий, а 5 режим прекращает работать, вместо него пустой пропуск. диоды не светятся в 5 режиме. режим включается, а диоды не светятся.... а как добавить перебор 3х цветов???? </p>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/"></category>                        <dc:creator>ОЛЬГА549</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/8/#post-4254</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/8/#post-4253</link>
                        <pubDate>Tue, 01 Sep 2026 19:09:13 +0000</pubDate>
                        <description><![CDATA[здравствуйте, а вот почему если я записываю
int led_index = test_counter % 20 + 20 + 20;
как вы поясняли что бы добавить перебор цвета RGB , то горит в место зеленого только синий и смены ...]]></description>
                        <content:encoded><![CDATA[<p>здравствуйте, а вот почему если я записываю</p>
<pre contenteditable="false">int led_index = test_counter % 20 + 20 + 20;</pre>
<p>как вы поясняли что бы добавить перебор цвета RGB , то горит в место зеленого только синий и смены цвета по кругу в 4 цикле не происходит???? раньше бегал зеленый по кругу , а теперь только синий, цвета не сменяется по очереди на красный и потом зеленый. порядок неважен...</p>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/"></category>                        <dc:creator>ОЛЬГА549</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/8/#post-4253</guid>
                    </item>
							        </channel>
        </rss>
		