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
TM1637
Re: TM1637
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ý.
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);
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);
Re: TM1637
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;
}
}
#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;
}
}
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 5 hostů