02-11-2019, 17:46
Witam. Mam problem rodzaju dziwnego. Program który liczy impulsy na wejściu przy pomocy zbocza, liczy czas między impulsami i tworzy liczbę binarną. Jeżeli wstawiam funkcję do wyświetlenia napisu po osiągnięciu odpowiedniej. Niestety DMD2 nie wyświetla mi napisu na P10 - myślę że jest to spowodowane TIMERAMI użytymi do zliczania czasu między przerwaniami ale nie jestem pewny. Wklejam kod programu - może ktoś coś podpowie.
Kod:
#include <SPI.h>
#include <DMD2.h>
#include <fonts/Arial_Black_16.h>
SoftDMD dmd(2,1);
DMD_TextBox box(dmd,0,0,64,16);
volatile unsigned int timer1_counter;
volatile long dane;
volatile int i=0;
void setup()
{
Serial.begin(9600);
dmd.setBrightness(10);
dmd.selectFont(Arial_Black_16);
dmd.begin();
box.print("testowy_napis");
delay(1000);
dane = 0;
jedynka();
attachInterrupt(0, starttimer, RISING);
TCCR1A = 0;
TCCR1B = 0;timer1_counter = 0;
TCNT1 = timer1_counter;
}
void starttimer()
{
static unsigned long lastTime;
unsigned long timeNow = micros();
if (timeNow - lastTime < 600)
return;
if (timeNow - lastTime < 6000) {
dane=dane<<1;
dane++;
}
if ((timeNow - lastTime > 6500) && (timeNow - lastTime < 10000)) {
dane=dane<<1;
}
//i++;
if ((timeNow - lastTime > 100000)){ dane=0; i=0;}
lastTime = timeNow;
}
void jedynka() {
SoftDMD dmd(2,1);
DMD_TextBox box(dmd,0,0,64,16);
dmd.setBrightness(10);
dmd.selectFont(Arial_Black_16);
dmd.begin();
box.print(dane);
box.print("1231234");
delay(1000);
dmd.fillScreen(true);
delay(1000);
dmd.clearScreen();
delay(1000);
dmd.end();
return (0);
}
void loop()
{
jedynka();
}