Перекодировка 7 сегментного кода в десятичный

andreyblinkov
Offline
Зарегистрирован: 18.10.2014

Здравствуйте. Подскажите пожалуста, можно ли опрашивать цифровые входы ардуино через регистры. Необходимо перекодировать информацию с АЦП 572ПВ2 в десятичный целочисленный код с последующей его обработкой. Для этого нужно опросить и сравнить 3 разряда в каждом по 7 сегментов плюс знак полярности. Разряд тысячи ненужен. Каждый разряд будет соответствовать одному регистру величиной в байт, 1 бит будет постоянным и незадействованным. Кусок кода.

int A;
int B;
int C;
int X;
void setup()
{
DDRA = B00000000;
DDRB = B00000000;
DDRC = B00000000;
}

void loop()
{
if (digitalRead(PINA = B11111100)) int A = 0;
if (digitalRead(PINA = B01100000)) int A = 1;
if (digitalRead(PINA = B11011010)) int A = 2;
if (digitalRead(PINA = B11110010)) int A = 3;  
if (digitalRead(PINA = B01100110)) int A = 4;
if (digitalRead(PINA = B10110110)) int A = 5;
if (digitalRead(PINA = B10111100)) int A = 6;
if (digitalRead(PINA = B11100000)) int A = 7;
if (digitalRead(PINA = B11111110)) int A = 8;
if (digitalRead(PINA = B11110110)) int A = 9;
if (digitalRead(PINB = B11111100)) int B = 0;
if (digitalRead(PINB = B01100000)) int B = 10;
if (digitalRead(PINB = B11011010)) int B = 20;
if (digitalRead(PINB = B11110010)) int B = 30; 
if (digitalRead(PINB = B01100110)) int B = 40;
if (digitalRead(PINB = B10110110)) int B = 50;
if (digitalRead(PINB = B10111100)) int B = 60;
if (digitalRead(PINB = B11100000)) int B = 70;
if (digitalRead(PINB = B11111110)) int B = 80;
if (digitalRead(PINB = B11110110)) int B = 90;
if (digitalRead(PINC = B11111100)) int C = 0;
if (digitalRead(PINC = B01100000)) int C = 100;
if (digitalRead(PINC = B11011010)) int C = 200;
if (digitalRead(PINC = B11110010)) int C = 300; 
if (digitalRead(PINC = B01100110)) int C = 400;
if (digitalRead(PINC = B10110110)) int C = 500;
if (digitalRead(PINC = B10111100)) int C = 600;
if (digitalRead(PINC = B11100000)) int C = 700;
if (digitalRead(PINC = B11111110)) int C = 800;
if (digitalRead(PINC = B11110110)) int C = 900;
int X = A + B + C;
}

В данном коде присутствуют единицы, десятки и сотни, соответствующие выходам на 7 сегментные индикаторы. Вопрос такой - правильна ли запись PINC = B10110110. Нужно ли равенство = или сравнение == ? Или вообще все в корне неверно?

faraddin
Offline
Зарегистрирован: 11.08.2013

Все в корне не верно. Должно быть так: if ( PINC == B01100000) int C= 100;

andreyblinkov
Offline
Зарегистрирован: 18.10.2014

Спасибо за ответ!

Datak
Offline
Зарегистрирован: 09.10.2014

faraddin пишет:

Все в корне не верно. Должно быть так: if ( PINC == B01100000) int C= 100;

Ещё int лишний: 

if ( PINC == B01100000) C= 100;

Ну и, конечно, код который три раза повторяется, так и просится в отдельную функцию. :)

andreyblinkov
Offline
Зарегистрирован: 18.10.2014

А вообще PINA, PINB, PINC это переменная?

Просто ошибку скетч выдает.

int A;
int B;
int C;
int X;
void setup()
{
}

void loop()
{
if (PINA == B11111100) A = 0;
if (PINA == B01100000) A = 1;
if (PINA == B11011010) A = 2;
if (PINA == B11110010) A = 3;  
if (PINA == B01100110) A = 4;
if (PINA == B10110110) A = 5;
if (PINA == B10111100) A = 6;
if (PINA == B11100000) A = 7;
if (PINA == B11111110) A = 8;
if (PINA == B11110110) A = 9;
if (PINB == B11111100) B = 0;
if (PINB == B01100000) B = 10;
if (PINB == B11011010) B = 20;
if (PINB == B11110010) B = 30; 
if (PINB == B01100110) B = 40;
if (PINB == B10110110) B = 50;
if (PINB == B10111100) B = 60;
if (PINB == B11100000) B = 70;
if (PINB == B11111110) B = 80;
if (PINB == B11110110) B = 90;
if (PINC == B11111100) C = 0;
if (PINC == B01100000) C = 100;
if (PINC == B11011010) C = 200;
if (PINC == B11110010) C = 300; 
if (PINC == B01100110) C = 400;
if (PINC == B10110110) C = 500;
if (PINC == B10111100) C = 600;
if (PINC == B11100000) C = 700;
if (PINC == B11111110) C = 800;
if (PINC == B11110110) C = 900;
int X = A + B + C;
}
 
 
 
 
 
sket123.cpp: In function 'void loop()':
sket123:10: error: 'PINA' was not declared in this scope
sket123:11: error: 'PINA' was not declared in this scope
sket123:12: error: 'PINA' was not declared in this scope
sket123:13: error: 'PINA' was not declared in this scope
sket123:14: error: 'PINA' was not declared in this scope
sket123:15: error: 'PINA' was not declared in this scope
sket123:16: error: 'PINA' was not declared in this scope
sket123:17: error: 'PINA' was not declared in this scope
sket123:18: error: 'PINA' was not declared in this scope
sket123:19: error: 'PINA' was not declared in this scope
axill
Offline
Зарегистрирован: 05.09.2011

у мега328 нет порта А

вы что куда подключаете?

andreyblinkov
Offline
Зарегистрирован: 18.10.2014

Дело в том, что у меня не мега328, а мега 2560.

andreyblinkov
Offline
Зарегистрирован: 18.10.2014

Понял свою ошибку. Дело в том что у меня была раньше мега328 и я не поменял в программе тип платы. Сейчас ошибку не выдает. Спасибо!