<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Dobrý den,</p>
    <p>jdete správnou cestou, ale ještě bych to zjednodušil. Před čase
      jsem se ptal, zda nechte někdo nějaký on-line kroužek, ale ozval
      se jen jeden, zda to děkuji, ale to je málo. Zatím jsme tedy sami
      postoupili, ale dělám to jinak a mám následující fáce.</p>
    <p>a/ otevřít notepad a naučit aspoň napsat pár písmenek.<br>
      b/ naučit se s myší a okopírovat kousek textu.<br>
      c/ připravit kus kód, kde není nic v cizím jazyku, nejsou zde
      věci, které se naučili nedávno. Začnu jen  s tím, aby se
      přahazoval řádek v kódu. Něco jako jazyk "Karel" graficky. Jen
      přehodit pořadí, aby se pochopila posloupnost.<br>
      d/ další příklad volání metody s hodnotou třeba psun(5);<br>
      e/... proměnné, cykly,... zase tímto jednoduchým stylem.</p>
    <p>... objekty taky jednoduše. Neboli osobně bych vyházel všechny
      define, založil to na malé třídě. Začít třeba se základem proměnné
      v objektu tzv. instanční. Až následně do složitějších konstrukcí,
      ale opět i složité konstrukce na jednoduchém příkladu tj. bez
      ostatních věcí co se mohlo zapomenout.... . Je to o tom to dělat
      pomalu. Možná máte větší děti nebo toho znají více... .<br>
    </p>
    <p>Jirka<br>
    </p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">Dne 30.03.2021 v 20:08 Pavel Hudecek
      napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:4J.RhGha.hknZSSMMvy.1WOsaf@seznam.cz">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <style>@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}.MsoChpDefault
        {mso-style-type:export-only;}div.WordSection1
        {page:WordSection1;}</style>
      <div class="WordSection1">
        <p class="MsoNormal">Dobrý den všem,</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Udělal jsem malou ukázku programu v C++ pro
          děti na kroužek, prosím o zhodnocení, zda v tom nejsou nějaký
          nevhodný věci:-)</p>
        <p class="MsoNormal">(celé je to pro Xnano416 mající 1 LED a 1
          tlačítko)</p>
        <p class="MsoNormal">Otázka je, jak se to zmrší posláním
          v mailu…</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">#include <avr/io.h></p>
        <p class="MsoNormal">#include <avr/interrupt.h></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">#define F_CPU                
          (20000000UL/6UL)</p>
        <p class="MsoNormal">#define
          LED_bit                               5 // LEDka</p>
        <p class="MsoNormal">#define TL_bit                  4 //
          tlačítko</p>
        <p class="MsoNormal">#define TEST_bit             3 // test
          přerušení osciloskopem</p>
        <p class="MsoNormal">#define TEST_bit2           2 // test
          čekání osciloskopem</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">#define TL_jeStisk          ((PORTB.IN
          & (1<<TL_bit)) == 0)</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">volatile unsigned int       ms=0;</p>
        <p class="MsoNormal">volatile unsigned char    msSync=0;</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">void cekej(unsigned int n); // prototyp
          funkce - jen aby za ním bylo vidět jak funkce vypadá</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">class clTlac { //
          +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">public:</p>
        <p class="MsoNormal">                clTlac() { // konstruktor -
          spusti se pri vytvoreni objektu ----------------------------</p>
        <p class="MsoNormal">                               
          PORTB.PIN4CTRL = PORT_PULLUPEN_bm;</p>
        <p class="MsoNormal">                               // zapnout
          pull-up pro tlačítko</p>
        <p class="MsoNormal">                }</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">                void cek() { // cekani na
          stisk --------------------------------------------------------</p>
        <p class="MsoNormal">                              
          while(TL_jeStisk) cekej(0);</p>
        <p class="MsoNormal">                              
          while(!TL_jeStisk) cekej(0);</p>
        <p class="MsoNormal">                }</p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">                void stisk(); // udalost
          stisku tlacitka - jen deklarace</p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">                bool stav=false;</p>
        <p class="MsoNormal">};</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">class clLED { //
          ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">                friend void cekej(unsigned
          int n);</p>
        <p class="MsoNormal">                // friend smí i do private</p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">public:</p>
        <p class="MsoNormal">                const unsigned int PMAX =
          F_CPU / 1000UL;</p>
        <p class="MsoNormal">                const unsigned int P1 =
          PMAX / 100;       </p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">                clLED() { // konstruktor -
          spusti se pri vytvoreni objektu -----------------------------</p>
        <p class="MsoNormal">                               PORTB.OUTSET
          = 1<<LED_bit; // nastavit na 1, aby LEDka nesvítila od
          začátku</p>
        <p class="MsoNormal">                               PORTB.DIR =
          (1<<LED_bit) | (1<<TEST_bit) |
          (1<<TEST_bit2) ; // zapnout výstupy pro LED</p>
        <p class="MsoNormal">                              
          PORTB.PIN5CTRL = PORT_INVEN_bm; // Invertovat, aby LED svitila
          pri 1 (1 v datech)</p>
        <p class="MsoNormal">                               </p>
        <p class="MsoNormal">                              
          PORTMUX_CTRLC = PORTMUX_TCA02_ALTERNATE_gc;</p>
        <p class="MsoNormal">                              
          TCA0_SINGLE_CTRLA = TCA_SINGLE_CLKSEL_DIV1_gc;</p>
        <p class="MsoNormal">                              
          TCA0_SINGLE_CTRLB = TCA_SINGLE_CMP2EN_bm |
          TCA_SINGLE_WGMODE_SINGLESLOPE_gc;</p>
        <p class="MsoNormal">                              
          TCA0_SINGLE_CTRLC = 0;</p>
        <p class="MsoNormal">                              
          TCA0_SINGLE_CTRLD = 0;</p>
        <p class="MsoNormal">                              
          TCA0_SINGLE_PER = F_CPU / 1000UL;</p>
        <p class="MsoNormal">                              
          TCA0_SINGLE_INTCTRL = TCA_SINGLE_OVF_bm;</p>
        <p class="MsoNormal">                              
          TCA0_SINGLE_INTFLAGS = TCA_SINGLE_OVF_bm;</p>
        <p class="MsoNormal">                              
          TCA0_SINGLE_CMP2 = P1;</p>
        <p class="MsoNormal">                              
          TCA0_SINGLE_CTRLA |= TCA_SINGLE_ENABLE_bm;</p>
        <p class="MsoNormal">                              
          __asm__("sei");</p>
        <p class="MsoNormal">                }</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">                void svitit(uint8_t proc) {
          // rozsvitit na zadane % -----------------------------------</p>
        <p class="MsoNormal">                              
          TCA0_SINGLE_CMP2 = P1 * proc;</p>
        <p class="MsoNormal">                               tim = 0;</p>
        <p class="MsoNormal">                }</p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">                void blikat(unsigned int t,
          unsigned char h, unsigned char l) { // ---------------------</p>
        <p class="MsoNormal">                               tim  = t;</p>
        <p class="MsoNormal">                               cnt  = 0;</p>
        <p class="MsoNormal">                               pwmH = P1 *
          h;</p>
        <p class="MsoNormal">                               pwmL = P1 *
          l;</p>
        <p class="MsoNormal">                              
          TCA0_SINGLE_CMP2 = pwmH;</p>
        <p class="MsoNormal">                }</p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">                unsigned int
          procToPWM(unsigned char n) { // prevod procent na PWM
          ---------------------</p>
        <p class="MsoNormal">                               return P1 *
          n;</p>
        <p class="MsoNormal">                }</p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">private:</p>
        <p class="MsoNormal">                unsigned int pwmL = 0, pwmH
          = PMAX, tim  = 0, cnt  = 0;</p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">                void togglePwm() { //
          prehodit PWM z low na hi / naopak
          --------------------------------</p>
        <p class="MsoNormal">                               if
          (TCA0_SINGLE_CMP2 == pwmH)</p>
        <p class="MsoNormal">                              
          TCA0_SINGLE_CMP2 = pwmL;</p>
        <p class="MsoNormal">                               else</p>
        <p class="MsoNormal">                              
          TCA0_SINGLE_CMP2 = pwmH;</p>
        <p class="MsoNormal">                }</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">};</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">// Tady se podle tříd clTlac a clLED
          vytvoří objekty Tlacitko a Led. To spustí jejich konstruktory.</p>
        <p class="MsoNormal">clTlac     Tlacitko;</p>
        <p class="MsoNormal">clLED     Led;</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">void cekej(unsigned int n) { //
          ==============================================</p>
        <p class="MsoNormal">                static bool
          tlacStickPred=false;</p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">                __asm__("cli");</p>
        <p class="MsoNormal">                ms=0;</p>
        <p class="MsoNormal">                __asm__("sei");</p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">                while(1) {</p>
        <p class="MsoNormal">                               PORTB.OUTTGL
          = (1<<TEST_bit2);</p>
        <p class="MsoNormal">                               </p>
        <p class="MsoNormal">                               if
          (msSync==1) { // ----------------------------------------</p>
        <p class="MsoNormal">                                              
          msSync=0;</p>
        <p class="MsoNormal">                                              
        </p>
        <p class="MsoNormal">                                              
          Tlacitko.stav = TL_jeStisk;</p>
        <p class="MsoNormal">                                              
        </p>
        <p class="MsoNormal">                                              
          if (Led.tim>0) { // je zapnute blikani</p>
        <p class="MsoNormal">                                                              
          if (++Led.cnt>Led.tim) {</p>
        <p class="MsoNormal">                                                                              
          Led.cnt=0;</p>
        <p class="MsoNormal">                                                                              
          Led.togglePwm();</p>
        <p class="MsoNormal">                                                              
          }</p>
        <p class="MsoNormal">                                              
          }</p>
        <p class="MsoNormal">                                              
        </p>
        <p class="MsoNormal">                               } // if
          (msSync==1)</p>
        <p class="MsoNormal">                               </p>
        <p class="MsoNormal">                               if
          (!tlacStickPred && Tlacitko.stav) { // právě bylo
          stisknuto, vyvolat událost</p>
        <p class="MsoNormal">                                              
          Tlacitko.stisk();</p>
        <p class="MsoNormal">                               }</p>
        <p class="MsoNormal">                              
          tlacStickPred=Tlacitko.stav;</p>
        <p class="MsoNormal">                               </p>
        <p class="MsoNormal">                              
          __asm__("cli");</p>
        <p class="MsoNormal">                               if
          (ms>=n) break;</p>
        <p class="MsoNormal">                              
          __asm__("sei");</p>
        <p class="MsoNormal">                } // while(1)</p>
        <p class="MsoNormal">                __asm__("sei");</p>
        <p class="MsoNormal">}</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">// implementace obsluhy události stisk
          tlačítka</p>
        <p class="MsoNormal">void clTlac::stisk() { //
          ===================================================</p>
        <p class="MsoNormal">                static bool b=false;</p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">                // zatímco v mainu se čekat
          musí, tady se naopak nesmí</p>
        <p class="MsoNormal">                if (b) {</p>
        <p class="MsoNormal">                              
          Led.blikat(200, 100, 0);</p>
        <p class="MsoNormal">                } else {</p>
        <p class="MsoNormal">                              
          Led.blikat(200, 60, 30);</p>
        <p class="MsoNormal">                }</p>
        <p class="MsoNormal">                b = !b;</p>
        <p class="MsoNormal">}</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">int main(void) { //
          ###########################################################</p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">                // tady nic neni:
          inicializace je v konstruktorech</p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">                Led.blikat(100, 70, 20);</p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">                while (1) { //
          ---------------------------------------------------</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">                               // je jedno
          co tu je, hlavně že to obsahuje čekání</p>
        <p class="MsoNormal">                               cekej(100);</p>
        <p class="MsoNormal">                              
          Tlacitko.cek();</p>
        <p class="MsoNormal">                               </p>
        <p class="MsoNormal">                }</p>
        <p class="MsoNormal">}</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">ISR (TCA0_OVF_vect) { //
          =====================================================</p>
        <p class="MsoNormal">                PORTB.OUTTGL =
          (1<<TEST_bit);</p>
        <p class="MsoNormal">                ms++;</p>
        <p class="MsoNormal">                msSync=1;</p>
        <p class="MsoNormal">                </p>
        <p class="MsoNormal">                TCA0_SINGLE_INTFLAGS =
          TCA_SINGLE_OVF_bm;</p>
        <p class="MsoNormal">}</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Díky,</p>
        <p class="MsoNormal">PH</p>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list  -  sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
    </blockquote>
  <div id="DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2">
<br /><br />
<hr style='border:none; color:#909090; background-color:#B0B0B0; height: 1px; width: 99%;' />
<table style='border-collapse:collapse;border:none;'>
        <tr>
                <td style='border:none;padding:0px 15px 0px 8px'>
                        <a href="http://www.avg.com/internet-security">
                                <img border=0 src="http://static.avast.com/emails/avg-mail-stamp.png" alt="Logo AVG" />
                        </a>
                </td>
                <td>
                        <p style='color:#3d4d5a; font-family:"Calibri","Verdana","Arial","Helvetica"; font-size:12pt;'>
                                Tento e-mail byl zkontrolován na viry antivirovým softwarem AVG.
                                <br><a href="http://www.avg.com/internet-security">www.avg.cz</a>
                        </p>
                </td>
        </tr>
</table>
<br />
<a href="#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2" width="1" height="1"> </a></div></body>
</html>