<?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>Tue, 28 Jul 2026 05:56:53 +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/8/#post-4247</link>
                        <pubDate>Mon, 27 Jul 2026 18:37:15 +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/8/#post-4247</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/8/#post-4246</link>
                        <pubDate>Mon, 27 Jul 2026 09:17:32 +0000</pubDate>
                        <description><![CDATA[Хорошо, если что - обращайтесь! &#x1f642; 
&nbsp;]]></description>
                        <content:encoded><![CDATA[
<p>здравствуйте. большое вам спасибо за помощь . мне хватит. здесь огромное поле для творчества. и чтобы все изучить.  я очень рада.</p>
<p></p>
<p>Хорошо, если что - обращайтесь! &#x1f642; </p>
<p>&nbsp;</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/8/#post-4246</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/8/#post-4245</link>
                        <pubDate>Mon, 27 Jul 2026 09:16:55 +0000</pubDate>
                        <description><![CDATA[@olga549 да, в режимах 4 и 5 сейчас диоды переключаются после полного оборота, но это можно изменить в случае необходимости. Я так просто для наглядности сделал.]]></description>
                        <content:encoded><![CDATA[@olga549 да, в режимах 4 и 5 сейчас диоды переключаются после полного оборота, но это можно изменить в случае необходимости. Я так просто для наглядности сделал.]]></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-4245</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/8/#post-4244</link>
                        <pubDate>Sun, 26 Jul 2026 19:12:15 +0000</pubDate>
                        <description><![CDATA[а еще один маленький вопрос? я правильно поняла что скорость перемещения диодов по кольцу, зависит от скорости вращения конструкции. то есть от прерывания LS.]]></description>
                        <content:encoded><![CDATA[<p>а еще один маленький вопрос? я правильно поняла что скорость перемещения диодов по кольцу, зависит от скорости вращения конструкции. то есть от прерывания LS.</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-4244</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/8/#post-4243</link>
                        <pubDate>Sun, 26 Jul 2026 19:08:52 +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/8/#post-4243</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/8/#post-4242</link>
                        <pubDate>Fri, 24 Jul 2026 08:58:34 +0000</pubDate>
                        <description><![CDATA[Это цикл для отправки 15-ти байт, никакого отношения к светодиодам не имеет:
for (int l=0; l&lt;15; l++)
SetBit(), ClearBit() - стандартные битовые операции. (0x80 &gt;&gt; bit_position) -...]]></description>
                        <content:encoded><![CDATA[<p>Это цикл для отправки 15-ти байт, никакого отношения к светодиодам не имеет:</p>
<pre contenteditable="false">for (int l=0; l&lt;15; l++)</pre>
<p><em>SetBit()</em>, <em>ClearBit()</em> - стандартные битовые операции. <em>(0x80 &gt;&gt; bit_position) </em>- это операция сдвиг вправо, упрощенно <em>(0x80 &gt;&gt; 1) </em>= В01000000.</p>
<p>5-й режим:</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 cached_bit_1 = GetBit(&amp;test_array, 2 * led_index);
        int cached_bit_2 = GetBit(&amp;test_array, 2 * led_index + 1);
        
        SetBit(&amp;test_array, 2 * led_index);
        SetBit(&amp;test_array, 2 * led_index + 1);
    
        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, 2 * led_index);
        if (cached_bit_2 == 0) ClearBit(&amp;test_array, 2 * led_index + 1);
        
        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-4242</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/7/#post-4241</link>
                        <pubDate>Thu, 23 Jul 2026 19:44:13 +0000</pubDate>
                        <description><![CDATA[здравствуйте. спасибо за пояснения. все прочитала немного разобралась. буду пробовать и экспериментировать. но можно несколько вопросов??? а как дописать так что бы в 4 цикле с верху вниз дв...]]></description>
                        <content:encoded><![CDATA[<p>здравствуйте. спасибо за пояснения. все прочитала немного разобралась. буду пробовать и экспериментировать. но можно несколько вопросов??? а как дописать так что бы в 4 цикле с верху вниз двигаются диоды как они сейчас работают,  а в 5 цикле снизу в верх двигались. как я поняла</p>
<p>SetBit(&amp;test_array, 2 * led_index);<br />SetBit(&amp;test_array, 2 * led_index + 1);</p>
<p>case 4: for (int l=0; l&lt;15; l++){SendRecSPI(test_array);} на увеличение. а на уменьшение счета как записать???? case 5: for (int l--; l&gt;15; l=0){SendRecSPI(test_array);} так? или это не грамотно??? и как организована процедура настройки вот здесь</p>
<p>void SetBit(uint8_t* ptr, int bit_index) <br />{<br />if (bit_index &lt; 0 || bit_index &gt;= 120) return;<br /><br />int byte_offset = bit_index / 8;<br />int bit_position = bit_index % 8;<br /><br />ptr |= (0x80 &gt;&gt; bit_position);<br />}<br /><br />void ClearBit(uint8_t* ptr, int bit_index) <br />{<br />if (bit_index &lt; 0 || bit_index &gt;= 120) return;<br /><br />int byte_offset = bit_index / 8;<br />int bit_position = bit_index % 8;<br /><br />ptr &amp;= ~(0x80 &gt;&gt; bit_position); //вот здесь записан 0х80 это установка начального бита В10000000 как я поняла. для уменьшения надо это изменить  на В00000001  так мыслю или не правильно???<br />}<br /><br />int GetBit(const uint8_t* ptr, int bit_index) <br />{<br />if (bit_index &lt; 0 || bit_index &gt;= 120) return 0;<br /><br />int byte_offset = bit_index / 8;<br />int bit_position = bit_index % 8;<br /><br />return (ptr &amp; (0x80 &gt;&gt; bit_position)) ? 1 : 0;<br />}</p>
<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/7/#post-4241</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/7/#post-4240</link>
                        <pubDate>Thu, 23 Jul 2026 10:19:59 +0000</pubDate>
                        <description><![CDATA[test_array[] - массив из 15 байт = 120 бит. 40 светодиодов по 3 цвета = 120 бит. Один бит в массиве соответствует одной цветовой составляющей одного из светодиодов.Функция SetBit() устанавли...]]></description>
                        <content:encoded><![CDATA[<p><em>test_array[]</em> - массив из 15 байт = 120 бит. 40 светодиодов по 3 цвета = 120 бит. Один бит в массиве соответствует одной цветовой составляющей одного из светодиодов.<br /><br />Функция <em>SetBit()</em> устанавливает определенный бит массива (от 0 до 119) в единицу. Например, после такой операции <em>SetBit(&amp;test_array, 1)</em>, первый элемент массива будет иметь вид B01000000 (нумерация битов от старшего к младшему (слева направо) ).<br /><br />При работе программы:<br /><br /></p>
<pre contenteditable="false">int sector_index = pointer;
if (sector_index == 0)
{
    test_counter++;
}

int led_index = test_counter % 20;</pre>
<p><br /><br /><em>sector_index</em> - индекс текущего сектора, когда он равен 0, то инкрементируется счетчик <em>test_counter</em>. Таким образом, <em>test_counter</em> соответствует количеству оборотов, то есть <em>test_counter</em> увеличивается на 1 после полного оборота.</p>
<p><em>led_index</em> - индекс светодиода, в данном случае от 0 до 19, увеличивается так же на каждый оборот.<br /><br />Работаем со светодиодами с индексами:</p>
<ul>
<li>2 * <em>led_index</em></li>
<li>2 * <em>led_index</em> + 1</li>
</ul>
<p>Если <em>led_index</em> = 0, то зажигаем светодиоды 0 и 1 (по схеме они на разных половинах) и так далее для других светодиодов попарно (финальная пара: 38, 39).<br /><br />Считываем текущее состояние битов:</p>
<pre contenteditable="false">int cached_bit_1 = GetBit(&amp;test_array, 2 * led_index);
int cached_bit_2 = GetBit(&amp;test_array, 2 * led_index + 1);</pre>
<p>В данном случае это не нужно, это актуально, если меняем биты в существующем изображении (массиве), чтобы потом вернуть их к изначальному значению. Выставляем биты в единицу:</p>
<pre contenteditable="false">SetBit(&amp;test_array, 2 * led_index);
SetBit(&amp;test_array, 2 * led_index + 1);</pre>
<p>Как мы выяснили, это будут биты от 0 до 39 (попарно), соответственно эти биты в массиве из 120 бит отвечают за зеленую составляющую.<br /><br />После цикла сбрасываем измененные биты в случае необходимости:</p>
<pre contenteditable="false">if (cached_bit_1 == 0) ClearBit(&amp;test_array, 2 * led_index);
if (cached_bit_2 == 0) ClearBit(&amp;test_array, 2 * led_index + 1);</pre>
<p>Для примера - чтобы здесь поменять зеленый цвет на другой, можно сделать так:</p>
<pre contenteditable="false">int led_index = test_counter % 20 + 20;</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/7/#post-4240</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/7/#post-4239</link>
                        <pubDate>Thu, 23 Jul 2026 06:38:52 +0000</pubDate>
                        <description><![CDATA[здравствуйте. коменты я имела в виду оставить как в скетче написано, пару слов после слеша к тем строкам которые можно редактирования или для понимания работы дописанного вами. не требуется ...]]></description>
                        <content:encoded><![CDATA[<p>здравствуйте. коменты я имела в виду оставить как в скетче написано, пару слов после слеша к тем строкам которые можно редактирования или для понимания работы дописанного вами. не требуется расписывать каждое действие как научный трактат в 2 тома каждую строчку. просто там в скетче видели я переводила с немецкого коменты для понимания. примерно так . вот что я имела в виду. </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/7/#post-4239</guid>
                    </item>
				                    <item>
                        <title>НА: замена макетной платы Arduino328 на ESP32WROWER-1B</title>
                        <link>https://microtechnics.ru/community/stm32/zamena-maketnoj-platy-arduino328-na-esp32wrower-1b/paged/7/#post-4238</link>
                        <pubDate>Wed, 22 Jul 2026 19:19:02 +0000</pubDate>
                        <description><![CDATA[здравствуйте. а как это другие биты? если содержит byte test_array В00000000. а из них 5 красных, 5 зеленых, 5 синих. а на деле получается зажигаются только зеленые.  а как же этим управлять...]]></description>
                        <content:encoded><![CDATA[<p>здравствуйте. а как это другие биты? если содержит byte test_array В00000000. а из них 5 красных, 5 зеленых, 5 синих. а на деле получается зажигаются только зеленые.  а как же этим управлять? а где это прописано в коде. <span>а как дальше что бы по кругу цвета перебирал не только G в этом цикле, а покругу RGB этом цикле в какой последовательности цвета  - не важно. 2 вопрос? а как сделать что бы прошел например цикл RGB сверху в низ, а потом BGR в верх и так по кругу ( цветовая последовательность не важна - какая не сложна в написании. ну и 3 вопрос? а можно в добавленных строках коменты после // написать на русском для понимания работы кода. и где в коде скорость меняется? то есть скорость переключения диодов. ну вот .... если это не сложно. то есть 1 картинка глобус, 2 картинка точки, 3 картинка полоски, в 4 цикле погонял с верху в низ и с низу в верх RGB и обратно в начала и тд. куда и что надо дописать? очень хочется понять. очень интересно. не просто загрузила и великая радость. а вот это это и есть 0x80 бит определяющий цвет?</span></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/7/#post-4238</guid>
                    </item>
							        </channel>
        </rss>
		