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