не выводится переменная на дисплей

soloma_84
Offline
Зарегистрирован: 18.04.2016
unsigned long micros_sp = 0;  
volatile int sp;  
#define CLOCK_PIN 4
#define RESET_PIN 5
int speed = 0;

void resetNumber()
{
    // Для сброса на мгновение ставим контакт
    // reset в HIGH и возвращаем обратно в LOW
    digitalWrite(RESET_PIN, HIGH);
    digitalWrite(RESET_PIN, LOW);
}

void showNumber(int n)
{
    // Первым делом обнуляем текущее значение
    resetNumber();

 
    // Далее быстро «прокликиваем» счётчик до нужного
    // значения
    //while (n) {
       digitalWrite(CLOCK_PIN, HIGH);
       digitalWrite(CLOCK_PIN, LOW);
    //}
}

void setup(){  
   attachInterrupt(1, speedometr, RISING);  
  Serial.begin(9600); 
  tone (7, 100);
  pinMode(2, INPUT_PULLUP);
  pinMode(RESET_PIN, OUTPUT);
    pinMode(CLOCK_PIN, OUTPUT);
 
    // Обнуляем счётчик при старте, чтобы он не оказался
    // в случайном состоянии
    resetNumber();
}  

void loop(){ 
  
   showNumber(sp);
  
} 

void speedometr(){                 
   sp = (600000.0 / (micros() - micros_sp)); //600000.0 - 6 имп./м  1000000.0 - 10 имп./м и т.д 
   micros_sp = micros(); 
} 

 

 

soloma_84
Offline
Зарегистрирован: 18.04.2016

Здравствуйте! подскажите пожалуйста,если не сложно,почему не выводится переменная (sp) на 7-ми сегментный дисплей,при том что другие цифры показывает. дисплей подключен через драйвер.Заранее спасибо

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

А где сам код вывода, собственно?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DIYMan пишет:

А где сам код вывода, собственно?

В строках 23-25, только while ТС закомментировал зачем-то.

А также ТС забыл нам сказать, что у него там стоит счётчик-дешифратор типа К176ИЕ4 или CD4026 или ещё что-то из той же оперы, который собственно и долже всё показывать.

ТС, может будете менее скрытным и расскажете, что у Вас там и как?

soloma_84
Offline
Зарегистрирован: 18.04.2016
unsigned long micros_sp = 0;  
volatile int sp;  
#define CLOCK_PIN 4
#define RESET_PIN 5
int speed = 0;

void resetNumber()
{
    // Для сброса на мгновение ставим контакт
    // reset в HIGH и возвращаем обратно в LOW
    digitalWrite(RESET_PIN, HIGH);
    digitalWrite(RESET_PIN, LOW);
}

void showNumber(int n)
{
    // Первым делом обнуляем текущее значение
    resetNumber();

 
    // Далее быстро «прокликиваем» счётчик до нужного
    // значения
    while (n--) {
       digitalWrite(CLOCK_PIN, HIGH);
       digitalWrite(CLOCK_PIN, LOW);
    }
}

void setup(){  
   attachInterrupt(1, speedometr, RISING);  
  Serial.begin(9600); 
  tone (7, 100);
  pinMode(2, INPUT_PULLUP);
  pinMode(RESET_PIN, OUTPUT);
    pinMode(CLOCK_PIN, OUTPUT);
 
    // Обнуляем счётчик при старте, чтобы он не оказался
    // в случайном состоянии
    resetNumber();
}  

void loop(){ 
  
   showNumber(sp);
  
} 

void speedometr(){                 
   sp = (600000.0 / (micros() - micros_sp)); //600000.0 - 6 имп./м  1000000.0 - 10 имп./м и т.д 
   micros_sp = micros(); 
} 

 

Прошу прощения! Чуть не тот код выложил. Вот правильный. Драйвер 4026.Код брал отсюда http://wiki.amperka.ru/%D0%B4%D0%B8%D1%81%D0%BF%D0%BB%D0%B5%D0%B8-%D0%B8-%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D1%8B:7-%D1%81%D0%B5%D0%B3%D0%BC%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9-%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

23, 26 строка поправь по примеру

не обязательно постоянно выводить, запоминай старое значение. если новое и старое не равны тогда выводи. да и вывод можно прямо в прерывание запихнуть, а то какие будут последствия если во время вывода сработает прерывание, все равно делаев нет. но управлять все равно лучше через регистры (если в прерывание засунешь). так меньше вероятности ошибки

soloma_84
Offline
Зарегистрирован: 18.04.2016

jeka_tm пишет:

23, 26 строка поправь по примеру

не обязательно постоянно выводить, запоминай старое значение. если новое и старое не равны тогда выводи. да и вывод можно прямо в прерывание запихнуть, а то какие будут последствия если во время вывода сработает прерывание, все равно делаев нет. но управлять все равно лучше через регистры (если в прерывание засунешь). так меньше вероятности ошибки

спасибо!  Попробую.