Перекодировка 7 сегментного кода в десятичный
- Войдите на сайт для отправки комментариев
Пнд, 24/11/2014 - 22:01
Здравствуйте. Подскажите пожалуста, можно ли опрашивать цифровые входы ардуино через регистры. Необходимо перекодировать информацию с АЦП 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. Нужно ли равенство = или сравнение == ? Или вообще все в корне неверно?
Все в корне не верно. Должно быть так: if ( PINC == B01100000) int C= 100;
Спасибо за ответ!
Все в корне не верно. Должно быть так: if ( PINC == B01100000) int C= 100;
Ещё int лишний:
if ( PINC == B01100000) C= 100;
Ну и, конечно, код который три раза повторяется, так и просится в отдельную функцию. :)
А вообще 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; }у мега328 нет порта А
вы что куда подключаете?
Дело в том, что у меня не мега328, а мега 2560.
Понял свою ошибку. Дело в том что у меня была раньше мега328 и я не поменял в программе тип платы. Сейчас ошибку не выдает. Спасибо!