Обнуление массива, запутался.
- Войдите на сайт для отправки комментариев
Вс, 28/12/2014 - 18:14
Есть DTMF приемник, набираем код и записываем его в массив затем проверяем с массивом замка, если правильно то зажигаем светодиод и обнуляем массив кода, если запутались с вводом - нажимаем звездочку и обнуляем массив.
Все работает нормально, но когда массив обнуляется после этого новые данные в него не записываются. Наверно чего то упустил?
const int StD=17; const int Q[4]={3,4,19,18}; int key; int n =0; int led = 13; int k[10]; //массив ключа int z[9]; // массив замка int pos = 0; int var=0; void setup() { Serial.begin(9600); for(int i=0;i<4;i++) pinMode(Q[i],INPUT); pinMode (17,INPUT); pinMode (13,1); z[0]=1; z[1]=2; z[2]=3; z[3]=4; //0 z[4]=5; //# z[5]=6; z[6]=7; z[7]=8; z[8]=9; } void loop() { key=0; for(int i=0;i<4;i++) key+=digitalRead(Q[i])<<i; if(digitalRead(17)==1 && var==0) { var=1; //записываем в массив код k[pos] = key; pos++; } if(digitalRead(17)==0) {var=0;} if(key==11) for (int n=0; n <9; n++) { k[n] = 0; } //если запутались с вводом нажимаем (*) и обнуляем массив if(k[0]==z[0]&&k[1]==z[1]&&k[2]==z[2]&&k[3]==z[3]&&k[4]==z[4]&&k[5]==z[5]&&k[6]==z[6]&&k[7]==z[7]&&k[8]==z[8]) { digitalWrite(13,1); Serial.println("open"); delay(3000); digitalWrite(13,0); for (int n=0; n <9; n++) { k[n] = 0; } //правильный код получен теперь обнуляем массив } int i; for (i = 0; i < 9; i = i + 1) { Serial.println(k[i]);} //смотрим все что творится в массиве через монитор. }
Необходимо обнулять переменную pos.
Присоединяюсь и еще добавлю, что если индекс (переменная pos) не контролируется на максимальное значение, то будут проблемы при нажатии без звездочки больше 10 раз. После этого программа будет выполняться непредсказуемо.
на счет переполнения pos понял, исправлю. Но пока проблема осталась, не пишет после сброса.
на счет переполнения pos понял, исправлю. Но пока проблема осталась, не пишет после сброса.
Не рекомендую одну и ту же переменную использовать для разных целей, это грабли
maksim, спасибо за готовый код! Все заработало как и положено.
А что это такое
memset(k, 0, 9);
ни где не видел такой записи в массивНашел, это функция из С. Теперь понятно.