<?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=47&amp;t=10143&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-01-10T18:49:54+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=47&amp;t=10143&amp;mode</id>
<entry>
<author><name><![CDATA[cyrixus]]></name></author>
<updated>2015-01-10T18:49:54+01:00</updated>
<published>2015-01-10T18:49:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10143&amp;p=113562#p113562</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10143&amp;p=113562#p113562"/>
<title type="html"><![CDATA[SSD1306 + DS18B20 + DS1302]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10143&amp;p=113562#p113562"><![CDATA[
Witam Podlaczylem do Funduino Uno wyswietlacz SSD1306 i zegar DS1302 na magistrali I2C. Do pinu 10 odlaczony termometr DS18B20. Biblioteki wyswietlacza jak i zegara sa Adafruit-a. Od termometru niestety nie pamietam. Moj problem polega na tym ze miga mi wyswietlana temperatura na wyswietlaczu. Zegar chodzi normalnie, temperature tez zczytuje normalnie, lecz sama wartosc temperatury miga. Wklejam kod i prosze o pomoc. Zaznaczam ze dopiero ucze sie programowania.<br />[syntax=cpp]#include &lt;SPI.h&gt;<br />#include &lt;Wire.h&gt;<br />#include &lt;Adafruit_GFX.h&gt;<br />#include &lt;Adafruit_SSD1306.h&gt;<br />#include &lt;OneWire.h&gt;<br />#include &quot;RTClib.h&quot;<br />#include &lt;Timers.h&gt; <br />Timers &lt;3&gt; akcja; // na poczatek 2 niezależne wątki (procesy, zadania, procedury, akcje itp.)<br />RTC_DS1307 rtc;<br />OneWire  ds(10);<br /><br />#define OLED_RESET 4<br />Adafruit_SSD1306 display(OLED_RESET);<br /><br />void Czysc (){<br />  <br />  display.clearDisplay();<br />  <br />}<br /><br />void PokazCzasIdata(){<br />  // ---------- DS1307 -------------  <br />  DateTime now = rtc.now();<br />  display.setTextSize(1);<br />  display.setTextColor(WHITE);<br />  display.setCursor(0,0);<br />  display.print(&quot;Godzina: &quot;);<br />  <br />    display.print(now.hour(), DEC);<br />    display.print(':');<br />    display.print(now.minute(), DEC);<br />    display.print(':');<br />    display.print(now.second(), DEC);<br />    display.println();<br />  <br />  display.print(&quot;Data:    &quot;);<br />  display.print(now.year(), DEC);<br />    display.print('/');<br />    display.print(now.month(), DEC);<br />    display.print('/');<br />    display.print(now.day(), DEC);<br />    display.print(' ');<br />    <br />  // -----------------------------<br />  <br /><br />}<br />void ShowDS18B20(){<br />  // ------- DS18B20 -------------<br />  byte i;<br />  byte present = 0;<br />  byte type_s;<br />  byte data&#91;12&#93;;<br />  byte addr&#91;8&#93;;<br />  float celsius;<br />  if ( !ds.search(addr)) {<br />    ds.reset_search();<br />    delay(250);<br />    return;<br />  }<br />  ds.reset();<br />  ds.select(addr);<br />  ds.write(0x44, 1);        // start conversion, with parasite power on at the end<br />  //delay(1000);     // maybe 750ms is enough, maybe not<br />  present = ds.reset();<br />  ds.select(addr);    <br />  ds.write(0xBE);         // Read Scratchpad<br /><br />  for ( i = 0; i &lt; 9; i++) {           // we need 9 bytes<br />    data&#91;i&#93; = ds.read();<br />  }<br /><br />  int16_t raw = (data&#91;1&#93; &lt;&lt; 8) | data&#91;0&#93;;<br />  if (type_s) {<br />    raw = raw &lt;&lt; 3; // 9 bit resolution default<br />    if (data&#91;7&#93; == 0x10) {<br />      // &quot;count remain&quot; gives full 12 bit resolution<br />      raw = (raw &amp; 0xFFF0) + 12 - data&#91;6&#93;;<br />    }<br />  } <br />  else {<br />    byte cfg = (data&#91;4&#93; &amp; 0x60);<br />    if (cfg == 0x00) raw = raw &amp; ~7;  // 9 bit resolution, 93.75 ms<br />    else if (cfg == 0x20) raw = raw &amp; ~3; // 10 bit res, 187.5 ms<br />    else if (cfg == 0x40) raw = raw &amp; ~1; // 11 bit res, 375 ms<br />  }<br />  celsius = (float)raw / 16.0;<br />  //display.clearDisplay();<br />  display.setTextSize(2);<br />  //display.setTextColor(WHITE);<br />  display.setCursor(1, 30);<br />  display.print(celsius);<br />  display.setCursor(62, 30);<br />  display.print(&quot;C&quot;);<br />}<br /><br />void setup(void) {<br />  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64)<br />  display.clearDisplay();<br /><br />  display.setTextSize(1);<br />  display.setTextColor(WHITE);<br />  display.setCursor(7,1);<br />  display.print(&quot;Termometr I Czas&quot;);<br />  display.display();<br />  delay(1000);<br />  display.clearDisplay();<br />  Wire.begin();<br />  rtc.begin();<br /> // rtc.adjust(DateTime(2015, 1, 10, 12, 58, 0));  <br /><br />  //akcja.attach(0, 1000,ShowDS18B20); // pokazujemy temperature co 2 s<br /> // akcja.attach(1, 1000,PokazCzasIdata); // pokazujemy czas co sekunde<br /> // akcja.attach(2, 10,Czysc);<br />}<br /><br />void loop(void) {<br />  //akcja.process();<br />  PokazCzasIdata();<br />  ShowDS18B20();<br />  <br />  <br />  <br />    display.display();<br />  <br />  delay(10);<br />  display.clearDisplay();<br /><br />}[/syntax]<br /><br />domyslam sie ze cos jest nie tak z funkcja ShowDS18B20(); tylko nie mam pojecia co.<br />Jak probowalem wyswietlac sama temp. i w funkcji loop umiecilem to co jest w ShowDS18B20(); to wszystko bylo ok.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2582">cyrixus</a> — 10 sty 2015, o 18:49</p><hr />
]]></content>
</entry>
</feed>