TM1637

Odpovědět
celeron
Příspěvky: 17
Registrován: 31 črc 2017, 08:15
Reputation: 0

TM1637

Příspěvek od celeron » 17 srp 2017, 17:31

Vážení, podařilo se Vám někomu rozhýbat tohle?
Nejdříve jsem si myslel, že mám vadnej displej a nebo řadič TM1637. Pak jsem začal měřit oscilem a zjistil, že na UNO na pinech CLK a DIO (a na všech dalších) je trvale LOW. Nevím, jestli je problém v knihovně ale nechodí ani příklady k ní přiložené. Stáhnul jsem tohle a tohle jelo hned na první dobrou. Hodiny už makaj. ;)
Jirka

mrna101
Příspěvky: 7
Registrován: 03 kvě 2018, 17:18
Reputation: 0

Re: TM1637

Příspěvek od mrna101 » 03 kvě 2018, 17:28

našel jsem to na ebay. je to v knihovně v souboru .cpp změnit 50 na 100(údaj v závorce). Výsledek byl okamžitý. :D

Editing the TM1637-master library for arduino with a 16MHz crystal

For arduino with a 16 MHz crystal, you need to edit it in the TM1637Display library to:
void
TM1637Display :: bitDelay ()
{
delayMicroseconds (100);

mrna101
Příspěvky: 7
Registrován: 03 kvě 2018, 17:18
Reputation: 0

Re: TM1637

Příspěvek od mrna101 » 03 kvě 2018, 17:35

Mám ale jiný problém. Hodiny šlapou a měřím teplotu na dalasu a neumím rozsvítit desetinnou tečku u tohoto displeje.
#include <TM1637Display.h>
#include <Wire.h>
#include <DS3231.h>
#include <OneWire.h>
#include <DallasTemperature.h>
float a;
int tepl;
const int pinCidlaDS = 4;
OneWire oneWireDS(pinCidlaDS);
DallasTemperature senzoryDS(&oneWireDS);
DS3231 rtc;
RTCDateTime datumCas;
#define CLK 12
#define DIO 13
TM1637Display display(CLK, DIO);
int x;
int y;
int w;
byte s = 0;
byte r;

void setup() {
rtc.begin();
senzoryDS.begin();
display.setBrightness(10);
}
void loop() {
senzoryDS.requestTemperatures();
a = senzoryDS.getTempCByIndex(0);
tepl = a * 100;
datumCas = rtc.getDateTime();
uint8_t vypis[] = { 0, 0, 0, 0 };
x = datumCas.hour * 60;
y = datumCas.minute;
w = x + y;
vypis[0] = display.encodeDigit((w/60)/10);
vypis[1] = display.encodeDigit((w/60)%10);
vypis[2] = display.encodeDigit((w%60)/10);
vypis[3] = display.encodeDigit((w%60)%10);
display.setSegments(vypis);
delay(250);
vypis[1] = vypis[1]+128;
display.setSegments(vypis);
delay(250);
s = s + 1;
if(s == 5){
uint8_t vypis[] = { 0, 0, 0, 0 };//nastavení displeje na zobrazení teploty
vypis[1]=display.encodeDigit(tepl /1000);//teplota desítky
vypis[2]=display.encodeDigit((tepl %1000)/100);//teplota jednotky
vypis[3]=display.encodeDigit(((tepl %1000)%100)/10);//?teplota desetina jednotky
if(tepl < 0){
vypis[0]=(SEG_G);
}
display.setSegments(vypis);

delay(1000);
s = 0;
}
}

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 14 hostů