<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>