Здравствуйте! Помогите, пожалуйста, исправить такую проблему: Дисплей должен выводить то, что я ввожу на клавиатуру в обратном порядке(т.е. если я ввожу 4, затем 5, затем 3, то должно высветиться 354). Однако, первая введённая цифра, когда доходит до 3-го разряда, уменьшается на 1, причём нестабильно, однако почти всегда(на этом примере - вместо 354 высвечивается 353). Вот код: Код (C++): #include <QuadDisplay.h> int i; int j; int val=0; int per[4]; int razryad=0; boolean vihod; void setup() { for(i=4; i<=7; i++){ pinMode(i, OUTPUT); } for(j=8; j<=10; j++){ pinMode(j, INPUT); } pinMode(11, OUTPUT); Serial.begin(9600); } void loop() { vihod=false; dannye(); } void dannye(){ while(vihod==false){ for (i = 4; i <= 7; i++){ digitalWrite(i, HIGH); for(j=8; j<=10; j++){ if (digitalRead(j) == HIGH) { delay(800); Serial.print(i-3); Serial.print(" row, "); Serial.print(j-7); Serial.print(" column is "); Serial.println(op(i,j)); if(op(i,j)==10){ vihod = true; } val+=op(i,j)*(pow(10, razryad)); Serial.println(val); Serial.println(razryad); razryad++; displayInt(3, val, true); } } digitalWrite(i, LOW); } } } int op(int x, int y){//op - ОПерделение чисел if((3*(x-4)+y-7)==11){ return(0); } else{ return(3*(x-4)+y-7); } }
iBoy, как я понимаю вы сканируете клавиатуру 3х4 (что равно 12), а в функции проверяете на равенство 11 Код (C++): //ваш код if((3*(x-4)+y-7) == 11) //возможно должно быть так if((3*(x-4)+y-7) >= 11)
Это нужно не для этого. Это формула определения номера кнопки. Если кнопка =11 по формуле, то по факту это - 0. Заранее спасибо всем!
Спасибо, но не помогло. Мало того, как я заметил зависит скорее не от случая, а от конкретного вводимого числа.