Дисковый телефон

minchserg
Offline
Зарегистрирован: 04.10.2015

Помогите допилить скетч до конца. 

Появилось желание сделать кодовую панель из дискового наберателя. На нем контакта: счетчик, реверс и общая земля. Счетчик в спокойном состоянии замкнут с землей. При прокручивании диска, реверс замыкается с землей. При обратном возращении диска, счетчик размыкается N количество раз, далее реверс отмыкается от земли. 

Ниже приведенный скетч работает иначе. Сначало нужно позамыкать счетчик сколько задано, потом один раз реверс. И так далее, пока реверс не будет нажат 4 раза. Далее срабатывает один из светодиодов (правильный код, либо ложный).  Так же в скетче прописана кнопка сброса. Как правильно проинвертировать пины, чтобы все заработало как необходимо? 

 

ВОТ САМ СКЕТЧ:
 
#define PIN_SW_COUNTER 2
#define PIN_SW_REVERSE 3
#define PIN_SW_HANGUP  4
 
#define PIN_LED_PASS 52
#define PIN_LED_FAIL 53
#define LEN_PASSCODE 4
 
#define DELAY_DEBOUNCE 50
 
const uint8_t pass[LEN_PASSCODE] = {1,2,3,4};
uint8_t code[LEN_PASSCODE];
uint8_t n_digits = 0;
 
void setup()
{
  pinMode(PIN_SW_COUNTER, INPUT_PULLUP);
  pinMode(PIN_SW_REVERSE, INPUT_PULLUP);
  pinMode(PIN_SW_HANGUP, INPUT_PULLUP);
  pinMode(PIN_LED_PASS, OUTPUT);
  pinMode(PIN_LED_FAIL, OUTPUT);
}
 
void loop()
{
 
  
  if (!digitalRead(PIN_SW_HANGUP))
  {
  n_digits = 0;
  for (uint8_t i = 0; i < n_digits; i++) code[i] = 0;
  digitalWrite(PIN_LED_PASS, LOW);
  digitalWrite(PIN_LED_FAIL, LOW);
  }
  if (!digitalRead(PIN_SW_COUNTER))
  {
  code[n_digits]++;
  delay(DELAY_DEBOUNCE);
  while (!digitalRead(PIN_SW_COUNTER));
  delay(DELAY_DEBOUNCE);
  }
  if (!digitalRead(PIN_SW_REVERSE))
  {
  n_digits++;
  delay(DELAY_DEBOUNCE);
  while (!digitalRead(PIN_SW_REVERSE));
  delay(DELAY_DEBOUNCE);
  }
  if (n_digits>=LEN_PASSCODE)
  {
  bool match = true;
  for (uint8_t i = 0; i < LEN_PASSCODE; i++) if (pass[i]!=code[i]) match = false;
  if (match) digitalWrite(PIN_LED_PASS, HIGH);
  else digitalWrite(PIN_LED_FAIL, HIGH);
  n_digits = 0;
  for (uint8_t i = 0; i < n_digits; i++) code[i] = 0;
  }
}
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Почему Вы считаете, что на пост не содержащий даже слова "пожалуйста", зато содержащий совершенно нечитабельный код, вставленный с нарушеним правил форума (http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii ) кто-то откликнется? Вы оптимист! :)))

vvadim
Offline
Зарегистрирован: 23.05.2012

а вдруг....))))