UNO+Датчик Холла+Дисплей TM1637
- Войдите на сайт для отправки комментариев
Пт, 18/11/2016 - 15:15
Доброго времени,
ситуация следующая, скачал скетч (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
}
}
переделал насколько верно не понимаю
компилируете 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
Да я понимаю , что все неправильно )
версия 1,6,12
разобраться с библиотекой ? а как , я пыталься найти примеры и на их основе понять
Пример лежит в примерах:
#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);Благодарю,
буду пытаться применить.
Вот так точно откомпилируется:
//-----------дисплей----------- #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 } }Вечером доберусь до своего, у меня работает на ура. Скину и скетч и подключения и фото.
На экране DIO и CLK соответственно соединяем с 2 и 3 цифровыми пинами, ну и про питание не забываем.
В приведенном скетче на 4 сегментном экране реализована бегущая строка - цифры и буквы от А до F
Благодарю .