UNO+Датчик Холла+Дисплей TM1637

CHUHO
Offline
Зарегистрирован: 18.11.2016

Доброго  времени,

ситуация следующая, скачал  скетч (http://alexgyver.ru/arduino/tachometer_disp.txt) ,  дисплей на TM74HC595D.

А у мне нужно использовать дисплей TM1637.

Пытаюсь разобраться, но так как это вообще моя первая попытка работы с микроконтролером, то даётся тяжко.

Поэтому прошу помочь изменить скетч.

//-----------дисплей-----------

#include <TM74HC595Display.h>
int SCLK = 7;
int RCLK = 6;
int DIO = 5;
TM74HC595Display disp(SCLK, RCLK, DIO);
unsigned char LED_0F[29];
//--------дисплей-------

unsigned long lastflash;
int RPM;

void setup() {
	Serial.begin(9600);  //открыть порт
	attachInterrupt(0,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала
	pinMode(3, OUTPUT);   //3 пин как выход
	digitalWrite(3, HIGH);  //подать 5 вольт на 3 пин
	//для дисплея цифры
	LED_0F[0] = 0xC0; //0
	LED_0F[1] = 0xF9; //1
	LED_0F[2] = 0xA4; //2
	LED_0F[3] = 0xB0; //3
	LED_0F[4] = 0x99; //4
	LED_0F[5] = 0x92; //5
	LED_0F[6] = 0x82; //6
	LED_0F[7] = 0xF8; //7
	LED_0F[8] = 0x80; //8
	LED_0F[9] = 0x90; //9
}

void sens() {
	RPM=60/((float)(micros()-lastflash)/1000000);  //расчет
	lastflash=micros();  //запомнить время последнего оборота
}

void loop() {
	disp.digit4(RPM,50);  //вывод на дисплей

	if ((micros()-lastflash)>1000000){ //если сигнала нет больше секунды
		RPM=0;  //считаем что RPM 0
	}
}
 
CHUHO
Offline
Зарегистрирован: 18.11.2016

переделал насколько верно не понимаю 

//-----------дисплей-----------
#include <TM1637.h>
#define DISPLAY_CLK_PIN 3
#define DISPLAY_DIO_PIN 4
 
TM1637 display(DISPLAY_CLK_PIN, DISPLAY_DIO_PIN);
 
//--------дисплей-------
 
unsigned long lastflash;
int RPM;
 
void setup() {
  Serial.begin(9600);  //открыть порт
  attachInterrupt(0,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала
  //Включаем и настраиваем индикатор
  display.set();
  display.init();}
 
void sens() {
  RPM=60/((float)(micros()-lastflash)/1000000);  //расчет
  lastflash=micros();  //запомнить время последнего оборота
}
 
void loop() {
     display.display(RPM,50);
  //вывод на дисплей
 
  if ((micros()-lastflash)>1000000){ //если сигнала нет больше секунды
    RPM=0;  //считаем что RPM 0
  }
}
 
ругается и загружать в Uno не хочет, пишет:
exit status 1
'sens' was not declared in this scope
 
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

компилируете 1.6.12?

Всё неправильно, разберитесь с библиотекой и какие в ней функции реализованы, скачал первую попавшуюся:
 

 //-----------дисплей-----------
#include <TM1637Display.h>
#define DISPLAY_CLK_PIN 3
#define DISPLAY_DIO_PIN 4
 
TM1637Display display(DISPLAY_CLK_PIN, DISPLAY_DIO_PIN);
 
//--------дисплей-------
 
unsigned long lastflash;
int RPM;

 

void setup() {
  Serial.begin(9600);             //открыть порт
  attachInterrupt(0,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала
                                  //Включаем и настраиваем индикатор
//  display.set();
  display.setBrightness(0x0f);
//  display.init();
              }
 void sens() {
  RPM=60/((float)(micros()-lastflash)/1000000);  //расчет
  lastflash=micros();             //запомнить время последнего оборота
}

 
void loop() {
  //   display.display(RPM,50);
                                      //вывод на дисплей
 
  if ((micros()-lastflash)>1000000){  //если сигнала нет больше секунды
    RPM=0;                            //считаем что RPM 0
  }
}

* `setSegments` - Sets the raw value of the segments of each digit
* `showNumberDec` - Displays a decimal number
* `setBrightness` - Sets the brightness of the display

CHUHO
Offline
Зарегистрирован: 18.11.2016

Да я понимаю , что все неправильно )

версия 1,6,12

разобраться с библиотекой ? а как , я пыталься найти примеры и на их основе понять

 

 

 

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Пример лежит в примерах:

#include <Arduino.h>
#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3

// The amount of time (in milliseconds) between tests
#define TEST_DELAY   2000

const uint8_t SEG_DONE[] = {
	SEG_B | SEG_C | SEG_D | SEG_E | SEG_G,           // d
	SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,   // O
	SEG_C | SEG_E | SEG_G,                           // n
	SEG_A | SEG_D | SEG_E | SEG_F | SEG_G            // E
	};

TM1637Display display(CLK, DIO);

void setup()
{
}

void loop()
{
  int k;
  uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
  display.setBrightness(0x0f);
  
  // All segments on
  display.setSegments(data);
  delay(TEST_DELAY);
  
  // Selectively set different digits
  data[0] = 0b01001001;
  data[1] = display.encodeDigit(1);
  data[2] = display.encodeDigit(2);
  data[3] = display.encodeDigit(3);
  
  for(k = 3; k >= 0; k--) {
	display.setSegments(data, 1, k);
	delay(TEST_DELAY);
	}
	
  display.setSegments(data+2, 2, 2);
  delay(TEST_DELAY);
  
  display.setSegments(data+2, 2, 1);
  delay(TEST_DELAY);
  
  display.setSegments(data+1, 3, 1);
  delay(TEST_DELAY);
 
  
  // Show decimal numbers with/without leading zeros
  bool lz = false;
  for (uint8_t z = 0; z < 2; z++) {
	for(k = 0; k < 10000; k += k*4 + 7) {
		display.showNumberDec(k, lz);
		delay(TEST_DELAY);
	}
	lz = true;
  }
  
  // Show decimal number whose length is smaller than 4
  for(k = 0; k < 4; k++)
	data[k] = 0;
  display.setSegments(data);
  
  display.showNumberDec(153, false, 3, 1);
  delay(TEST_DELAY);
  display.showNumberDec(22, false, 2, 2);
  delay(TEST_DELAY);
  display.showNumberDec(0, true, 1, 3);
  delay(TEST_DELAY);
  display.showNumberDec(0, true, 1, 2);
  delay(TEST_DELAY);
  display.showNumberDec(0, true, 1, 1);
  delay(TEST_DELAY);
  display.showNumberDec(0, true, 1, 0);
  delay(TEST_DELAY);

  // Brightness Test
  for(k = 0; k < 4; k++)
	data[k] = 0xff;
  for(k = 0; k < 16; k++) {
    display.setBrightness(k);
    display.setSegments(data);
    delay(TEST_DELAY);
  }
    
  // Done!
  display.setSegments(SEG_DONE);
  
  while(1);

 

CHUHO
Offline
Зарегистрирован: 18.11.2016

Благодарю,

буду пытаться применить.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Вот так точно откомпилируется:

//-----------дисплей-----------
#include <TM1637Display.h>
#define DISPLAY_CLK_PIN 3
#define DISPLAY_DIO_PIN 4
 
TM1637Display display(DISPLAY_CLK_PIN, DISPLAY_DIO_PIN);
 
//--------дисплей-------
 
unsigned long lastflash;
int RPM;

 

void setup() {
  Serial.begin(9600);             //открыть порт
  attachInterrupt(0,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала
                                  //Включаем и настраиваем индикатор
//  display.set();
  display.setBrightness(0x0f);
//  display.init();
              }
 void sens() {
  RPM=60/((float)(micros()-lastflash)/1000000);  //расчет
  lastflash=micros();             //запомнить время последнего оборота
}

 
void loop() {
   display.showNumberDec(RPM,50);
                                      //вывод на дисплей
 
  if ((micros()-lastflash)>1000000){  //если сигнала нет больше секунды
    RPM=0;                            //считаем что RPM 0
  }
}

 

CHUHO
Offline
Зарегистрирован: 18.11.2016
Скомпилировался ) , спасибо.
 
Правда дисплейчик так и неожил , буду пытать  дальше 
arbaletvlz
Offline
Зарегистрирован: 23.02.2016

Вечером доберусь до своего, у меня работает на ура. Скину и скетч и подключения и фото.

arbaletvlz
Offline
Зарегистрирован: 23.02.2016
#include "TM1637.h"
#define CLK 3//pins definitions for TM1637 and can be changed to other ports       
#define DIO 2
TM1637 tm1637(CLK,DIO);
void setup()
{
  tm1637.init();
  tm1637.set(7);//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
}
void loop()
{
  int8_t NumTab[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//0~9,A,b,C,d,E,F
  int8_t ListDisp[4];
  unsigned char i = 0;
  unsigned char count = 0;
  delay(150);
  while(1)
  {
    i = count;
    count ++;
    if(count == sizeof(NumTab)) count = 0;
    for(unsigned char BitSelect = 0;BitSelect < 4;BitSelect ++)
    {
      ListDisp[BitSelect] = NumTab[i];
      i ++;
      if(i == sizeof(NumTab)) i = 0;
    }
    tm1637.display(0,ListDisp[0]);
    tm1637.display(1,ListDisp[1]); 
    tm1637.display(2,ListDisp[2]);
    tm1637.display(3,ListDisp[3]);
    delay(300);
  }
}
arbaletvlz
Offline
Зарегистрирован: 23.02.2016

На экране DIO и CLK соответственно соединяем с 2 и 3 цифровыми пинами, ну и про питание не забываем.

В приведенном скетче на 4 сегментном экране реализована бегущая строка - цифры и буквы от А до F

CHUHO
Offline
Зарегистрирован: 18.11.2016

Благодарю .