<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=58&amp;t=16432&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-01-20T16:38:43+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=16432&amp;mode</id>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-01-20T16:38:43+01:00</updated>
<published>2017-01-20T16:38:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180344#p180344</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180344#p180344"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180344#p180344"><![CDATA[
<img src="https://uploads.tapatalk-cdn.com/20170120/db189426afec82a865acf25ec068dd4b.jpg" alt="Obrazek" /><br /><br />Wysłane z mojego HTC Desire 510 przy użyciu Tapatalka<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 7 minutach ]</span></strong><br /><br />z płytki wyrzuciłem LM-y i zastąpiłem je stabilizatorami, które automatycznie, bez potencjometru regulują namięcie do 5V. osobny stabilizator na elektronikę, a osobny do zasilania serwa.Gdy tak uczyniłem, to wszystko pięknie zadziałało. Ubolewam tylko,że na przetworniczce Pana Mirka to nie chodzi. Tak naprawdę, to szkatułkę polutowałem i poskładałem dzień przed wigilią , wcześniej męczyłem się trochę z układem, ponieważ po przelutowaniu całego układu z płytki prototypowej na uniwersalną,  nie chciało mi działać serwo. Ale na szczęście wszystko się udało zrobić na czas. Było oczywiście wyświetlane pytanie, jednak zamiast napisu -czy za mnie wyjdziesz- był napis- kochasz mnie?- tak było prościej, ponieważ wcześniejszy napis nie mieścił mi się na ekranie. Oczywiście moja narzeczona od razu zorientowała się jak ma obsłużyć szkatułkę, aby dostać saię do pierścionka. Polały się łzy wzruszenia. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Bardzo Wam dziękuję za pomoc w Tym projekcie. Dzięki wam cały plan się powiódł, a zwłaszcza dzięki bardzo dużej pomocy Darki (Daro 69) .<br /><br /><br /><br />Sam mechanizm serwa jest bardzo prototypowy i zbudowałem go z długopisu, który po przekręceniu wysuwa wkład . Działa to na zasanie zatrzasku , podobnie jak w masce samochodowej. Czyli otwieramy na przyciski, wtedy wkład się chowa w długopis i sprężyna lekko unosi wieczko szkatułki, po czym zaraz wkłady wysuwa się ponownie i szkatułka jest otwarta. Mechanizm zamykania działa bez problemu, specjalna blaszka w wieczki podczas zamykania wsuwa wkład długopisu i zatrzaskuje zamek. Wkład długopisu zastąpiłem lutowanym na twardo gwoździem, odpowiednio przypiłowanym. Może nie wygląda estetycznie i jest klejone tzw termoglutem, ale działa znakomicie, a poza tym cały mechanizm jest ukryty pod drewnianą deseczką z 8mm otworem. Na płytce zajduje się przełącznik, którym jednym przesunięciem mogę przełączać między zasilaniem z baterii, a zasilaczem. Bateria teraz nie jest używana, ponieważ dosyć szybko się wyładowuje, jednak była bardzo pomocna w samą wigilię, ponieważ wręczając szkatułkę, nie musiałem jej podłączać pod zasilacz. Wiem,że dużo jest jeszcze do poprawy, jednak jestem początkujący i nie znam się dobrze na elektronice. Na pewno będą poprawki w najbliższym czasie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 20 sty 2017, o 16:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-01-20T16:37:32+01:00</updated>
<published>2017-01-20T16:37:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180343#p180343</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180343#p180343"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180343#p180343"><![CDATA[
<img src="https://uploads.tapatalk-cdn.com/20170120/a7da090cbe4cf35250dabc6f334663c9.jpg" alt="Obrazek" /><img src="https://uploads.tapatalk-cdn.com/20170120/63c5d966443342550a0c87773be87e9e.jpg" alt="Obrazek" /><br /><br />Wysłane z mojego HTC Desire 510 przy użyciu Tapatalka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 20 sty 2017, o 16:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-01-20T16:35:46+01:00</updated>
<published>2017-01-20T16:35:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180342#p180342</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180342#p180342"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180342#p180342"><![CDATA[
<img src="https://uploads.tapatalk-cdn.com/20170120/61f369ba7dc81904cae778c424ea07b5.jpg" alt="Obrazek" /><img src="https://uploads.tapatalk-cdn.com/20170120/fff43871360712a17d549cedc076da5d.jpg" alt="Obrazek" /><img src="https://uploads.tapatalk-cdn.com/20170120/86e2480481afbaf4fe14029089051958.jpg" alt="Obrazek" /><br /><br />Wysłane z mojego HTC Desire 510 przy użyciu Tapatalka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 20 sty 2017, o 16:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-01-20T16:34:22+01:00</updated>
<published>2017-01-20T16:34:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180341#p180341</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180341#p180341"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180341#p180341"><![CDATA[
<img src="https://uploads.tapatalk-cdn.com/20170120/875487686f4802da275ebbd4e6e3d924.jpg" alt="Obrazek" /><br /><br />Wysłane z mojego HTC Desire 510 przy użyciu Tapatalka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 20 sty 2017, o 16:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-01-20T16:33:50+01:00</updated>
<published>2017-01-20T16:33:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180340#p180340</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180340#p180340"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180340#p180340"><![CDATA[
<img src="https://uploads.tapatalk-cdn.com/20170120/7db20aadf67a2e34251f2c56bb449601.jpg" alt="Obrazek" /><br /><br />Wysłane z mojego HTC Desire 510 przy użyciu Tapatalka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 20 sty 2017, o 16:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-01-20T16:32:44+01:00</updated>
<published>2017-01-20T16:32:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180339#p180339</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180339#p180339"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180339#p180339"><![CDATA[
<img src="https://uploads.tapatalk-cdn.com/20170120/15c0bbd3d98f1027ed3cb4e1b40c7014.jpg" alt="Obrazek" /><br /><br />Wysłane z mojego HTC Desire 510 przy użyciu Tapatalka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 20 sty 2017, o 16:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2017-01-20T16:03:19+01:00</updated>
<published>2017-01-20T16:03:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180337#p180337</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180337#p180337"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=180337#p180337"><![CDATA[
cześć. wracam po dłuższej przerwie i już piszę Wam co z moją szkatułką. Wszystko się udało, projekt został zakończony, niestety nie miałem ostatnio czasu na zaglądanie tutaj, ponieważ po świętach mona narzeczona zagoniła mnie od razu do remontu łazienki <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />. Co do szkatułki. to zaraz Wam prześlę zdjęcia. Elektronikę robiłem na wierconej płytce uniwersalnej, Zasilanie z baterii 9v, lub po przełączeniu przełącznika na zasilacz 12 V. Założenie było taki, aby była przetwoorniczka Pana Mirka, niestety żle ją podłączyłem i chyba ją spaliłem. Postanowiłem zrobić zasilanie na układach stabilizujących LM317, niestety nie działały zbyt stabilnie z rezystorami, kondensatorami i potencjometrem. Podczas pracy serwa napięcie było bardzo nie stabilne i przygasał ekran.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 20 sty 2017, o 16:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-11-12T22:54:28+01:00</updated>
<published>2016-11-12T22:54:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174560#p174560</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174560#p174560"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174560#p174560"><![CDATA[
no dobra,  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />to poprawiony troszkę kod. <br />także poprawione wyłączanie budzika.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Przecież też potrzebna funkcja a nie zwykłe if,<br />bo po wyłączeniu budzika przestawiało się od razu menu.<br />dopisana funkcja klawisz i poprawione to nieszczęsne 0. - no co.  <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" />   <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br />main.c<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: październik 2016                           Author: Wojtek i koledzy z forum &quot;ATNEL&quot;. ;)<br /> *<br /> *  ATmega_32 , ATmega_16 , 18,432 MHz ,<br /> *<br /> *  Podswietlanie LCD timer_0 - PWM                -&gt; OC0  PB3.<br /> *  Serwo +-90stopni na timer_1 fast PWM tryb_14,  -&gt; OC1A PD5.<br /> *  Czas na timer_2 CTC.<br /> *<br /> *  ------------Pozostale piny do ustawienia w oryginalnym pliku LCD, 1Wire, oraz moje.h --------------.<br /> *obecn ustawienia:<br /> *  lcd........<br /> *  rs PB0<br /> *  rw PB1<br /> *  e PB2<br /> *  D_7 PA7<br /> *  D_6 PA6<br /> *  D_5 PA5<br /> *  D_4 PA4<br /> *                  //anoda lcd przez tr PNP z PB3/ zmieniona w pliku moje.c na NPN, ze wzgledu na ATB.<br /> *<br /> *  ds18b20<br /> *  onewire.h PA0<br /> *<br /> *  Buzzer PD7<br /> *  Serwo PD5<br /> *<br /> *  klawisze:<br /> *  K_1 PC0<br /> *  K_2 PC1<br /> *  K_3 PC2<br /> *  K_4 PC3<br /> *<br /> *  Diody do podswietlenia wnetrza PC4 , PC5 .<br /> *<br /> *              NIEWATPLIWIE PROGRAM WYMAGA JESZCZE POPRAWEK, ALE JUZ JEST SPRAWNY :) .<br /> */<br />/*---------------------------------pliki nagłowkowe--------------------------------------------------*/<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;string.h&gt;<br /><br />/*----------------------------------pliki mk_xxx-----------------------------------------------------*/<br />#include &quot;1Wire/ds18x20.h&quot;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />/*-----------------------------------pliki moje------------------------------------------------------*/<br />#include &quot;moje.h&quot;<br /><br />/*---------------------------------------------------------------------------------------------------*/<br />/*****************************************************************************************************/<br /><br />int main(void)<br />    {<br /><br />    ustaw_timer_0(); /*funkvja ustawia imer 0 (pwm do podświetlania LCD)*/<br />    ustaw_timer_1(); /*funkcja ustawia timer do obslugi serwa na OC1A*/<br />    ustaw_timer_2(); /*funkcja ustawia timer 1 (CTC do odliczania czasu)*/<br />    ustaw_wy_we(); /*funkcja ustawia piny i porty wejśc i wyjś*/<br /><br />    lcd_init(); /*inicjalizacja wyświetlacza*/<br /><br />    /*-------------------------znaki wlasne niezmienne*/<br />    lcd_defchar(0x87, alarm_znak);<br />    lcd_defchar(0x80, stc);<br />    lcd_defchar(0x81, lit_L);<br /><br />    czujniki_cnt = search_sensors();<br /><br />    sei();<br /><br />    /*----------------------------------------------------------------------------------------------*/<br />    wczytaj_czasy(); /*odczyt z eeprom do ram, zapisany budzik i ostatnia godzina przed wylaczeniem*/<br /><br />    tak = eeprom_read_byte(&amp;ee_tak);/*odczytanie odpowiedzi z eeprom*/<br /><br />    /*---------------------------------wstepne rozjasnianie LCD--------*/<br />    while (OCR0 &lt; 250)<br />{<br />jasniej();<br />_delay_ms(50);<br />}<br /><br />    /*---------------------------------informacja o wczytaniu ustawien-*/<br />    for (uint8_t j = 0; !j; j++)<br />{<br />for (uint8_t i = 0; i &lt; 16; i++)<br />    {<br />    lcd_locate(0, 15 - i);<br />    lcd_str(&quot;..WCZYTYWANIE...&quot;);<br />    _delay_ms(200);<br />    }<br />_delay_ms(500);<br />for (uint8_t i = 0; i &lt; 16; i++)<br />    {<br />    lcd_locate(1, 15 - i);<br />    lcd_str(&quot;.....NASTAW.....&quot;);<br />    _delay_ms(200);<br />    }<br />j = 1;<br />}<br /><br />    /*----------------------------------------------------------------------------------------------*/<br />    /*    poczatek programu -<br />     * na poczatku program sprawdza czy nie jest wcisniety klawisz do przywrocenia oczekiwania na odpowiedz.<br />     * jezeli jest wcisniety, to uznaje ze nie bylo odpowiedzi na pytanie i zaczyna zabawe od nowa.<br />     * Wyswietla pytanie &quot;CZY TO WOJTKA&quot; i czeka na wcisniecie klawisza TAK, by wyswietlic napis :<br />     * &quot;ZAAKCEPTOWANY :)&quot; i przejsc do zegarka.<br />     * Ewentualne wcisniecie klawisza NIE,<br />     * powoduje oczekiwanie i wyswietlenie napisu &quot;ZLA ODPOWIEDZ :(&quot;.<br />     * -------------------------------------------------------------------------------------------- */<br />    /*PRZYWRACANIE OCZEKIWANIA NA ODPOWIEDZ: &quot;PRZYCISNIETY KLAWISZ 'NIE' W TRAKCIE ZALACZANIA ZASILANIA&quot;*/<br /><br />    if (K_1_PRESS)<br />{ /*przywracanie braku odpowiedzi gdyby niechcacy sie nacisnelo*/<br />tak = 1; /*zmienna w ram wyzerowana*/<br />eeprom_write_byte(&amp;ee_tak, tak);/*zapis do eeprom ee_tak, wartosci zmiemnnej tak*/<br />lcd_locate(0, 0);<br />lcd_str(&quot;RESET NIE :(&quot;);/*info na LCD o przywroceniu pytania*/<br />}<br />    _delay_ms(1000);<br />    lcd_cls();<br /><br />    while (tak != 2)<br />{ /*jezeli ee_tak !=2, (brak zgody)..powtarza sie pytanie*/<br /><br />/*-------------------------przykladowy napis*/<br />lcd_locate(0, 0);<br />lcd_str(&quot;CZY TO WOJTKA  ? &quot;);<br /><br />/*---------------------sugerowane odpowiedzi*/<br />lcd_locate(1, 13);<br />lcd_str(&quot;TAK&quot;);<br />lcd_locate(1, 0);<br />lcd_str(&quot;NIE&quot;);<br /><br />/*--------------------zaznaczenie odpowiedzi*/<br /><br />if (K_4_PRESS)<br />    { /*klawisz akceptacji*/<br />    lcd_cls();<br />    lcd_locate(0, 0);<br />    lcd_str(&quot;ZAAKCEPTOWANY :)&quot;);<br />    _delay_ms(3000);<br />    tak = 2; /*odpowiedz TAK daje wartosc 2 */<br />    eeprom_write_byte(&amp;ee_tak, tak);/* zapis wartosci 2 ze zmiennej tak do ee_tak */<br />    otworz();/*funkcja otwierajaca szkatulke*/<br />    }<br />if (K_1_PRESS)<br />    { /*klawisz bledny*/<br />    lcd_locate(0, 0);<br />    lcd_cls();<br />    lcd_str(&quot;Z&quot; &quot;\x81&quot; &quot;A ODPOWIEDZ :(&quot;); /*\x83 to litera Ł */<br />    _delay_ms(3000);<br />    }<br />} /*petla wykonuje sie do momentu wcisniecia TAK, lub wylaczenia zasilania. :)*/<br /><br />    DDR_D_CZER |= D_CZER; /*wstepne zgaszenie wnetrza*/<br />    DDR_D_NIEB |= D_NIEB;<br /><br />    /*----------------------------------------------------------------------------------------------*/<br />    /***************************************PETLA GLOWNA PROGRAMU************************************/<br />    while (1)<br />{<br /><br />licz_czas();<br />pilnuj_budzik();<br /><br />if (flag_serwo)<br />    {<br />    serwo();<br />    flag_serwo = 0;<br />    }<br /><br />/*-----------------------------zapis zmiennych do bufora_w ram-LCD- - ---------------------- */<br /><br />/*znaki wlasne w LCD zalezne od biezacego czasu, wybierane z tablicy znakow wlasnych ram*/<br />lcd_defchar(0x81, cyfry&#91;czasy.cz_go / 10&#93;);<br />lcd_defchar(0x82, cyfry&#91;czasy.cz_go % 10&#93;);<br />lcd_defchar(0x83, cyfry&#91;czasy.cz_mi / 10&#93;);<br />lcd_defchar(0x84, cyfry&#91;czasy.cz_mi % 10&#93;);<br />lcd_defchar(0x85, cyfry&#91;czasy.cz_se / 10&#93;);<br />lcd_defchar(0x86, cyfry&#91;czasy.cz_se % 10&#93;);<br /><br />/*.....*....do bufora LCD czas zegarka.......................................*/<br /><br />/*zwykla czcionka................................*/<br />//uint_do_buf(czasy.cz_go, poz_y.cz_go, poz_x.cz_go);<br />//napis_do_buf(1, &quot;:&quot;, poz_y.cz_go, poz_x.cz_go + 2);<br />//uint_do_buf(czasy.cz_mi, poz_y.cz_mi, poz_x.cz_mi);<br />//napis_do_buf(1, &quot;:&quot;, poz_y.cz_mi, poz_x.cz_mi + 2);<br />//uint_do_buf(czasy.cz_se, poz_y.cz_se, poz_x.cz_se);<br />/*.......powyzsza czcionka oryginalna zamieniona ponizej na wlasna...........*/<br /><br />/*czcionka pogrubiona........................... */<br />napis_do_buf(1, &quot;\x81&quot;, poz_y.cz_go, poz_x.cz_go);<br />napis_do_buf(1, &quot;\x82&quot;, poz_y.cz_go, poz_x.cz_go + 1);<br /><br />napis_do_buf(1, &quot;:&quot;, poz_y.cz_go, poz_x.cz_go + 2);<br /><br />napis_do_buf(1, &quot;\x83&quot;, poz_y.cz_mi, poz_x.cz_mi);<br />napis_do_buf(1, &quot;\x84&quot;, poz_y.cz_mi, poz_x.cz_mi + 1);<br /><br />napis_do_buf(1, &quot;:&quot;, poz_y.cz_mi, poz_x.cz_mi + 2);<br /><br />napis_do_buf(1, &quot;\x85&quot;, poz_y.cz_se, poz_x.cz_se);<br />napis_do_buf(1, &quot;\x86&quot;, poz_y.cz_se, poz_x.cz_se + 1);<br /><br />/*......*...dzien, i budzik do bufora LCD....................................*/<br /><br />napis_do_buf(8, dni&#91;czasy.cz_dz&#93;, poz_y.cz_dz, poz_x.cz_dz);<br />uint_do_buf(czasy.b_mi, poz_y.b_mi, poz_x.b_mi);<br />napis_do_buf(1, &quot;:&quot;, poz_y.b_go, poz_x.b_go + 2);<br /><br />/*-------jezeli budzik wylaczony to wyswietlaj znaki -&gt; &quot;--:--&quot;*/<br />if (czasy.b_go == 24)<br />    napis_do_buf(5, &quot;--:--&quot;, poz_y.b_go, poz_x.b_go);<br />else<br />    uint_do_buf(czasy.b_go, poz_y.b_go, poz_x.b_go);<br />napis_do_buf(1, &quot;\x87&quot;, 1, 10); /*znak dzwoneczek*/<br /><br />pozycja_temp(0, 9); /*zapis do bufora LCD pomiaru temperatury co 15sek, we wskazanej pozycji y x */<br /><br />if (flag_mrygaj)<br />    {/*mryganie ustawianych czasow pomiędzy pelnymi sekundami*/<br /><br />    if (menu != podstawowe)<br />{ /*poza menu podstawowym*/<br /><br />uint8_t ile;<br />if (menu == us_dz_tyg)<br />    {<br />    ile = 8; /*szerokosc znaku do bufora zamiast napisu dnia*/<br />    }<br />else<br />    ile = 2; /*szerokosc pozostalych zmiennych czasu -mrygajace dwie cyfry*/<br /><br />napis_do_buf(ile, (&quot;========&quot;), *(menu + &amp;poz_y.b_go), /*zapis do bufora lcd*/<br />*(menu + &amp;poz_x.b_go));<br />}<br />    }<br />/*------------------------------------wysylanie bufora na LCD--------------------------------*/<br />odswiez_lcd(flag_odswiez_LCD, string_lcd); /*wyslanie dwuch wierszy bufora na LCD*/<br /><br />/*------------------------------------podswietlanie wnetrza----------------------------------*/<br />diody_r_b(240, 250); /*zakresy podswietlania wnetrza:--blu----20,0----blu&amp;red---21,0---red---*/<br /><br />/*----------------------------------------obsluga klawiszy-----------------------------------*/<br />/*-------------------------------------------------------------------------------------------*/<br />if (menu == podstawowe)<br />    {<br /><br />    if (alarm)<br />{ /*jezeli wlaczyl sie alarm, nacisniecie dowolnego klawisza wylacza.*/<br /><br />piszcz(); /*alarm!*/<br /><br />/*wylacz alarm*/<br />dzialanie_klawisza(K_1_PRESS, alarm_stop, 10, piszcz);<br />dzialanie_klawisza(K_2_PRESS, alarm_stop, 10, piszcz);<br />dzialanie_klawisza(K_3_PRESS, alarm_stop, 10, piszcz);<br />dzialanie_klawisza(K_4_PRESS, alarm_stop, 10, piszcz);<br />}<br /><br />    else<br />{ /*jezeli alarm wylaczony to klawisze obsluguja funkcje;-*/<br /><br />/*----dzialanie_klawisza(  KLAWISZ,   f_1(wykonana raz),    zwloka*200ms ,    f_2(wykonywana cyklicznie co 200ms)  );*/<br /><br />dzialanie_klawisza( K_1_PRESS, otworz, 10, piszcz); /*otwieranie i dzwiek*/<br />dzialanie_klawisza( K_2_PRESS, ciemniej, 10, ciemniej); /*jasniej, (podswietlanie LCD)*/<br />dzialanie_klawisza( K_3_PRESS, jasniej, 10, jasniej); /*ciemniej, (podswietlanie LCD)*/<br />dzialanie_klawisza( K_4_PRESS, nastepne_menu, 10, piszcz);/*nastepne menu, buzzer*/<br />}<br />    }<br />else if (menu == us_bu_go)<br />    { /* ustawianie - budzik godziny */<br />    dzialanie_klawisza(K_1_PRESS, poprzednie_menu, 10, piszcz);<br />    dzialanie_klawisza(K_2_PRESS, odejmij, 10, odejmij); /*odejmij ustawiane zmienne*/<br />    dzialanie_klawisza(K_3_PRESS, dodaj, 10, dodaj); /*dodaj ustawiane zmienne*/<br />    dzialanie_klawisza(K_4_PRESS, nastepne_menu, 10, piszcz);<br />    }<br />else if (menu == us_bu_mi)<br />    { /* ustawianie - budzik minuty*/<br />    dzialanie_klawisza(K_1_PRESS, poprzednie_menu, 10, piszcz);<br />    dzialanie_klawisza(K_2_PRESS, odejmij, 10, odejmij);<br />    dzialanie_klawisza(K_3_PRESS, dodaj, 10, dodaj);<br />    dzialanie_klawisza(K_4_PRESS, nastepne_menu, 10, piszcz);<br />    }<br />else if (menu == us_dz_tyg)<br />    { /* ustawianie - dzien tygodnia*/<br />    dzialanie_klawisza(K_1_PRESS, poprzednie_menu, 10, piszcz);<br />    dzialanie_klawisza(K_2_PRESS, odejmij, 10, odejmij);<br />    dzialanie_klawisza(K_3_PRESS, dodaj, 10, dodaj);<br />    dzialanie_klawisza(K_4_PRESS, nastepne_menu, 10, piszcz);<br />    }<br />else if (menu == us_go)<br />    { /*ustawianie - godzin*/<br />    dzialanie_klawisza(K_1_PRESS, poprzednie_menu, 10, piszcz);<br />    dzialanie_klawisza(K_2_PRESS, odejmij, 10, odejmij);<br />    dzialanie_klawisza(K_3_PRESS, dodaj, 10, dodaj);<br />    dzialanie_klawisza(K_4_PRESS, nastepne_menu, 10, piszcz);<br />    }<br />else if (menu == us_mi)<br />    { /*ustawianie - minut*/<br />    dzialanie_klawisza(K_1_PRESS, poprzednie_menu, 10, piszcz);<br />    dzialanie_klawisza(K_2_PRESS, odejmij, 10, odejmij);<br />    dzialanie_klawisza(K_3_PRESS, dodaj, 10, dodaj);<br />    dzialanie_klawisza(K_4_PRESS, nastepne_menu, 10, piszcz);<br />    }<br />else if (menu == us_sek_res)<br />    { /*reset sekund */<br />    dzialanie_klawisza(K_1_PRESS, poprzednie_menu, 10, piszcz);<br />    dzialanie_klawisza(K_2_PRESS, odejmij, 10, odejmij);<br />    dzialanie_klawisza(K_3_PRESS, dodaj, 10, dodaj);<br />    dzialanie_klawisza(K_4_PRESS, nastepne_menu, 10, piszcz);<br />    }<br /><br />} // KONIEC PETLI GLOWNEJ<br />    } // KONIEC MAIN<br />    /*====================================ALE NIE KONIEC ZABAWY=========================================*/[/syntax]<br /><br />moje.c<br />[syntax=c]/*<br /> * moje.c<br /> *<br /> *  Created on: 23 paź 2016<br /> *      Author: Darek<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;string.h&gt;<br /><br />/********************************************************************************************pliki mk_xxx*/<br />#include &quot;1Wire/ds18x20.h&quot;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />/**********************************************************************************************moje pliki*/<br />#include &quot;moje.h&quot;<br /><br />/**************************************************************************tablice znaków LCD- definicje*/<br />uint8_t stc&#91;&#93; =<br />    {<br />    14, 10, 14, 32, 32, 32, 32, 32<br />    }; /*znak stopnia*/<br /><br />uint8_t lit_L&#91;9&#93; =<br />    {<br />    16, 16, 20, 24, 16, 16, 31, 32<br />    };<br /><br />uint8_t cyfry&#91;10&#93;&#91;9&#93; =<br />    {<br />{<br />31, 27, 27, 27, 27, 27, 27, 31<br />}, //0<br />{<br />12, 28, 28, 12, 12, 12, 12, 12<br />}, //1<br />{<br />31, 31, 3, 31, 31, 24, 31, 31<br />}, //2<br />{<br />31, 31, 3, 31, 31, 3, 31, 31<br />}, //3<br />{<br />27, 27, 27, 31, 31, 3, 3, 3<br />}, //4<br />{<br />31, 31, 24, 31, 31, 3, 31, 31<br />}, //5<br />{<br />31, 31, 24, 31, 31, 27, 31, 31<br />}, //6<br />{<br />31, 31, 3, 7, 14, 28, 24, 24<br />}, //7<br />{<br />31, 27, 27, 31, 31, 27, 27, 31<br />}, //8<br />{<br />31, 27, 27, 31, 3, 3, 31, 31<br />} //9<br />    };<br /><br />uint8_t alarm_znak&#91;&#93; =<br />    {<br />    4, 14, 14, 14, 14, 31, 31, 4<br />    }; // znak alarmu<br /><br />char dni&#91;7&#93;&#91;9&#93; =<br />    {<br />    &quot;PN______&quot;,<br />    &quot;_WT_____&quot;,<br />    &quot;__SR____&quot;,<br />    &quot;___CZ___&quot;,<br />    &quot;____PT__&quot;,<br />    &quot;_____SO_&quot;,<br />    &quot;______ND&quot;<br />    };/*tablica napisow dni tygodnia*/<br /><br />/*-------------------------------------------------------------------------------------------bufor do LCD*/<br />char string_lcd&#91;2&#93;&#91;17&#93; =<br />    {<br />{<br />&quot;                &quot;<br />},<br />{<br />&quot;                &quot;<br />}<br />    }; /*BUFOR LCD*/<br /><br />struct S_czasy /*budz_god,  budz_min, czas_god, czas_min, czas_sek, czas_dzien  */<br />ee_czasy EEMEM, min_wart =<br />    {<br />    0, 0, 0, 0, 0, 0<br />    }, max_wart =<br />    {<br />    24, 59, 23, 59, 59, 6<br />    }, poz_x =<br />    {<br />    11, 14, 0, 3, 6, 0<br />    }, /*pozycje wyswietlanych czsow-*/<br />poz_y =<br />    {<br />    1, 1, 0, 0, 0, 1<br />    };/*pozycje wyswietlanych czasow-*/<br /><br />/**********************************************zmienne globalne*******************************************/<br />uint8_t ee_tak EEMEM; /*zmienna w eeprom do przechowywania odpowiedzi 1-NIE, 2-TAK,*/<br /><br />/*-----------------------------------------------------------------------zmienne do obslugi mk_DS_18_B_20*/<br />uint8_t subzero, cel, cel_fract_bits, czujniki_cnt;<br /><br />volatile uint16_t temperatura; /*do zapalania diod*/<br /><br />/*-------------------------------------------------------------------------------------------moje zmienne*/<br />volatile uint8_t poz_y_tem, poz_x_tem, /*pozycja temperatury na LCD*/<br />buzer_wlacz;<br />/*-------------------------------------------------------------------------------------------------flagti*/<br />volatile uint8_t flag_sek, flag_piszcz, flag_KL_200, flag_odswiez_LCD,<br />licz_ms_co_10, flag_ms_co_10, flag_mrygaj, flag_otwieranie, flag_serwo,<br />alarm,<br /><br />menu = podstawowe;<br /><br />volatile uint8_t tak; /*zmienna do tymczasowego przechowywania odpowiedzi w ram*/<br /><br />/*******************************funkcje do inicjalizacji**************************************************/<br />/*-------------------------------------------------------------------------------------------------------*/<br />void ustaw_timer_0(void)<br />    {/*---------timer_0 FAST_PWM, do podswietlania LCD, sprzetowy na timer_0 - PB3-*/<br /><br />    DDR_PODS &amp;= ~ NOGA_PODS;<br /><br />    TCCR0 |= (1 &lt;&lt; WGM01) | (1 &lt;&lt; WGM00); /*timer_0 tryb_3, szybki pwm(0-255)*/<br />// TCCR0 |= (1 &lt;&lt; COM01) | (1 &lt;&lt; COM00); /*przy porownaniu wysoki na wyjscie OC0 (bo przez T-PNP)*/<br />    TCCR0 |= (1 &lt;&lt; COM01); //| (1 &lt;&lt; COM00)<br /><br />    TCCR0 |= (1 &lt;&lt; CS00) | (1 &lt;&lt; CS02); /*preskaler 1024 = 70 Hz podswietlanie*/<br />    OCR0 = 0; /*jasnoc - wypełnienie 0-255*/<br /><br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void ustaw_timer_1(void)<br />    { /*--------------------------timer_1  SERWO-+-90stopni -&gt; 20Hz . 1,5 - 2,5 ms.-*/<br /><br />    /*tryb 14. Fast PWM TOP ICR1-------*/<br />    TCCR1A |= (1 &lt;&lt; WGM11);<br />    TCCR1B |= (1 &lt;&lt; WGM12) | (1 &lt;&lt; WGM13);<br /><br />    /*porownanie zeruje OC1A*/<br />    TCCR1A |= (1 &lt;&lt; COM1A1);<br /><br />    /*preskaler 8 =  2 304 000 Hz----------*/<br /><br />//TCCR1B |= (1 &lt;&lt; CS11) | (1 &lt;&lt; CS10);//64<br />    TCCR1B |= (1 &lt;&lt; CS11); //8<br /><br />    /*ICR1 max = 2 304 000 Hz / 50Hz = 46080-1 (-1 bo od zera)*/<br />    ICR1 = 46079;<br /><br />    /* 20ms -&gt; 0,5ms=1152, 1ms=2304,  1,5ms=3456,  2ms=4608,  2,5ms = 5760*/<br />    OCR1A = 1150; /*.......... 0,5 - 2,5ms*/<br /><br />    DDR_OTWORZ &amp;= ~NOGA_OTWORZ;<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void ustaw_timer_2(void)<br />    { /*------------------------------------------timer_2 CTC, i odliczania czasu.-*/<br /><br />    TCCR2 |= (1 &lt;&lt; WGM21); /*timer_2 tryb_2, CTC */<br />    TCCR2 |= (1 &lt;&lt; CS00) | (1 &lt;&lt; CS01) | (1 &lt;&lt; CS02); /*preskaler 1024*/<br />    OCR2 |= 178;/*18 432 000 / 1024 / 180 bo 0-179 = przerwanie co 10ms*/<br />    TIMSK |= (1 &lt;&lt; OCIE2);<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void ustaw_wy_we(void)<br />    {/*--------------------------------------------------------------wejscia wyjscia-*/<br /><br />// DDR_PODS |= NOGA_PODS;/*sprzęt PWM wyjście OC0 na PB3*/<br /><br />    DDR_BUZZER |= NOGA_BUZZER; /*wyjscie buzzera*/<br />    BUZZER_OFF; /*niski*/<br /><br />    DDR_K1 &amp;= ~ K_1; /*wejscie k1*/<br />    DDR_K2 &amp;= ~ K_2; /*wejscie k1*/<br />    DDR_K3 &amp;= ~ K_3; /*wejscie k1*/<br />    DDR_K4 &amp;= ~ K_4; /*wejscie k1*/<br /><br />    PORT_K1 |= K_1; /*podciagniecie*/<br />    PORT_K2 |= K_2; /*podciagniecie*/<br />    PORT_K3 |= K_3; /*podciagniecie*/<br />    PORT_K4 |= K_4; /*podciagniecie*/<br />    }<br /><br />/*----------------------------------****inne funkcje****-------------------------------------------------*/<br />void pilnuj_budzik(void)<br />    { /*------------------------------porownywanie czasu budzika z czasem aktualnym-*/<br />    if (czasy.b_mi == czasy.cz_mi &amp;&amp; czasy.b_go == czasy.cz_go<br />    &amp;&amp; czasy.cz_se == 0)<br />alarm = 1;<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void dodaj(void)<br />    { /*---------------------------------------------------dodawanie wskazywanych wartosci-*/<br /><br />    if (*(menu + (&amp;(czasy.b_go))) &lt; *(menu + (&amp;(max_wart.b_go))))<br />{<br /><br />if (menu != us_sek_res)<br />    {<br />    *(menu + (&amp;(czasy.b_go))) += 1; /*dodawanie wartości pod adresem menu*/<br />    }<br />else<br />    {<br />    *(menu + (&amp;(czasy.b_go))) = 0; /*zerowanie sekund*/<br />    }<br />}<br />    else<br />{<br />*(menu + (&amp;(czasy.b_go))) = *(menu + (&amp;(min_wart.b_go)));<br />}<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void odejmij(void)<br />    {/*------------------------------------------------odejmowanie wskazywanych wartosci-*/<br />    if (*(menu + (&amp;(czasy.b_go))) &gt; *(menu + (&amp;(min_wart.b_go))))<br />{<br /><br />if (menu != us_sek_res)<br />    {<br />    *(menu + (&amp;(czasy.b_go))) -= 1;/*dodawanie wartości pod adresem menu*/<br />    }<br />else<br />    {<br />    *(menu + (&amp;(czasy.b_go))) = 0; /*zerowanie sekund*/<br />    }<br />}<br />    else<br />{<br />*(menu + (&amp;(czasy.b_go))) = *(menu + (&amp;(max_wart.b_go)));<br />}<br />    }<br /><br />/*-------------------------------------------------------------------------------------------------------*/<br />void otworz(void)<br />    { /*-------------------------------------------------------------otwieranie szkatulki-*/<br />    flag_otwieranie = 1;<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void serwo(void)<br />    { /*------------------moje serwo 0,5 -&gt; 2,5ms -co 20 ms---------------funkcja do SERWA-*/<br /><br />    if (flag_otwieranie == 1)<br />{/*flaga otwierania-&gt; pwm++do max -&gt;kasowanie flagi-&gt; pwm--do min.-&gt; odlaczenie*/<br />if (OCR1A &lt;= 1155)<br />    DDR_OTWORZ |= NOGA_OTWORZ; /*zalaczenie wyjscia*/<br /><br />if (OCR1A &lt; 5755)<br />    {<br />    OCR1A += 10; /*zwiekszanie dlugosci sygnalu do max +90stopni*/<br />    }<br />else<br />    flag_otwieranie = 2; /*po osiagnieciu max - koniec otwierania*/<br />}<br />    /*----------------------gdy flaga wyzerowana-------------------------------------------------------*/<br />    else if (flag_otwieranie == 2)<br />{ /*gdy skonczylo sie otwieranie -&gt; zamykaj*/<br /><br />if ( OCR1A &gt; 1155)<br />    OCR1A -= 10;<br />else<br />    { /*gdy dlugosc sygnalu osiagnie minimum -90stopni*/<br />    DDR_OTWORZ &amp;= ~ NOGA_OTWORZ; /*pin serwa jako wejscie*/<br />    PORT_OTWORZ &amp;= ~ NOGA_OTWORZ; /*bez podciagania do vcc*/<br />    flag_otwieranie = 0;<br />    }<br />}<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />/*-----------------------dzialanie_klawisza(KLAWISZ_NACISNIETY , F_1 'RAZ' , ZWLOKA , F_2 'CYKLICZNIE' )-*/<br />void dzialanie_klawisza(char nacisniety, void funk_1(void), uint8_t czas_1,<br />void funk_2(void))<br />    {/*----*/<br />    static volatile uint8_t klik;<br /><br />    if (nacisniety)<br />{<br />if (!klik)<br />    {<br />    funk_1();<br />    (klik) = 1;<br />    }<br />if (flag_KL_200)<br />    {<br />    if ((klik) &amp;&amp; (klik) &lt; 250)<br />(klik)++;<br />    if ((klik) &gt; czas_1)<br />funk_2();<br />    flag_KL_200 = 0;<br />    }<br />}<br />    if (! K_1_PRESS &amp;&amp; ! K_2_PRESS &amp;&amp; ! K_3_PRESS &amp;&amp; ! K_4_PRESS)<br />klik = 0;<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void licz_czas(void)<br />    { /*--------------------------------------------------------------odliczanie czasu-*/<br /><br />    if (flag_sek)<br />{<br /><br />if (czasy.cz_se &lt; 59)<br />    {<br />    czasy.cz_se++;<br />    }<br />else<br />    {<br />    czasy.cz_se = 0;<br />    if (czasy.cz_mi &lt; 59)<br />{<br />czasy.cz_mi++;<br />}<br />    else<br />{<br />czasy.cz_mi = 0;<br />if (czasy.cz_go &lt; 23)<br />    {<br />    czasy.cz_go++;<br />    }<br />else<br />    {<br />    czasy.cz_go = 0;<br />    czasy.cz_dz++;<br />    if (czasy.cz_dz &gt; 6)<br />czasy.cz_dz = 0;<br />    }<br />}<br />    }<br />flag_sek--;<br />}<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void uint_do_buf(uint8_t czas, uint8_t pozy, uint8_t pozx)<br />    { /* ---------------zapis uint do bufora LCD-*/<br />    string_lcd&#91;pozy&#93;&#91;pozx&#93; = (czas / 10) + '0';<br />    string_lcd&#91;pozy&#93;&#91;pozx + 1&#93; = (czas % 10) + '0';<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void napis_do_buf(uint8_t ile, char tab&#91;ile + 1&#93;, uint8_t pozy, uint8_t pozx)<br />    { /*---char do bufora LCD-*/<br />    for (int8_t j = 0; j &lt; ile; j++)<br />{<br />string_lcd&#91;pozy&#93;&#91;pozx + j&#93; = tab&#91;j&#93;;<br />}<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void odswiez_lcd(uint8_t flaga, char string_lcd&#91;2&#93;&#91;17&#93;)<br />    {/* ----wyslanie stringa do LCD na obie linijki-*/<br />    if (flaga)<br />{<br />static uint8_t wiersz = 0;<br />lcd_locate(wiersz, 0);<br />lcd_str(string_lcd&#91;wiersz&#93;);<br />if (wiersz &lt; 1)<br />    wiersz++;<br />else<br />    wiersz = 0;<br />flaga = 0;<br />}<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void wyczysc_buf(void)<br />    { /*-------------------------------------------------------------czyszczenie LCD-*/<br />    for (uint8_t i = 0; i &lt; 4; i++)<br />{<br />strcpy(string_lcd&#91;i&#93;, &quot;                    &quot;);<br />}<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void pozycja_temp(uint8_t y, uint8_t x)<br />    { /*------------------------pomiar i wyslanie wynikow do bufora-*/<br />    uint8_t poz_y_tem = y;<br />    uint8_t poz_x_tem = x;<br />    if (0 == (czasy.cz_se % 15))<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL);<br />    if (1 == (czasy.cz_se % 15))<br />{<br />if ( DS18X20_OK<br />== DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel,<br />&amp;cel_fract_bits))<br />    {<br />    if (subzero)<br />string_lcd&#91;poz_y_tem&#93;&#91;poz_x_tem&#93; = '-'; /* jeśli subzero==1 zapisz znak minus do bufora_LCD */<br />    else<br />string_lcd&#91;poz_y_tem&#93;&#91;poz_x_tem&#93; = ' '; /* jeśli subzero==0 zapisz znak plus do bufora_LCD) */<br />    uint_do_buf(cel, poz_y_tem, poz_x_tem + 1); /* zapisz dziesiętne części temperatury w burorze_LCD */<br />    string_lcd&#91;poz_y_tem&#93;&#91;poz_x_tem + 3&#93; = '.'; /* wyświetl kropkę */<br />    string_lcd&#91;poz_y_tem&#93;&#91;poz_x_tem + 4&#93; = cel_fract_bits + '0'; /* zapisz dziesiętne części stopnia */<br />    string_lcd&#91;poz_y_tem&#93;&#91;poz_x_tem + 5&#93; = '\x80';/*znak_stopnia*/<br />    string_lcd&#91;poz_y_tem&#93;&#91;poz_x_tem + 6&#93; = 'C'; /*C*/<br />    temperatura = (cel * 10) + (cel_fract_bits);<br />    }<br />else<br />    {<br />    napis_do_buf(6, &quot;kiszka!&quot;, poz_y_tem, poz_x_tem);<br />    }<br />}<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void jasniej(void)<br />    { /*----------------------------------------------------------------rozjasnianie LCD-*/<br /><br />    if (OCR0 &lt; 253)<br />{<br />OCR0 += 2;<br />DDR_PODS |= NOGA_PODS;<br />}<br />    else<br />piszcz();<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void ciemniej(void)<br />    { /*----------------------------------------------------------------zciemnianie LCD-*/<br />    if (OCR0 &gt; 2)<br />{<br />OCR0 -= 2;<br />}<br />    else<br />{<br />piszcz();<br />DDR_PODS &amp;= ~ NOGA_PODS;<br />}<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void nastepne_menu(void)<br />    { /*---------------------------------------------przesuniecie na nastepne menu-*/<br />    switch (menu)<br />{<br />    case podstawowe:<br />menu = us_bu_go;<br />break;<br />    case us_bu_go:<br />menu = us_bu_mi;<br />break;<br />    case us_bu_mi:<br />menu = us_go;<br />break;<br />    case us_go:<br />menu = us_mi;<br />break;<br />    case us_mi:<br />menu = us_sek_res;<br />break;<br />    case us_sek_res:<br />menu = us_dz_tyg;<br />break;<br />    case us_dz_tyg:<br />{<br />menu = podstawowe;<br />zapisz_czasy();<br />}<br />break;<br />    default:<br />break;<br />}<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void poprzednie_menu(void)<br />    { /*-----------------------------------------przesuniecie na poprzednie menu-*/<br />    switch (menu)<br />{<br />    case us_dz_tyg:<br />menu = us_sek_res;<br />break;<br />    case us_sek_res:<br />menu = us_mi;<br />break;<br />    case us_mi:<br />menu = us_go;<br />break;<br />    case us_go:<br />menu = us_bu_mi;<br />break;<br />    case us_bu_mi:<br />menu = us_bu_go;<br />break;<br />    case us_bu_go:<br />menu = podstawowe;<br />break;<br />    default:<br />break;<br />}<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void piszcz(void)<br />    { /*-----------------------------------------------------------------sygnal dzwiekowy-*/<br />    if (flag_piszcz)<br />BUZZER_ON; /*buzzer wylaczany w timerach prog razem z pelna sekunda*/<br />    flag_piszcz = 0;<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void alarm_stop(void)<br />    { /*--------------------------------------------------------------sygnal dzwiekowy-*/<br />    alarm = 0; /*buzzer wylaczany w timerach prog razem z pelna sekunda*/<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void zapisz_czasy(void)<br />    { /*------------------------------------------------------zapis czasow do eeprom-*/<br />    eeprom_write_block(&amp;czasy, &amp;ee_czasy, sizeof(czasy));/*ram --&gt; eeprom*/<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void wczytaj_czasy(void)<br />    { /*-----------------------------------------------------odczyt czasow z eeprom-*/<br />    eeprom_read_block(&amp;czasy, &amp;ee_czasy, sizeof(czasy));/*eeprom --&gt; ram*/<br />    }<br />/*-------------------------------------------------------------------------------------------------------*/<br />void diody_r_b(int prog_1, int prog_2)<br />    {/*-------------------------zapalanie diod od temperatury-*/<br /><br />    if (temperatura &lt; prog_1)<br />{<br />D_NIEB_ON;<br />D_CZER_OFF;<br />}<br />    else if (temperatura &gt;= prog_2)<br />{<br />D_NIEB_OFF;<br />D_CZER_ON;<br />}<br />    else<br />{<br />D_CZER_ON;<br />D_NIEB_ON;<br />}<br />    }<br />/*-------------------------A TU MAM WRAZENIE ZE COS MOCNO POKOPALEM :(------------------------------------*/<br />/**************************************PRZERWANIE TIMER_2**************************************************/<br />ISR(TIMER2_COMP_vect)<br />    {<br /><br />    if (flag_ms_co_10 &lt; 100)<br />flag_ms_co_10++;<br />    else<br />{<br />flag_ms_co_10 = 1;<br />flag_sek++;<br />BUZZER_OFF;<br />}<br /><br />    flag_serwo = 1;<br />    if (flag_ms_co_10 == 50)<br />flag_piszcz = 1;<br />    if (flag_ms_co_10 % 25 == 0)<br />flag_odswiez_LCD = 1;<br />    if (flag_ms_co_10 % 20 == 0)<br />flag_KL_200 = 1;<br />    if (flag_ms_co_10 % 33 == 0)<br /><br />flag_mrygaj ^= (1 &lt;&lt; 0);<br /><br />    }<br />/*----------------------------------------------KONIEC--&quot;MOJE.C&quot;------------------------------------------*/[/syntax]<br />moje.h<br />[syntax=c]/*<br /> * moje.h<br /> *<br /> *  Created on: 23 paź 2016<br /> *      Author: Darek<br /> */<br /><br />#ifndef MOJE_H_<br />#define MOJE_H_<br /><br />/*************************************USTAWIENIA PINOW PORTOW*********************************************/<br /><br />/*podswietlanie LCD*/<br />#define DDR_PODS DDRB<br />#define PORT_PODS PORTB<br />#define NOGA_PODS (1&lt;&lt;PB3) /*TIMER_0 - OC0 PB3*/<br /><br />/*buzzer*/<br />#define DDR_BUZZER DDRD<br />#define PORT_BUZZER PORTD<br />#define NOGA_BUZZER (1&lt;&lt;PD7)<br /><br />/*pin otwierania*/<br />#define DDR_OTWORZ DDRD<br />#define PORT_OTWORZ PORTD<br />#define NOGA_OTWORZ (1&lt;&lt;PD5) /*TIMER_1 - OC1A PD5*/<br /><br />/*klawisz 1*/<br />#define PIN_K1 PINC<br />#define PORT_K1 PORTC<br />#define DDR_K1 DDRC<br />#define K_1 (1&lt;&lt;PC0)<br /><br />/*klawisz 2*/<br />#define PIN_K2 PINC<br />#define PORT_K2 PORTC<br />#define DDR_K2 DDRC<br />#define K_2 (1&lt;&lt;PC1)<br /><br />/*klawisz 3*/<br />#define PIN_K3 PINC<br />#define PORT_K3 PORTC<br />#define DDR_K3 DDRC<br />#define K_3 (1&lt;&lt;PC2)<br /><br />/*klawisz 4*/<br />#define PIN_K4 PINC<br />#define PORT_K4 PORTC<br />#define DDR_K4 DDRC<br />#define K_4 (1&lt;&lt;PC3)<br /><br />/*dioda czewona*/<br />#define PIN_D_CZER PINC<br />#define PORT_D_CZER PORTC<br />#define DDR_D_CZER DDRC<br />#define D_CZER (1&lt;&lt;PC4)<br /><br />/*dioda niebieska*/<br />#define PIN_D_NIEB PINC<br />#define PORT_D_NIEB PORTC<br />#define DDR_D_NIEB DDRC<br />#define D_NIEB (1&lt;&lt;PC5)<br /><br />/***********************************definicje ułatwiajace*************************************************/<br />/*do ATB*/<br />#define BUZZER_OFF PORT_BUZZER &amp;=~NOGA_BUZZER<br />#define BUZZER_ON PORT_BUZZER |=NOGA_BUZZER<br /><br />/*na stykowce*/<br />//#define BUZER_OFF PORT_BUZER |=NOGA_BUZER<br />//#define BUZER_ON PORT_BUZER &amp;=~NOGA_BUZER<br />/*podswietlanie wnetrza szkatulki - jeszcze nie wiemy czy przez Tr PNP czy NPN  */<br />/*na ATB bedzie tak :*/<br />#define D_CZER_ON PORT_D_CZER &amp;=~ D_CZER<br />#define D_NIEB_ON PORT_D_NIEB &amp;=~ D_NIEB<br />#define D_CZER_OFF PORT_D_CZER |= D_CZER<br />#define D_NIEB_OFF PORT_D_NIEB |= D_NIEB<br /><br />/*definicja - klawisz wcisniety*/<br />#define K_1_PRESS (!(PIN_K1 &amp; K_1))<br />#define K_2_PRESS (!(PIN_K2 &amp; K_2))<br />#define K_3_PRESS (!(PIN_K3 &amp; K_3))<br />#define K_4_PRESS (!(PIN_K4 &amp; K_4))<br />/*-------------------------------------------------------------------------------------------------------*/<br /><br />/**********************************tablice znaków LCD- deklaracje*****************************************/<br />extern uint8_t stc&#91;&#93;; /* znak stopni celsjusza*/<br /><br />uint8_t lit_L&#91;9&#93;;<br /><br />extern uint8_t cyfry&#91;10&#93;&#91;9&#93;;/*deklaracja tab - znaki wlasne 0123456789*/<br /><br />extern uint8_t alarm_znak&#91;&#93;; /* deklaracja -znak alarmu*/<br /><br />extern char dni&#91;7&#93;&#91;9&#93;; /*tablica napisow dni tygodnia- deklaracja*/<br /><br />extern char string_lcd&#91;2&#93;&#91;17&#93;; /*bufor LCD. do niego sa zapisywane zmiany, i co 0,5s wysylane na LCD     */<br /><br />/*************************************************zmienne globalne deklaracje*****************************/<br /><br />extern uint8_t ee_tak EEMEM; /*zmienna w eeprom do przechowywania odpowiedzi 1-NIE, 2-TAK,*/<br /><br />/*------------------------------zmienne do obslugi mk_DS_18_B_20-----------------------------------------*/<br />uint8_t subzero, cel, cel_fract_bits, czujniki_cnt;<br /><br />volatile uint16_t temperatura;/*do zapalania diod*/<br /><br />/*-------------------------------moje zmienne------------------------------------------------------------*/<br />extern volatile uint8_t poz_y_tem, poz_x_tem, buzer_wlacz; /*pozycja temperatury*/<br /><br />extern volatile uint8_t flag_sek, flag_piszcz, flag_KL_200, flag_mrygaj,<br />flag_odswiez_LCD, licz_ms_co_10, flag_ms_co_10, flag_otwieranie,<br />flag_serwo, menu, alarm;<br /><br />volatile uint8_t tak; /*zmienna do przechowywania odpowiedzi w eeprom*/<br /><br />/*-------------------------------------------------------------------------------------------------------*/<br />enum dzien<br />    {<br />    po,<br />    wt,<br />    sr,<br />    cz,<br />    pt,<br />    so,<br />    ni,<br />    };<br />enum menu<br />    {<br />    us_bu_go,<br />    us_bu_mi,<br />    us_go,<br />    us_mi,<br />    us_sek_res,<br />    us_dz_tyg,<br />    podstawowe,<br />    };<br /><br />struct S_czasy<br />    {<br />uint8_t b_go;<br />uint8_t b_mi;<br />uint8_t cz_go;<br />uint8_t cz_mi;<br />uint8_t cz_se;<br />uint8_t cz_dz;<br />    } czasy, poz_y, poz_x;<br /><br />/*******************************************deklaracje funkcji inicjalizujących***************************/<br />void serwo(void);<br />void ustaw_timer_0(void);<br />void ustaw_timer_1(void);<br />void ustaw_timer_2(void);<br />void ustaw_wy_we(void);<br /><br />/*---------------------------------------deklaracje innych funkcji---------------------------------------*/<br /><br />void otworz(void);<br />void piszcz(void);<br />void alarm_stop(void);<br />void odejmij(void);<br />void dodaj(void);<br />void jasniej(void);<br />void ciemniej(void);<br />void licz_czas(void);<br />void wyczysc_buf(void);<br />void zapisz_czasy(void);<br />void wczytaj_czasy(void);<br />void nastepne_menu(void);<br />void pilnuj_budzik(void);<br />void poprzednie_menu(void);<br />void diody_r_b(int prog_1, int prog_2);<br />void pozycja_temp(uint8_t y, uint8_t x);<br />void odswiez_lcd(uint8_t flaga, char string_lcd&#91;2&#93;&#91;17&#93;);<br />void uint_do_buf(uint8_t czas, uint8_t pozx, uint8_t pozy);<br />void napis_do_buf(uint8_t ile, char tab&#91;ile + 1&#93;, uint8_t pozy, uint8_t pozx);<br />void dzialanie_klawisza(char nacisniety, void funk_1(void), uint8_t czas_1,<br />void funk_2(void));<br /><br />#endif /* MOJE_H_ */[/syntax]<br />zdając sobie sprawę z prymitywnego sposobu pisania programu,<br />jeżeli komuś będzie się chciało pobawić, a ma lepszy pomysł na kod lub jego część,<br />to bardzo chętnie poczytamy,  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 12 lis 2016, o 22:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-11T04:29:32+01:00</updated>
<published>2016-11-11T04:29:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174436#p174436</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174436#p174436"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174436#p174436"><![CDATA[
<div class="quotetitle">Daro69 napisał(a):</div><div class="quotecontent"><br />Jak buni_dydy.. ja tych piguł nie buchnąłem.<br /></div><br />No no ... żeby mi to było po raz przedostatni ! <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 lis 2016, o 04:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-11-11T04:13:39+01:00</updated>
<published>2016-11-11T04:13:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174435#p174435</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174435#p174435"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174435#p174435"><![CDATA[
O... kurcze,  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /> <br />Ja to, ... ten.. tego - znalazłem!!  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /><br />Leżały sobie dwie bezpańskie na środku obok rozprutej kasetki, aż szkoda było zostawić. <img src="https://forum.atnel.pl/images/smilies/icon_e_ugeek.gif" alt=":ugeek:" title="Świr, i to jaki!" /> <br />Pewnie się szkarady dorwały i nie wszystko zabrały.<br />Noc była cicha - jak dzisiaj , tylko w oddali trochę jęków i łańcuchy było słychać.<br />Nie wiele myśląc, zgarnąłem piguły do torby  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" />  i dyla.  <img src="https://forum.atnel.pl/images/smilies/icon_arrow.gif" alt=":arrow:" title="Strzałka" /><br />Miałem ja właśnie yyy... oddać Sunowi.  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /><br />Nie mam więcej,  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /> i w grocie 69 pod niebieskim kamieniem też nie ma, już.  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /><br />Ech . . to może ja się profilaktycznie sam przykuję łańcuchem do włazu zapadni i od klęczę trzy zmiany wartowników. Mogę też odklepać trzy pliki nagłówkowe <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /><br />Jak buni_dydy.. ja tych piguł nie buchnąłem. Ja normalnie święty człowiek jestem.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> poważnie.  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 11 lis 2016, o 04:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-10T21:53:33+01:00</updated>
<published>2016-11-10T21:53:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174412#p174412</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174412#p174412"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174412#p174412"><![CDATA[
spokojnie po to jest forum, żeby dopytać zawsze o coś <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br /><div class="quotetitle">Daro69 napisał(a):</div><div class="quotecontent"><br />Dzięki wielkie Mirku,  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Takie informacje to na wagę złota - forumowego <img src="https://obrazkiforum.atnel.pl/11549/ce342c1582e9c91c54e66a6817062f0b.JPG" alt="Obrazek" /><img src="https://obrazkiforum.atnel.pl/11549/ce342c1582e9c91c54e66a6817062f0b.JPG" alt="Obrazek" /><br /></div><br /><br />ale ale ... ja widzę, że kolega dorwał się chyba do jakiegoś składziku w Lochach forumowych i rozpruł kasetkę z pigułami i tu jakiś nielegalny zdaje się handelek co ??? .... będę musiał zgłosić SunRiverowi <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 10 lis 2016, o 21:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-11-10T21:37:22+01:00</updated>
<published>2016-11-10T21:37:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174405#p174405</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174405#p174405"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174405#p174405"><![CDATA[
Dzięki wielkie Mirku,  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Takie informacje to na wagę złota - forumowego <img src="https://obrazkiforum.atnel.pl/11549/ce342c1582e9c91c54e66a6817062f0b.JPG" alt="Obrazek" /><img src="https://obrazkiforum.atnel.pl/11549/ce342c1582e9c91c54e66a6817062f0b.JPG" alt="Obrazek" /><br />Możliwe że gdzieś to było napisane,<br />ale jak się czyta BB i koncentruje na jakimś temacie,<br />to czasami inne ważne rzeczy po prostu gdzieś umykają. <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /><br />To pewnie przez to że się nie zdaje czasem sprawy z faktu,<br />że jedno Twoje zdanie może zawierać kilka cennych informacji.<br />Aj.. jeszcze nie raz będę czytał BB od poczatku. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 10 lis 2016, o 21:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-10T09:31:44+01:00</updated>
<published>2016-11-10T09:31:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174333#p174333</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174333#p174333"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174333#p174333"><![CDATA[
<div class="quotetitle">Daro69 napisał(a):</div><div class="quotecontent"><br />Tak sobie jeszcze kombinowałem z flagami,<br />czy nie lepiej by było dać jedna zmienną i operować na jej bitach?<br />A może lepiej utworzyć tablicę i na tej tablicy operować?<br />Nie mam pojęcia co szybciej się wykona, bo nie znam assemblera.<br />A może jeszcze jakiś inny sposób, bo przyznam że do tych flag podchodziłem dwa razy,<br />a za trzecim i tak zmienilem na to co jest.<br /></div><br />Zdecydowanie szybciej będzie gdy jedna flaga to jedna komórka pamięci RAM. Niby marnotrastwo ale najszybciej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... Gdy mamy dużo pamięci RAM to lepiej flagi w pojedynczych komórkach, gdy mało to wtedy można pokusić się o pola bitowe.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 10 lis 2016, o 09:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-11-10T07:58:47+01:00</updated>
<published>2016-11-10T07:58:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174330#p174330</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174330#p174330"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174330#p174330"><![CDATA[
Oczywiście, wszystkie uwagi są cenne i przydatne.<br />Dzięki Mirku za wskazanie niedociągnięć.<br />To faktycznie jakos tak jest z tym 0, że gdy mi obojętne to nie wpisuję,<br /> a gdy zależy to wpisuję.<br />Faktycznie  <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /> przecież te wartości i tak będzie 0. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Gdyby ktoś się pokusił zajrzeć do kodu i znalazł jeszcze jakieś,<br /> to poproszę , także uwagi odnośnie konstrukcji i funkcji.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 20 minutach ]</span></strong><br /><br />Tak sobie jeszcze kombinowałem z flagami,<br />czy nie lepiej by było dać jedna zmienną i operować na jej bitach?<br />A może lepiej utworzyć tablicę i na tej tablicy operować?<br />Nie mam pojęcia co szybciej się wykona, bo nie znam assemblera.<br />A może jeszcze jakiś inny sposób, bo przyznam że do tych flag podchodziłem dwa razy,<br />a za trzecim i tak zmienilem na to co jest.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 10 lis 2016, o 07:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-11-10T03:03:08+01:00</updated>
<published>2016-11-10T03:03:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174326#p174326</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174326#p174326"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174326#p174326"><![CDATA[
Ładnie wszystko idzie ale panowie, panowie - .... mamy wszyscy Bluebooka a wciąż w ten sposób piszemy kod ?<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />volatile uint8_t flag_sek, flag_piszcz <em><span style="color: #FF0000">= 0</span></em>, flag_KL_200, flag_odswiez_LCD,<br />                licz_ms_co_10 <em><span style="color: #FF0000">= 0</span></em>, flag_ms_co_10, flag_mrygaj <em><span style="color: #FF0000">= 0</span></em>, flag_otwieranie <em><span style="color: #FF0000">= 0</span></em>,<br />                flag_serwo <em><span style="color: #FF0000">= 0</span></em>, licznik_a, menu = podstawowe, alarm <em><span style="color: #FF0000">= 0</span></em>;<br /></div><br /><br />Czy powinienem komuś głowę urwać ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ..... czy do kolegów nie dotarło CO TO JEST ZMIENNA GLOBALNA ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i jak się taka zachowuje ? ... innymi słowy mówiąc, że zmienne globalne są ZAWSZE zerowane automatycznie i pisanie tego w kodzie ... oznacza dwie rzeczy. RAZ że ktoś nie doczytał albo zapomniał o tym fakcie. DWA że takie wpisywanie = 0 tylko totalnie zaciemnia obraz ...<br /><br />No chyba że jest trzecia strona ciemnej mocy - i ktoś sobie pomyślał na zasadzie jak w filmie o kargulu i pawliaku gdy matka mówi do pawliaka. Weź synu granat na wszelki wypadek bo sąd sądem ale sprawiedliwość musi być po naszej stronie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> CZYLI ktoś pomyślał - ok no dobra wiem że kompilator niby zeruje te zmienne globalne ale ja na wszelki wypadek zrobię to sam ...<br /><br />No i jak później to się zaczyna powielać i powielać na forum - to inni (szczególnie początkujący) którzy czytają taki kod zaczynają też w to wierzyć <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> więc sami widzicie że robi się już wtedy nie za dobrze.<br /><br />To taka tylko drobna choć chyba ważna uwaga i mam nadzieję, że weźmiecie sobie to do serca - żeby później nie było że w BB nie było o tym mowy - bo była <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ok?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br />Ale jeszcze druga uwaga do tego samego fragmentu kodu, niech mi ktoś spróbuje wyjaśnić (bo może nie widzę całości kodu czy jak) po jasny gwincik - AŻ TYLE zmiennych globalnych zostało opatrzone specyfikatorem volatile ? Czy znowu na zasadzie (tak na wszelki wypadek?) .... bo jeśli &quot;na wszelki wypadek&quot; no to tu już się kłania bardzo zła praktyka programowania<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 12 minutach ]</span></strong><br /><br />aha jeśli mogę to jeszcze jedna i też do tego samego zacytowanego przeze mnie kawałka kodu czyli do definicji takiej dużej ilości zmiennych ZA JEDNYM ZAMACHEM. Pomijam już to, że jest tego dużo ale no ok można to nie jest jakiś tam problem. Za to już z punktu widzenia dobrego stylu programowania to na pewno przydałoby się dla przejrzystości ROZDZIELIĆ definicje zmiennych, które są inicjowane w różny sposób. Pomijam to inicjowanie zerem bo już wyżej powiedziałem że to akurat nie ma sensu - ale gdyby trzeba było inicjować innymi wartościami to można albo powinno się zrobić to tak:<br /><br />[syntax=c]// definicje zmiennych inicjowanych zerem automatycznie<br />volatile uint8_t flag_sek,  flag_KL_200, flag_odswiez_LCD, flag_ms_co_10, licznik_a;<br /><br />// definicje zmiennych inicjowanych stałą dosłowną 5 (ale nie zerem!)<br />volatile uint8_t flag_piszcz = 5, licz_ms_co_10 = 5, flag_mrygaj = 5, flag_otwieranie = 5, flag_serwo = 5, alarm = 5;<br /><br />// definicje zmiennych inicjowanych typem wyliczeniowym<br />volatile uint8_t menu = podstawowe;[/syntax]<br /><br />a na zakończenie podpowiem, że środkową linijkę z powodzeniem można zapisać również w taki sposób:<br /><br />[syntax=c]// definicje zmiennych inicjowanych stałą dosłowną 5 (ale nie zerem!)<br />volatile uint8_t flag_piszcz = licz_ms_co_10 = flag_mrygaj = flag_otwieranie = flag_serwo = alarm = 5;[/syntax]<br /><br />o ile oczywiście wszystkie miałyby być zainicjowane tą samą i niezerową wartością.<br /><br />Mam nadzieję, że będą to przydatne uwagi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 10 lis 2016, o 03:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-11-10T01:28:47+01:00</updated>
<published>2016-11-10T01:28:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174324#p174324</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174324#p174324"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174324#p174324"><![CDATA[
<img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Jakoś działa.  <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> <br /><br />Tak trochę w imieniu Wojtka  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> . <br /><br />Była już fotka szkatułki, fotka wyświetlacza,<br />to teraz do zabawy i testowania obiecane wypociny.  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /><br />Tylko błagam nie lać za mocno.  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /><br /><br />Przygotowane na ATB, z wykorzystaniem  plików nagłówkowych &quot;LCD/lcd44780.h&quot;,&quot;1Wire/ds18x20.h&quot; zawartych w dołączonym do BB nośniku.<br />main.c<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: październik 2016                           Author: Wojtek i koledzy z forum &quot;ATNEL&quot;. ;)<br /> *<br /> *  ATmega_32 , ATmega_16 , 18,432 MHz ,<br /> *<br /> *  Podswietlanie LCD timer_0 - PWM                -&gt; OC0  PB3.<br /> *  Serwo +-90stopni na timer_1 fast PWM tryb_14,  -&gt; OC1A PD5.<br /> *  Czas na timer_2 CTC.<br /> *<br /> *  ------------Pozostale piny do ustawienia w oryginalnym pliku LCD, 1Wire, oraz moje.h --------------.<br /> *obecn ustawienia:<br /> *  lcd........<br /> *  rs PB0<br /> *  rw PB1<br /> *  e PB2<br /> *  D_7 PA7<br /> *  D_6 PA6<br /> *  D_5 PA5<br /> *  D_4 PA4<br /> *                  //anoda lcd przez tr PNP z PB3/ zmieniona w pliku moje.c na NPN, ze wzgledu na ATB.<br /> *<br /> *  ds18b20<br /> *  onewire.h PA0<br /> *<br /> *  Buzzer PD7<br /> *  Serwo PD5<br /> *<br /> *  klawisze:<br /> *  K_1 PC0<br /> *  K_2 PC1<br /> *  K_3 PC2<br /> *  K_4 PC3<br /> *<br /> *  Diody do podswietlenia wnetrza PC4 , PC5 .<br /> *<br /> *              NIEWATPLIWIE PROGRAM WYMAGA JESZCZE POPRAWEK, ALE JUZ JEST SPRAWNY :) .<br /> */<br />/*---------------------------------pliki nagłowkowe--------------------------------------------------*/<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;string.h&gt;<br /><br />/*----------------------------------pliki mk_xxx-----------------------------------------------------*/<br />#include &quot;1Wire/ds18x20.h&quot;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />/*-----------------------------------pliki moje------------------------------------------------------*/<br />#include &quot;moje.h&quot;<br /><br />/*---------------------------------------------------------------------------------------------------*/<br />/*****************************************************************************************************/<br /><br />int main(void) {<br /><br />ustaw_timer_0(); /*funkvja ustawia imer 0 (pwm do podświetlania LCD)*/<br />ustaw_timer_1(); /*funkcja ustawia timer do obslugi serwa na OC1A*/<br />ustaw_timer_2(); /*funkcja ustawia timer 1 (CTC do odliczania czasu)*/<br />ustaw_wy_we(); /*funkcja ustawia piny i porty wejśc i wyjś*/<br /><br />lcd_init(); /*inicjalizacja wyświetlacza*/<br /><br />/*-------------------------znaki wlasne niezmienne*/<br />lcd_defchar(0x87, alarm_znak);<br />lcd_defchar(0x80, stc);<br />lcd_defchar(0x81, lit_L);<br /><br />czujniki_cnt = search_sensors();<br /><br />sei();<br /><br />/*----------------------------------------------------------------------------------------------*/<br />wczytaj_czasy(); /*odczyt z eeprom do ram, zapisany budzik i ostatnia godzina przed wylaczeniem*/<br /><br />tak = eeprom_read_byte(&amp;ee_tak);/*odczytanie odpowiedzi z eeprom*/<br /><br />/*---------------------------------wstepne rozjasnianie LCD--------*/<br />while (OCR0 &lt; 250) {<br />jasniej();<br />_delay_ms(50);<br />}<br /><br />/*---------------------------------informacja o wczytaniu ustawien-*/<br />for (uint8_t j = 0; !j; j++) {<br />for (uint8_t i = 0; i &lt; 16; i++) {<br />lcd_locate(0, 15 - i);<br />lcd_str(&quot;..WCZYTYWANIE...&quot;);<br />_delay_ms(200);<br />}<br />_delay_ms(500);<br />for (uint8_t i = 0; i &lt; 16; i++) {<br />lcd_locate(1, 15 - i);<br />lcd_str(&quot;.....NASTAW.....&quot;);<br />_delay_ms(200);<br />}<br />j = 1;<br />}<br /><br />/*----------------------------------------------------------------------------------------------*/<br />/*    poczatek programu -<br /> * na poczatku program sprawdza czy nie jest wcisniety klawisz do przywrocenia oczekiwania na odpowiedz.<br /> * jezeli jest wcisniety, to uznaje ze nie bylo odpowiedzi na pytanie i zaczyna zabawe od nowa.<br /> * Wyswietla pytanie &quot;CZY TO WOJTKA&quot; i czeka na wcisniecie klawisza TAK, by wyswietlic napis :<br /> * &quot;ZAAKCEPTOWANY :)&quot; i przejsc do zegarka.<br /> * Ewentualne wcisniecie klawisza NIE,<br /> * powoduje oczekiwanie i wyswietlenie napisu &quot;ZLA ODPOWIEDZ :(&quot;.<br /> * -------------------------------------------------------------------------------------------- */<br />/*PRZYWRACANIE OCZEKIWANIA NA ODPOWIEDZ: &quot;PRZYCISNIETY KLAWISZ 'NIE' W TRAKCIE ZALACZANIA ZASILANIA&quot;*/<br /><br />if (K_1_PRESS) { /*przywracanie braku odpowiedzi gdyby niechcacy sie nacisnelo*/<br />tak = 1; /*zmienna w ram wyzerowana*/<br />eeprom_write_byte(&amp;ee_tak, tak);/*zapis do eeprom ee_tak, wartosci zmiemnnej tak*/<br />lcd_locate(0, 0);<br />lcd_str(&quot;RESET NIE :(&quot;);/*info na LCD o przywroceniu pytania*/<br />}<br />_delay_ms(1000);<br />lcd_cls();<br /><br />while (tak != 2) { /*jezeli ee_tak !=2, (brak zgody)..powtarza sie pytanie*/<br /><br />/*-------------------------przykladowy napis*/<br />lcd_locate(0, 0);<br />lcd_str(&quot;CZY TO WOJTKA  ? &quot;);<br /><br />/*---------------------sugerowane odpowiedzi*/<br />lcd_locate(1, 13);<br />lcd_str(&quot;TAK&quot;);<br />lcd_locate(1, 0);<br />lcd_str(&quot;NIE&quot;);<br /><br />/*--------------------zaznaczenie odpowiedzi*/<br /><br />if (K_4_PRESS) { /*klawisz akceptacji*/<br />lcd_cls();<br />lcd_locate(0, 0);<br />lcd_str(&quot;ZAAKCEPTOWANY :)&quot;);<br />_delay_ms(3000);<br />tak = 2; /*odpowiedz TAK daje wartosc 2 */<br />eeprom_write_byte(&amp;ee_tak, tak);/* zapis wartosci 2 ze zmiennej tak do ee_tak */<br />otworz();/*funkcja otwierajaca szkatulke*/<br />}<br />if (K_1_PRESS) { /*klawisz bledny*/<br />lcd_locate(0, 0);<br />lcd_cls();<br />lcd_str(&quot;Z&quot; &quot;\x81&quot; &quot;A ODPOWIEDZ :(&quot;); /*\x83 to litera Ł */<br />_delay_ms(3000);<br />}<br />} /*petla wykonuje sie do momentu wcisniecia TAK, lub wylaczenia zasilania. :)*/<br /><br />DDR_D_CZER |= D_CZER; /*wstepne zgaszenie wnetrza*/<br />DDR_D_NIEB |= D_NIEB;<br /><br />/*----------------------------------------------------------------------------------------------*/<br />/***************************************PETLA GLOWNA PROGRAMU************************************/<br />while (1) {<br /><br />licz_czas();<br />pilnuj_budzik();<br /><br />if (flag_serwo) {<br />serwo();<br />flag_serwo = 0;<br />}<br /><br />/*-----------------------------zapis zmiennych do bufora_w ram-LCD- - ---------------------- */<br /><br />/*znaki wlasne w LCD zalezne od biezacego czasu, wybierane z tablicy znakow wlasnych ram*/<br />lcd_defchar(0x81, cyfry&#91;czasy.cz_go / 10&#93;);<br />lcd_defchar(0x82, cyfry&#91;czasy.cz_go % 10&#93;);<br />lcd_defchar(0x83, cyfry&#91;czasy.cz_mi / 10&#93;);<br />lcd_defchar(0x84, cyfry&#91;czasy.cz_mi % 10&#93;);<br />lcd_defchar(0x85, cyfry&#91;czasy.cz_se / 10&#93;);<br />lcd_defchar(0x86, cyfry&#91;czasy.cz_se % 10&#93;);<br /><br /><br />/*.....*....do bufora LCD czas zegarka.......................................*/<br /><br />/*zwykla czcionka................................*/<br />//uint_do_buf(czasy.cz_go, poz_y.cz_go, poz_x.cz_go);<br />//napis_do_buf(1, &quot;:&quot;, poz_y.cz_go, poz_x.cz_go + 2);<br />//uint_do_buf(czasy.cz_mi, poz_y.cz_mi, poz_x.cz_mi);<br />//napis_do_buf(1, &quot;:&quot;, poz_y.cz_mi, poz_x.cz_mi + 2);<br />//uint_do_buf(czasy.cz_se, poz_y.cz_se, poz_x.cz_se);<br />/*.......powyzsza czcionka oryginalna zamieniona ponizej na wlasna...........*/<br /><br />/*czcionka pogrubiona........................... */<br />napis_do_buf(1, &quot;\x81&quot;, poz_y.cz_go, poz_x.cz_go);<br />napis_do_buf(1, &quot;\x82&quot;, poz_y.cz_go, poz_x.cz_go + 1);<br /><br />napis_do_buf(1, &quot;:&quot;, poz_y.cz_go, poz_x.cz_go + 2);<br /><br />napis_do_buf(1, &quot;\x83&quot;, poz_y.cz_mi, poz_x.cz_mi);<br />napis_do_buf(1, &quot;\x84&quot;, poz_y.cz_mi, poz_x.cz_mi + 1);<br /><br />napis_do_buf(1, &quot;:&quot;, poz_y.cz_mi, poz_x.cz_mi + 2);<br /><br />napis_do_buf(1, &quot;\x85&quot;, poz_y.cz_se, poz_x.cz_se);<br />napis_do_buf(1, &quot;\x86&quot;, poz_y.cz_se, poz_x.cz_se + 1);<br /><br />/*......*...dzien, i budzik do bufora LCD....................................*/<br /><br />napis_do_buf(8, dni&#91;czasy.cz_dz&#93;, poz_y.cz_dz, poz_x.cz_dz);<br />uint_do_buf(czasy.b_mi, poz_y.b_mi, poz_x.b_mi);<br />napis_do_buf(1, &quot;:&quot;, poz_y.b_go, poz_x.b_go + 2);<br /><br />/*-------jezeli budzik wylaczony to wyswietlaj znaki -&gt; &quot;--:--&quot;*/<br />if (czasy.b_go == 24)<br />napis_do_buf(5, &quot;--:--&quot;, poz_y.b_go, poz_x.b_go);<br />else<br />uint_do_buf(czasy.b_go, poz_y.b_go, poz_x.b_go);<br />napis_do_buf(1, &quot;\x87&quot;, 1, 10); /*znak dzwoneczek*/<br /><br />pozycja_temp(0, 9); /*zapis do bufora LCD pomiaru temperatury co 15sek, we wskazanej pozycji y x */<br /><br /><br />if (flag_mrygaj) {/*mryganie ustawianych czasow pomiędzy pelnymi sekundami*/<br /><br />if (menu != podstawowe) { /*poza menu podstawowym*/<br /><br />uint8_t ile;<br />if (menu == us_dz_tyg) {<br />ile = 8; /*szerokosc znaku do bufora zamiast napisu dnia*/<br />} else<br />ile = 2; /*szerokosc pozostalych zmiennych czasu -mrygajace dwie cyfry*/<br /><br />napis_do_buf(ile, (&quot;========&quot;), *(menu + &amp;poz_y.b_go),/*zapis do bufora lcd*/<br />*(menu + &amp;poz_x.b_go));<br />}<br />}<br />/*------------------------------------wysylanie bufora na LCD--------------------------------*/<br />odswiez_lcd(flag_odswiez_LCD, string_lcd); /*wyslanie dwuch wierszy bufora na LCD*/<br /><br /><br />/*------------------------------------podswietlanie wnetrza----------------------------------*/<br />diody_r_b(200, 210); /*zakresy podswietlania wnetrza:--blu----20,0----blu&amp;red---21,0---red---*/<br /><br /><br />/*----------------------------------------obsluga klawiszy-----------------------------------*/<br />        /*-------------------------------------------------------------------------------------------*/<br />if (menu == podstawowe) {<br /><br />if (alarm) { /*jezeli wlaczyl sie alarm, nacisniecie dowolnego klawisza wylacza.*/<br /><br />piszcz(); /*alarm!*/<br /><br />if (K_1_PRESS || K_2_PRESS || K_3_PRESS || K_4_PRESS)/*jezeli nacisniesz*/<br /><br />alarm = 0; /*wylacz alarm*/<br />}<br /><br />else { /*jezeli alarm wylaczony to klawisze obsluguja funkcje;-*/<br /><br /><br /><br />/*----dzialanie_klawisza(  KLAWISZ,   f_1(wykonana raz),    zwloka*200ms ,    f_2(wykonywana cyklicznie co 200ms)  );*/<br /><br />dzialanie_klawisza( K_1_PRESS, otworz, 10, piszcz); /*otwieranie i dzwiek*/<br />dzialanie_klawisza( K_2_PRESS, ciemniej, 10, ciemniej); /*jasniej, (podswietlanie LCD)*/<br />dzialanie_klawisza( K_3_PRESS, jasniej, 10, jasniej); /*ciemniej, (podswietlanie LCD)*/<br />dzialanie_klawisza( K_4_PRESS, nastepne_menu, 10, piszcz);/*nastepne menu, buzzer*/<br />}<br />}<br />else if (menu == us_bu_go) { /* ustawianie - budzik godziny */<br />dzialanie_klawisza(K_1_PRESS, poprzednie_menu, 10, piszcz);<br />dzialanie_klawisza(K_2_PRESS, odejmij, 10, odejmij); /*odejmij ustawiane zmienne*/<br />dzialanie_klawisza(K_3_PRESS, dodaj, 10, dodaj); /*dodaj ustawiane zmienne*/<br />dzialanie_klawisza(K_4_PRESS, nastepne_menu, 10, piszcz);<br />}<br />else if (menu == us_bu_mi) { /* ustawianie - budzik minuty*/<br />dzialanie_klawisza(K_1_PRESS, poprzednie_menu, 10, piszcz);<br />dzialanie_klawisza(K_2_PRESS, odejmij, 10, odejmij);<br />dzialanie_klawisza(K_3_PRESS, dodaj, 10, dodaj);<br />dzialanie_klawisza(K_4_PRESS, nastepne_menu, 10, piszcz);<br />}<br />else if (menu == us_dz_tyg) { /* ustawianie - dzien tygodnia*/<br />dzialanie_klawisza(K_1_PRESS, poprzednie_menu, 10, piszcz);<br />dzialanie_klawisza(K_2_PRESS, odejmij, 10, odejmij);<br />dzialanie_klawisza(K_3_PRESS, dodaj, 10, dodaj);<br />dzialanie_klawisza(K_4_PRESS, nastepne_menu, 10, piszcz);<br />}<br />else if (menu == us_go) { /*ustawianie - godzin*/<br />dzialanie_klawisza(K_1_PRESS, poprzednie_menu, 10, piszcz);<br />dzialanie_klawisza(K_2_PRESS, odejmij, 10, odejmij);<br />dzialanie_klawisza(K_3_PRESS, dodaj, 10, dodaj);<br />dzialanie_klawisza(K_4_PRESS, nastepne_menu, 10, piszcz);<br />}<br />else if (menu == us_mi) { /*ustawianie - minut*/<br />dzialanie_klawisza(K_1_PRESS, poprzednie_menu, 10, piszcz);<br />dzialanie_klawisza(K_2_PRESS, odejmij, 10, odejmij);<br />dzialanie_klawisza(K_3_PRESS, dodaj, 10, dodaj);<br />dzialanie_klawisza(K_4_PRESS, nastepne_menu, 10, piszcz);<br />}<br />else if (menu == us_sek_res) { /*reset sekund */<br />dzialanie_klawisza(K_1_PRESS, poprzednie_menu, 10, piszcz);<br />dzialanie_klawisza(K_2_PRESS, odejmij, 10, odejmij);<br />dzialanie_klawisza(K_3_PRESS, dodaj, 10, dodaj);<br />dzialanie_klawisza(K_4_PRESS, nastepne_menu, 10, piszcz);<br />}<br /><br />} // KONIEC PETLI GLOWNEJ<br />} // KONIEC MAIN<br />/*====================================ALE NIE KONIEC ZABAWY=========================================*/[/syntax]<br /><br />moje.c<br />[syntax=c]/*<br /> * moje.c<br /> *<br /> *  Created on: 23 paź 2016<br /> *      Author: Darek<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;string.h&gt;<br /><br />/********************************************************************************************pliki mk_xxx*/<br />#include &quot;1Wire/ds18x20.h&quot;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />/**********************************************************************************************moje pliki*/<br />#include &quot;moje.h&quot;<br /><br />/**************************************************************************tablice znaków LCD- definicje*/<br />uint8_t stc&#91;&#93; = { 14, 10, 14, 32, 32, 32, 32, 32 }; /*znak stopnia*/<br /><br />uint8_t lit_L&#91;9&#93; = { 16, 16, 20, 24, 16, 16, 31, 32 };<br /><br />uint8_t cyfry&#91;10&#93;&#91;9&#93; = { { 31, 27, 27, 27, 27, 27, 27, 31 }, //0<br />{ 12, 28, 28, 12, 12, 12, 12, 12 }, //1<br />{ 31, 31, 3, 31, 31, 24, 31, 31 }, //2<br />{ 31, 31, 3, 31, 31, 3, 31, 31 }, //3<br />{ 27, 27, 27, 31, 31, 3, 3, 3 }, //4<br />{ 31, 31, 24, 31, 31, 3, 31, 31 }, //5<br />{ 31, 31, 24, 31, 31, 27, 31, 31 }, //6<br />{ 31, 31, 3, 7, 14, 28, 24, 24 }, //7<br />{ 31, 27, 27, 31, 31, 27, 27, 31 }, //8<br />{ 31, 27, 27, 31, 3, 3, 31, 31 } //9<br />};<br /><br />uint8_t alarm_znak&#91;&#93; = { 4, 14, 14, 14, 14, 31, 31, 4 }; // znak alarmu<br /><br />char dni&#91;7&#93;&#91;9&#93; = { &quot;PN______&quot;, &quot;_WT_____&quot;, &quot;__SR____&quot;, &quot;___CZ___&quot;, &quot;____PT__&quot;,<br />&quot;_____SO_&quot;, &quot;______ND&quot; };/*tablica napisow dni tygodnia*/<br /><br />/*-------------------------------------------------------------------------------------------bufor do LCD*/<br />char string_lcd&#91;2&#93;&#91;17&#93; = { { &quot;                &quot; }, { &quot;                &quot; } }; /*BUFOR LCD*/<br /><br />struct S_czasy /*budz_god,  budz_min, czas_god, czas_min, czas_sek, czas_dzien  */<br />ee_czasy EEMEM, min_wart = { 0, 0, 0, 0, 0, 0 }, max_wart = { 24, 59, 23, 59,<br />59, 6 }, poz_x = { 11, 14, 0, 3, 6, 0 }, /*pozycje wyswietlanych czsow-*/<br />poz_y = { 1, 1, 0, 0, 0, 1 };/*pozycje wyswietlanych czasow-*/<br /><br />/**********************************************zmienne globalne*******************************************/<br />uint8_t ee_tak EEMEM; /*zmienna w eeprom do przechowywania odpowiedzi 1-NIE, 2-TAK,*/<br /><br />/*-----------------------------------------------------------------------zmienne do obslugi mk_DS_18_B_20*/<br />uint8_t subzero, cel, cel_fract_bits, czujniki_cnt;<br /><br />volatile uint16_t temperatura = 0; /*do zapalania diod*/<br /><br />/*-------------------------------------------------------------------------------------------moje zmienne*/<br />volatile uint8_t poz_y_tem, poz_x_tem, buzer_wlacz; /*pozycja temperatury na LCD*/<br /><br />volatile uint8_t flag_sek, flag_piszcz = 0, flag_KL_200, flag_odswiez_LCD,<br />licz_ms_co_10 = 0, flag_ms_co_10, flag_mrygaj = 0, flag_otwieranie = 0,<br />flag_serwo = 0, licznik_a, menu = podstawowe, alarm = 0;<br /><br />volatile uint8_t tak; /*zmienna do tymczasowego przechowywania odpowiedzi w ram*/<br /><br /><br /><br />/*******************************funkcje do inicjalizacji**************************************************/<br />/*-------------------------------------------------------------------------------------------------------*/<br />void ustaw_timer_0(void) {/*---------timer_0 FAST_PWM, do podswietlania LCD, sprzetowy na timer_0 - PB3-*/<br /><br />DDR_PODS &amp;= ~ NOGA_PODS;<br /><br />TCCR0 |= (1 &lt;&lt; WGM01) | (1 &lt;&lt; WGM00); /*timer_0 tryb_3, szybki pwm(0-255)*/<br />// TCCR0 |= (1 &lt;&lt; COM01) | (1 &lt;&lt; COM00); /*przy porownaniu wysoki na wyjscie OC0 (bo przez T-PNP)*/<br />TCCR0 |= (1 &lt;&lt; COM01); //| (1 &lt;&lt; COM00)<br /><br />TCCR0 |= (1 &lt;&lt; CS00) | (1 &lt;&lt; CS02); /*preskaler 1024 = 70 Hz podswietlanie*/<br />OCR0 = 0; /*jasnoc - wypełnienie 0-255*/<br /><br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void ustaw_timer_1(void) { /*--------------------------timer_1  SERWO-+-90stopni -&gt; 20Hz . 1,5 - 2,5 ms.-*/<br /><br />/*tryb 14. Fast PWM TOP ICR1-------*/<br />TCCR1A |= (1 &lt;&lt; WGM11);<br />TCCR1B |= (1 &lt;&lt; WGM12) | (1 &lt;&lt; WGM13);<br /><br />/*porownanie zeruje OC1A*/<br />TCCR1A |= (1 &lt;&lt; COM1A1);<br /><br />/*preskaler 8 =  2 304 000 Hz----------*/<br /><br />//TCCR1B |= (1 &lt;&lt; CS11) | (1 &lt;&lt; CS10);//64<br />TCCR1B |= (1 &lt;&lt; CS11); //8<br /><br />/*ICR1 max = 2 304 000 Hz / 50Hz = 46080-1 (-1 bo od zera)*/<br />ICR1 = 46079;<br /><br />/* 20ms -&gt; 0,5ms=1152, 1ms=2304,  1,5ms=3456,  2ms=4608,  2,5ms = 5760*/<br />OCR1A = 1150; /*.......... 0,5 - 2,5ms*/<br /><br />DDR_OTWORZ &amp;= ~NOGA_OTWORZ;<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void ustaw_timer_2(void) { /*------------------------------------------timer_2 CTC, i odliczania czasu.-*/<br /><br />TCCR2 |= (1 &lt;&lt; WGM21); /*timer_2 tryb_2, CTC */<br />TCCR2 |= (1 &lt;&lt; CS00) | (1 &lt;&lt; CS01) | (1 &lt;&lt; CS02); /*preskaler 1024*/<br />OCR2 |= 178;/*18 432 000 / 1024 / 180 bo 0-179 = przerwanie co 10ms*/<br />TIMSK |= (1 &lt;&lt; OCIE2);<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void ustaw_wy_we(void) {/*--------------------------------------------------------------wejscia wyjscia-*/<br /><br />// DDR_PODS |= NOGA_PODS;/*sprzęt PWM wyjście OC0 na PB3*/<br /><br />DDR_BUZZER |= NOGA_BUZZER; /*wyjscie buzzera*/<br />BUZZER_OFF; /*niski*/<br /><br />DDR_K1 &amp;= ~ K_1; /*wejscie k1*/<br />DDR_K2 &amp;= ~ K_2; /*wejscie k1*/<br />DDR_K3 &amp;= ~ K_3; /*wejscie k1*/<br />DDR_K4 &amp;= ~ K_4; /*wejscie k1*/<br /><br />PORT_K1 |= K_1; /*podciagniecie*/<br />PORT_K2 |= K_2; /*podciagniecie*/<br />PORT_K3 |= K_3; /*podciagniecie*/<br />PORT_K4 |= K_4; /*podciagniecie*/<br />}<br /><br />/*----------------------------------****inne funkcje****-------------------------------------------------*/<br />void pilnuj_budzik(void) { /*------------------------------porownywanie czasu budzika z czasem aktualnym-*/<br />if (czasy.b_mi == czasy.cz_mi &amp;&amp; czasy.b_go == czasy.cz_go<br />&amp;&amp; czasy.cz_se == 0)<br />alarm = 1;<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void dodaj(void) { /*---------------------------------------------------dodawanie wskazywanych wartosci-*/<br /><br />if (*(menu + (&amp;(czasy.b_go))) &lt; *(menu + (&amp;(max_wart.b_go)))) {<br /><br />if (menu != us_sek_res) {<br />*(menu + (&amp;(czasy.b_go))) += 1; /*dodawanie wartości pod adresem menu*/<br />} else {<br />*(menu + (&amp;(czasy.b_go))) = 0; /*zerowanie sekund*/<br />}<br />} else {<br />*(menu + (&amp;(czasy.b_go))) = *(menu + (&amp;(min_wart.b_go)));<br />}<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void odejmij(void) {/*------------------------------------------------odejmowanie wskazywanych wartosci-*/<br />if (*(menu + (&amp;(czasy.b_go))) &gt; *(menu + (&amp;(min_wart.b_go)))) {<br /><br />if (menu != us_sek_res) {<br />*(menu + (&amp;(czasy.b_go))) -= 1;/*dodawanie wartości pod adresem menu*/<br />} else {<br />*(menu + (&amp;(czasy.b_go))) = 0; /*zerowanie sekund*/<br />}<br />} else {<br />*(menu + (&amp;(czasy.b_go))) = *(menu + (&amp;(max_wart.b_go)));<br />}<br />}<br /><br />/*-------------------------------------------------------------------------------------------------------*/<br />void otworz(void) { /*-------------------------------------------------------------otwieranie szkatulki-*/<br />flag_otwieranie = 1;<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void serwo(void) { /*------------------moje serwo 0,5 -&gt; 2,5ms -co 20 ms---------------funkcja do SERWA-*/<br /><br />if (flag_otwieranie == 1) {/*flaga otwierania-&gt; pwm++do max -&gt;kasowanie flagi-&gt; pwm--do min.-&gt; odlaczenie*/<br />if (OCR1A &lt;= 1155)<br />DDR_OTWORZ |= NOGA_OTWORZ; /*zalaczenie wyjscia*/<br /><br />if (OCR1A &lt; 5755) {<br />OCR1A += 10; /*zwiekszanie dlugosci sygnalu do max +90stopni*/<br />} else<br />flag_otwieranie = 2; /*po osiagnieciu max - koniec otwierania*/<br />}<br />/*----------------------gdy flaga==2 zamknij rygielek----------------------------------------------*/<br />else if (flag_otwieranie == 2) { /*gdy skonczylo sie otwieranie -&gt; zamykaj*/<br /><br />if ( OCR1A &gt; 1155)<br />OCR1A -= 10;<br />else { /*gdy dlugosc sygnalu osiagnie minimum -90stopni*/<br />DDR_OTWORZ &amp;= ~ NOGA_OTWORZ; /*pin serwa jako wejscie*/<br />PORT_OTWORZ &amp;= ~ NOGA_OTWORZ; /*bez podciagania do vcc*/<br />flag_otwieranie = 0;<br />}<br />}<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />/*-----------------------dzialanie_klawisza(KLAWISZ_NACISNIETY , F_1 'RAZ' , ZWLOKA , F_2 'CYKLICZNIE' )-*/<br />void dzialanie_klawisza(char nacisniety, void funk_1(void), uint8_t czas_1,<br />void funk_2(void)) {/*----*/<br />static volatile uint8_t czas;<br />czas = czas_1;<br />static volatile uint8_t klik = 0;<br />if (nacisniety) {<br />if (!klik) {<br />funk_1();<br />(klik) = 1;<br />}<br />if (flag_KL_200) {<br />if ((klik) &amp;&amp; (klik) &lt; 250)<br />(klik)++;<br />if ((klik) &gt; czas)<br />funk_2();<br />flag_KL_200 = 0;<br />}<br />}<br />if (! K_1_PRESS &amp;&amp; ! K_2_PRESS &amp;&amp; ! K_3_PRESS &amp;&amp; ! K_4_PRESS)<br />klik = 0;<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void licz_czas(void) { /*--------------------------------------------------------------odliczanie czasu-*/<br /><br />if (flag_sek) {<br /><br />if (czasy.cz_se &lt; 59) {<br />czasy.cz_se++;<br />} else {<br />czasy.cz_se = 0;<br />if (czasy.cz_mi &lt; 59) {<br />czasy.cz_mi++;<br />} else {<br />czasy.cz_mi = 0;<br />if (czasy.cz_go &lt; 23) {<br />czasy.cz_go++;<br />} else {<br />czasy.cz_go = 0;<br />czasy.cz_dz++;<br />if (czasy.cz_dz &gt; 6)<br />czasy.cz_dz = 0;<br />}<br />}<br />}<br />flag_sek--;<br />}<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void uint_do_buf(uint8_t czas, uint8_t pozy, uint8_t pozx) { /* ---------------zapis uint do bufora LCD-*/<br />string_lcd&#91;pozy&#93;&#91;pozx&#93; = (czas / 10) + '0';<br />string_lcd&#91;pozy&#93;&#91;pozx + 1&#93; = (czas % 10) + '0';<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void napis_do_buf(uint8_t ile, char tab&#91;ile + 1&#93;, uint8_t pozy, uint8_t pozx) { /*---char do bufora LCD-*/<br />for (int8_t j = 0; j &lt; ile; j++) {<br />string_lcd&#91;pozy&#93;&#91;pozx + j&#93; = tab&#91;j&#93;;<br />}<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void odswiez_lcd(uint8_t flaga, char string_lcd&#91;2&#93;&#91;17&#93;) {/* ----wyslanie stringa do LCD na obie linijki-*/<br />if (flaga) {<br />static uint8_t wiersz = 0;<br />lcd_locate(wiersz, 0);<br />lcd_str(string_lcd&#91;wiersz&#93;);<br />if (wiersz &lt; 1)<br />wiersz++;<br />else<br />wiersz = 0;<br />flaga = 0;<br />}<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void wyczysc_buf(void) { /*-------------------------------------------------------------czyszczenie LCD-*/<br />for (uint8_t i = 0; i &lt; 4; i++) {<br />strcpy(string_lcd&#91;i&#93;, &quot;                    &quot;);<br />}<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void pozycja_temp(uint8_t y, uint8_t x) { /*------------------------pomiar i wyslanie wynikow do bufora-*/<br />uint8_t poz_y_tem = y;<br />uint8_t poz_x_tem = x;<br />if (0 == (czasy.cz_se % 15))<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL);<br />if (1 == (czasy.cz_se % 15)) {<br />if ( DS18X20_OK<br />== DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel,<br />&amp;cel_fract_bits)) {<br />if (subzero)<br />string_lcd&#91;poz_y_tem&#93;&#91;poz_x_tem&#93; = '-'; /* jeśli subzero==1 zapisz znak minus do bufora_LCD */<br />else<br />string_lcd&#91;poz_y_tem&#93;&#91;poz_x_tem&#93; = ' '; /* jeśli subzero==0 zapisz znak plus do bufora_LCD) */<br />uint_do_buf(cel, poz_y_tem, poz_x_tem + 1); /* zapisz dziesiętne części temperatury w burorze_LCD */<br />string_lcd&#91;poz_y_tem&#93;&#91;poz_x_tem + 3&#93; = '.'; /* wyświetl kropkę */<br />string_lcd&#91;poz_y_tem&#93;&#91;poz_x_tem + 4&#93; = cel_fract_bits + '0'; /* zapisz dziesiętne części stopnia */<br />string_lcd&#91;poz_y_tem&#93;&#91;poz_x_tem + 5&#93; = '\x80';/*znak_stopnia*/<br />string_lcd&#91;poz_y_tem&#93;&#91;poz_x_tem + 6&#93; = 'C'; /*C*/<br />temperatura = (cel * 10) + (cel_fract_bits);<br />} else {<br />napis_do_buf(6, &quot;kiszka!&quot;, poz_y_tem, poz_x_tem);<br />}<br />}<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void jasniej(void) { /*----------------------------------------------------------------rozjasnianie LCD-*/<br /><br />if (OCR0 &lt; 253) {<br />OCR0 += 2;<br />DDR_PODS |= NOGA_PODS;<br />} else<br />piszcz();<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void ciemniej(void) { /*----------------------------------------------------------------zciemnianie LCD-*/<br />if (OCR0 &gt; 2) {<br />OCR0 -= 2;<br />} else {<br />piszcz();<br />DDR_PODS &amp;= ~ NOGA_PODS;<br />}<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void nastepne_menu(void) { /*---------------------------------------------przesuniecie na nastepne menu-*/<br />switch (menu) {<br />case podstawowe:<br />menu = us_bu_go;<br />break;<br />case us_bu_go:<br />menu = us_bu_mi;<br />break;<br />case us_bu_mi:<br />menu = us_go;<br />break;<br />case us_go:<br />menu = us_mi;<br />break;<br />case us_mi:<br />menu = us_sek_res;<br />break;<br />case us_sek_res:<br />menu = us_dz_tyg;<br />break;<br />case us_dz_tyg: {<br />menu = podstawowe;<br />zapisz_czasy();<br />}<br />break;<br />default:<br />break;<br />}<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void poprzednie_menu(void) { /*-----------------------------------------przesuniecie na poprzednie menu-*/<br />switch (menu) {<br />case us_dz_tyg:<br />menu = us_sek_res;<br />break;<br />case us_sek_res:<br />menu = us_mi;<br />break;<br />case us_mi:<br />menu = us_go;<br />break;<br />case us_go:<br />menu = us_bu_mi;<br />break;<br />case us_bu_mi:<br />menu = us_bu_go;<br />break;<br />case us_bu_go:<br />menu = podstawowe;<br />break;<br />default:<br />break;<br />}<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void piszcz(void) { /*-----------------------------------------------------------------sygnal dzwiekowy-*/<br />if (flag_piszcz)<br />BUZZER_ON; /*buzzer wylaczany w timerach prog razem z pelna sekunda*/<br />flag_piszcz = 0;<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void zapisz_czasy(void) { /*-----------------------------------------------------zapis czasow do eeprom-*/<br />eeprom_write_block(&amp;czasy, &amp;ee_czasy, sizeof(czasy));/*ram --&gt; eeprom*/<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void wczytaj_czasy(void) { /*----------------------------------------------------odczyt czasow z eeprom-*/<br />eeprom_read_block(&amp;czasy, &amp;ee_czasy, sizeof(czasy));/*eeprom --&gt; ram*/<br />}<br />/*-------------------------------------------------------------------------------------------------------*/<br />void diody_r_b(int prog_1, int prog_2) {/*-------------------------zapalanie diod od temperatury-*/<br /><br />if (temperatura &lt; prog_1) {<br />D_NIEB_ON;<br />D_CZER_OFF;<br />} else if (temperatura &gt;= prog_2) {<br />D_NIEB_OFF;<br />D_CZER_ON;<br />} else {<br />D_CZER_ON;<br />D_NIEB_ON;<br />}<br />}<br />/*-------------------------A TU MAM WRAZENIE ZE COS MOCNO POKOPALEM :(------------------------------------*/<br />/**************************************PRZERWANIE TIMER_2**************************************************/<br />ISR(TIMER2_COMP_vect) {<br /><br />if (flag_ms_co_10 &lt; 100)<br />flag_ms_co_10++;<br />else {<br />flag_ms_co_10 = 1;<br />flag_sek++;<br />BUZZER_OFF;<br />}<br /><br />flag_serwo = 1;<br />if (flag_ms_co_10 == 50)<br />flag_piszcz = 1;<br />if (flag_ms_co_10 % 25 == 0)<br />flag_odswiez_LCD = 1;<br />if (flag_ms_co_10 % 20 == 0)<br />flag_KL_200 = 1;<br />if (flag_ms_co_10 % 33 == 0)<br /><br />flag_mrygaj ^= (1 &lt;&lt; 0);<br /><br />}<br />/*----------------------------------------------KONIEC--&quot;MOJE.C&quot;------------------------------------------*/[/syntax]<br /><br />moje.h<br />[syntax=c]/*<br /> * moje.h<br /> *<br /> *  Created on: 23 paź 2016<br /> *      Author: Darek<br /> */<br /><br />#ifndef MOJE_H_<br />#define MOJE_H_<br /><br />/*************************************USTAWIENIA PINOW PORTOW*********************************************/<br /><br />/*podswietlanie LCD*/<br />#define DDR_PODS DDRB<br />#define PORT_PODS PORTB<br />#define NOGA_PODS (1&lt;&lt;PB3) /*TIMER_0 - OC0 PB3*/<br /><br />/*buzzer*/<br />#define DDR_BUZZER DDRD<br />#define PORT_BUZZER PORTD<br />#define NOGA_BUZZER (1&lt;&lt;PD7)<br /><br />/*pin otwierania*/<br />#define DDR_OTWORZ DDRD<br />#define PORT_OTWORZ PORTD<br />#define NOGA_OTWORZ (1&lt;&lt;PD5) /*TIMER_1 - OC1A PD5*/<br /><br />/*klawisz 1*/<br />#define PIN_K1 PINC<br />#define PORT_K1 PORTC<br />#define DDR_K1 DDRC<br />#define K_1 (1&lt;&lt;PC0)<br /><br />/*klawisz 2*/<br />#define PIN_K2 PINC<br />#define PORT_K2 PORTC<br />#define DDR_K2 DDRC<br />#define K_2 (1&lt;&lt;PC1)<br /><br />/*klawisz 3*/<br />#define PIN_K3 PINC<br />#define PORT_K3 PORTC<br />#define DDR_K3 DDRC<br />#define K_3 (1&lt;&lt;PC2)<br /><br />/*klawisz 4*/<br />#define PIN_K4 PINC<br />#define PORT_K4 PORTC<br />#define DDR_K4 DDRC<br />#define K_4 (1&lt;&lt;PC3)<br /><br />/*dioda czewona*/<br />#define PIN_D_CZER PINC<br />#define PORT_D_CZER PORTC<br />#define DDR_D_CZER DDRC<br />#define D_CZER (1&lt;&lt;PC4)<br /><br />/*dioda niebieska*/<br />#define PIN_D_NIEB PINC<br />#define PORT_D_NIEB PORTC<br />#define DDR_D_NIEB DDRC<br />#define D_NIEB (1&lt;&lt;PC5)<br /><br />/***********************************definicje ułatwiajace*************************************************/<br />/*do ATB*/<br />#define BUZZER_OFF PORT_BUZZER &amp;=~NOGA_BUZZER<br />#define BUZZER_ON PORT_BUZZER |=NOGA_BUZZER<br /><br />/*na stykowce*/<br />//#define BUZER_OFF PORT_BUZER |=NOGA_BUZER<br />//#define BUZER_ON PORT_BUZER &amp;=~NOGA_BUZER<br />/*podswietlanie wnetrza szkatulki - jeszcze nie wiemy czy przez Tr PNP czy NPN  */<br />/*na ATB bedzie tak :*/<br />#define D_CZER_ON PORT_D_CZER &amp;=~ D_CZER<br />#define D_NIEB_ON PORT_D_NIEB &amp;=~ D_NIEB<br />#define D_CZER_OFF PORT_D_CZER |= D_CZER<br />#define D_NIEB_OFF PORT_D_NIEB |= D_NIEB<br /><br />/*definicja - klawisz wcisniety*/<br />#define K_1_PRESS (!(PIN_K1 &amp; K_1))<br />#define K_2_PRESS (!(PIN_K2 &amp; K_2))<br />#define K_3_PRESS (!(PIN_K3 &amp; K_3))<br />#define K_4_PRESS (!(PIN_K4 &amp; K_4))<br />/*-------------------------------------------------------------------------------------------------------*/<br /><br />/**********************************tablice znaków LCD- deklaracje*****************************************/<br />extern uint8_t stc&#91;&#93;; /* znak stopni celsjusza*/<br /><br />uint8_t lit_L&#91;9&#93;;<br /><br />extern uint8_t cyfry&#91;10&#93;&#91;9&#93;;/*deklaracja tab - znaki wlasne 0123456789*/<br /><br />extern uint8_t alarm_znak&#91;&#93;; /* deklaracja -znak alarmu*/<br /><br />extern char dni&#91;7&#93;&#91;9&#93;; /*tablica napisow dni tygodnia- deklaracja*/<br /><br />extern char string_lcd&#91;2&#93;&#91;17&#93;; /*bufor LCD. do niego sa zapisywane zmiany, i co 0,5s wysylane na LCD     */<br /><br />/*************************************************zmienne globalne deklaracje*****************************/<br /><br />extern uint8_t ee_tak EEMEM; /*zmienna w eeprom do przechowywania odpowiedzi 1-NIE, 2-TAK,*/<br /><br />/*------------------------------zmienne do obslugi mk_DS_18_B_20-----------------------------------------*/<br />uint8_t subzero, cel, cel_fract_bits, czujniki_cnt;<br /><br />volatile uint16_t temperatura;/*do zapalania diod*/<br /><br />/*-------------------------------moje zmienne------------------------------------------------------------*/<br />extern volatile uint8_t poz_y_tem, poz_x_tem, buzer_wlacz; /*pozycja temperatury*/<br /><br />extern volatile uint8_t flag_sek, flag_piszcz, flag_KL_200, flag_mrygaj,<br />flag_odswiez_LCD, licz_ms_co_10,flag_ms_co_10, licznik_a, flag_otwieranie, flag_serwo,<br />menu, alarm;<br /><br />volatile uint8_t tak; /*zmienna do przechowywania odpowiedzi w eeprom*/<br /><br />/*-------------------------------------------------------------------------------------------------------*/<br />enum dzien {<br />po, wt, sr, cz, pt, so, ni,<br />};<br />enum menu {<br />us_bu_go, us_bu_mi, us_go, us_mi, us_sek_res, us_dz_tyg, podstawowe,<br />};<br /><br />struct S_czasy {<br />uint8_t b_go;<br />uint8_t b_mi;<br />uint8_t cz_go;<br />uint8_t cz_mi;<br />uint8_t cz_se;<br />uint8_t cz_dz;<br />} czasy, poz_y, poz_x;<br /><br />/*******************************************deklaracje funkcji inicjalizujących***************************/<br />void serwo(void);<br />void ustaw_timer_0(void);<br />void ustaw_timer_1(void);<br />void ustaw_timer_2(void);<br />void ustaw_wy_we(void);<br /><br />/*---------------------------------------deklaracje innych funkcji---------------------------------------*/<br /><br />void otworz(void);<br />void piszcz(void);<br />void odejmij(void);<br />void dodaj(void);<br />void jasniej(void);<br />void ciemniej(void);<br />void licz_czas(void);<br />void wyczysc_buf(void);<br />void zapisz_czasy(void);<br />void wczytaj_czasy(void);<br />void nastepne_menu(void);<br />void pilnuj_budzik(void);<br />void poprzednie_menu(void);<br />void diody_r_b(int prog_1, int prog_2);<br />void pozycja_temp(uint8_t y, uint8_t x);<br />void odswiez_lcd(uint8_t flaga, char string_lcd&#91;2&#93;&#91;17&#93;);<br />void uint_do_buf(uint8_t czas, uint8_t pozx, uint8_t pozy);<br />void napis_do_buf(uint8_t ile, char tab&#91;ile + 1&#93;, uint8_t pozy, uint8_t pozx);<br />void dzialanie_klawisza(char nacisniety, void funk_1(void), uint8_t czas_1, void funk_2(void));<br /><br />#endif /* MOJE_H_ */[/syntax]<br /><br />Jeżeli ktoś ma jakiś pomysł, sugestie lub uwagi do tego kodu lub projektu , - to śmiało.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Chętnie poczytamy i co będziemy umieli to poprawimy. <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 10 lis 2016, o 01:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-11-09T07:34:16+01:00</updated>
<published>2016-11-09T07:34:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174200#p174200</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174200#p174200"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174200#p174200"><![CDATA[
Może zdążysz jeszcze cos dodac do projektu.<br />Gdyby ominąć przewidywane nóżki na jakieś peryferia,<br />Albo zostawić wyprowadzone zlaczki i potem tylko dopisać do kodu.<br />Na razie są pwmy przypisane do OCXx.<br />Resztę można poprzestawiać. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 9 lis 2016, o 07:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2016-11-09T07:20:32+01:00</updated>
<published>2016-11-09T07:20:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174199#p174199</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174199#p174199"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174199#p174199"><![CDATA[
Dobry pomysł z tymi diodami. Pomysłów może być wiele na dodatki. Ale póki co wystarcza zwykle diody <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 9 lis 2016, o 07:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-11-09T02:36:57+01:00</updated>
<published>2016-11-09T02:36:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174198#p174198</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174198#p174198"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174198#p174198"><![CDATA[
Chętnie sobie o tych magikach pooglądam, pewnie jeszcze dziś.  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Tylko tak myślę sobie . co prawda święta blisko,<br />niemniej jednak lepiej żeby z tej szkatułki nie wyszła choinka.  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><br />Decyzja oczywiście należy do Wojtka, bo ja tylko pomagam <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  - na ile potrafię. <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /><br />A idzie mi jeszcze topornie.  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 9 lis 2016, o 02:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2016-11-08T22:06:07+01:00</updated>
<published>2016-11-08T22:06:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174183#p174183</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174183#p174183"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174183#p174183"><![CDATA[
<div class="quotetitle">mczarny napisał(a):</div><div class="quotecontent"><br />cześć<br /><br />&quot;no fajne cacko&quot; - jak powiedział klasyk <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Co do podświetlenia to ja bym poszedł w diody RGB<br /></div><br /><br />dokładnie a dokładniej to pomyślałem o  WS RGB tzw Magic Led <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Śmigają na 5V a i sterowanie nimi nie jest problemem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 8 lis 2016, o 22:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2016-11-08T21:56:25+01:00</updated>
<published>2016-11-08T21:56:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174181#p174181</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174181#p174181"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174181#p174181"><![CDATA[
cześć<br /><br />&quot;no fajne cacko&quot; - jak powiedział klasyk <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Co do podświetlenia to ja bym poszedł w diody RGB<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 8 lis 2016, o 21:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wojciechgorzolka]]></name></author>
<updated>2016-11-08T21:25:03+01:00</updated>
<published>2016-11-08T21:25:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174174#p174174</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174174#p174174"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174174#p174174"><![CDATA[
Temperatura od 20 do 21 będzie temperatura miłości <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> odpowiednia do zakazanych rzeczy, dlatego dwa kolory będą się świecić hehe. A tan na poważnie,to będzie to ciekawy efekt co całości. Jak już ma to być elektroniczną szkatułka, to z bajerami Oczywiście bez szaleństw,czyli bez Wi-Fi i tym podobnych rzeczy. Czasu już niewiele, tak więc elektronika będzie zrobiona na uniwersalnej płytce  PCB. Ale obiecujze,że jak się już wtajemniczę w projektowanie płytek,to przerobię układ na wytrawiana płytkę z możliwością rozbudowy układu o Wi-Fi, oraz inne ciekawe rozwiązania. Będzie wyprowadzenie gniazda kanda.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14082">wojciechgorzolka</a> — 8 lis 2016, o 21:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-11-08T21:09:00+01:00</updated>
<published>2016-11-08T21:09:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174171#p174171</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174171#p174171"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174171#p174171"><![CDATA[
Wojtek planuje jakieś dwie do wypełnienia światłem wnętrza.<br />Czerwona gdy powyżej 21°C,<br />Czerwona i niebieska pomiędzy 20°C - 21°C,<br />Niebieska poniżej 20°.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 8 lis 2016, o 21:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2016-11-08T21:03:09+01:00</updated>
<published>2016-11-08T21:03:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174168#p174168</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174168#p174168"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174168#p174168"><![CDATA[
Jakie diodki dajesz ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 8 lis 2016, o 21:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-11-08T20:46:31+01:00</updated>
<published>2016-11-08T20:46:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174165#p174165</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174165#p174165"/>
<title type="html"><![CDATA[Re: PROJEKT X- PUDEŁKO Z ZEGARKIEM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16432&amp;p=174165#p174165"><![CDATA[
To po konsultacjach z Wojtkiem, <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Jeszcze poprawiam kod (bo głupio demonstrować śmietnik) i dodaję diody,<br />a nie jestem biegły w pisaniu więc się trochę zejdzie. <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /> <br />No i oczywiście będziemy liczyć na podpowiedzi, co źle, co jak poprawiać i ulepszać dalej. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 8 lis 2016, o 20:46</p><hr />
]]></content>
</entry>
</feed>