Перекодировка 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 это переменная?
Просто ошибку скетч выдает.
у мега328 нет порта А
вы что куда подключаете?
Дело в том, что у меня не мега328, а мега 2560.
Понял свою ошибку. Дело в том что у меня была раньше мега328 и я не поменял в программе тип платы. Сейчас ошибку не выдает. Спасибо!