Отображение отрицательных чисел

Всем привет! Народ, нужна помощь со скетчем:

int sign;

long value;
int result2, result3, result4, result5;
float result;

int clockpin = 3;
int datapin = 6;
int datapin2 = 7;
unsigned long tempmicros;

#include "LedControl.h"
LedControl lc = LedControl(10,12,11,3);


void setup() {
 
  pinMode(clockpin, INPUT_PULLUP);
  pinMode(datapin, INPUT_PULLUP);
  pinMode(datapin2, INPUT_PULLUP); 
 
  lc.shutdown(0,false);     // z, нижняя ось
  
  lc.setIntensity(0,15);     // Яркость, 0-min, 15-max
  
  lc.clearDisplay(0);       // clear screen
  
  lc.setChar(0,7,'A',0);   // ABS
  
}

 void loop () {
  while (digitalRead(clockpin)==HIGH) {} //если часы LOW ждут, пока они не вернутся к HIGH
  tempmicros=micros();
  while (digitalRead(clockpin)==LOW) {} //дождитесь окончания импульса HIGH
  if ((micros()-tempmicros)>500) { //если HIGH-импульс был длиннее 500 микронов, мы находимся в начале новой последовательности бит
    decode(); //decode the bit sequence
  }
    if ((micros()-tempmicros)>500) { //если HIGH-импульс был длиннее 500 микронов, мы находимся в начале новой последовательности бит
    decode2(); //decode the bit sequence
  }
}

void decode() {
  sign=1;
  value=0;
  for (i=0;i<23;i++) {
    while (digitalRead(clockpin)==HIGH) { } //подождите, пока часы вернутся к HIGH - первый бит не нужен
    while (digitalRead(clockpin)==LOW) {} //подождите, пока часы вернутся к LOW
    if (digitalRead(datapin)==LOW) {
      if (i<20) {
        value|= 1<<i;
      }
      if (i==20) {
        sign=-1;
      }
    }
  }
  result=(value*sign)/100.00;
  result2=result*100;
  result3=result2/10;
  result4=result2/100;
  result5=result2/1000;  
 
}
void decode2() {
  sign=1;
  value=0;
  for (i=0;i<23;i++) {
    while (digitalRead(clockpin)==HIGH) { } //подождите, пока часы вернутся к HIGH - первый бит не нужен
    while (digitalRead(clockpin)==LOW) {} //подождите, пока часы вернутся к LOW
    if (digitalRead(datapin2)==LOW) {
      if (i<20) {
        value|= 1<<i;
      }
      if (i==20) {
        sign=-1;
      }
    }
  }
  result=((value*sign)/100.00)/2;
  result2=result*100;
  result3=result2/10;
  result4=result2/100;
  result5=result2/1000;  
  
lc.setDigit(0,4,result5/10,false);
lc.setDigit(0,3,result5%10,false);
 lc.setDigit(0,2,result4%10,true);
lc.setDigit(0,1,result3%10,false);
lc.setDigit(0,0,result2%10,false);  

}

Суть: Это т.н. УЦИ на фрезерный станок, данные с цифрового штангенциркуля выводятся на семисегментный индикатор через ардуино естественно. Проблема: все работает, НО!.. при переходе штангеля на отрицательные показания, знак “минус” не отображается, а это крайне неудобно в работе… Может кто подсказать, что куда дописать? Сам я в этом деле не шарю от слова “вообще”, скетч не мой (я просто разместил…:)). Сам пошарился по инету в поисках примеров, ну типа “сделать по образу и подобию”, увы… С ардуино столкнулся в первый и скорей всего в последний раз, т.ч. “погружаться с головой” в тему смысла как-бы особого и нет, да и время, будь оно не ладно, уходит…

при таком раскладе лучше разместить заказв платном разделе, за тысячу-две напишут

При выводе цифирь:

if (значение отрицательное) {
  lc.setChar(0,5,'-',false);
} else {
  lc.setChar(0,5,'+',false);
}

Сижу ломаю штангенциркуль из нержавейки - в минус идти не желает сука …

1 лайк

А ты возьми цифровой, отведи куда нибудь на середину и выставь ноль

Не доверяю я вашим цифровым свистоперделкам !!! :grinning:

это да, на механическом глазом можно взять точность в два раза выше точности разрешения, а на цифровом как - никак )))