NEED HELP!

arduino_test
Offline
Зарегистрирован: 17.08.2013

Суть вопроса в следующем:

Необходимо реализовать систему из 7 кнопок, при нажатии на каждую выдавало опеределенно сообщение (BUTTON 1, BUTTON 2  итд).  Да и еще: систему необходимо реализовать без резисторов, то-есть на землю 7 проводов, и 7 цифровых входов занимаем.

const int buttonPin = 4;       
int previousButtonState = HIGH;  
int counter = 0;               

void setup() {
    pinMode(buttonPin, INPUT);
   Keyboard.begin();
}

void loop() {
  
  int buttonState = digitalRead(buttonPin);
  
  if ((buttonState != previousButtonState) 
 
  && (buttonState == HIGH)) {

    counter++;
   
    Keyboard.print("BUTTON ");
    Keyboard.println(" 1.");
  }
  previousButtonState = buttonState; 
}

 

1) Как реализовать для нескольких кнопок?
Включение выключение не нужно. просто тупо чтобы при нажатии выдавало кнопка 1, кнопка 2 итд.
 
Чтение мануалов не поогло, с несколькими кнопками и сообщениями не смог найти примеров и статей.
Буду благодарен помощи.
axill
Offline
Зарегистрирован: 05.09.2011

для нескольких кнопок ваш код нужно продублировать последовательно для каждой кнопки

если не используете резисторов то не забудьте активировать внутреннюю поттяжку через digitalWrite(buttonPin, HIGH)

Клапауций
Offline
Зарегистрирован: 10.02.2013

God will help...

arduino_test
Offline
Зарегистрирован: 17.08.2013

Скомпилировалось, работает кнопка 2, после замыкания кнопки 2 с землей останавливается, но в непонятном порядке выдает кнопки 1 3 и 6, хотя их не ззамыкаем.

 

const int buttonPin = 3;          // input pin for pushbutton
const int buttonPin1 = 4;          // input pin for pushbutton
const int buttonPin2 = 5;          // input pin for pushbutton
const int buttonPin3 = 6;          // input pin for pushbutton
const int buttonPin4 = 7;          // input pin for pushbutton
const int buttonPin5 = 8;          // input pin for pushbutton
const int buttonPin6 = 9;          // input pin for pushbutton
int previousButtonState = HIGH;   // for checking the state of a pushButton
int counter = 0;                  // button push counter

void setup() {
  // make the pushButton pin an input:
  pinMode(buttonPin, INPUT);
   pinMode(buttonPin1, INPUT);
    pinMode(buttonPin2, INPUT);
     pinMode(buttonPin3, INPUT);
      pinMode(buttonPin4, INPUT);
       pinMode(buttonPin5, INPUT);
        pinMode(buttonPin6, INPUT);
  // initialize control over the keyboard:
  Keyboard.begin();
}

void loop() {
  // read the pushbutton:
  int buttonState = digitalRead(buttonPin);
  // if the button state has changed, 
  if ((buttonState != previousButtonState) 
    // and it's currently pressed:
  && (buttonState == HIGH)) {
        // type out a message
    Keyboard.print("BUTTON ");
    Keyboard.println("1");
     }
else {int buttonState = digitalRead(buttonPin1);
  // if the button state has changed, 
  if ((buttonState != previousButtonState) 
    // and it's currently pressed:
  && (buttonState == HIGH)) {
       // type out a message
    Keyboard.print("BUTTON ");
    Keyboard.println("2");
  }
  // save the current button state for comparison next time:
  previousButtonState = buttonState; 
}
if (buttonState == LOW);
else {int buttonState = digitalRead(buttonPin2);
  // if the button state has changed, 
  if ((buttonState != previousButtonState) 
    // and it's currently pressed:
  && (buttonState == HIGH)) {
       // type out a message
    Keyboard.print("BUTTON ");
    Keyboard.println("3");
  }
  // save the current button state for comparison next time:
  previousButtonState = buttonState; 
}
if (buttonState == LOW);
else {int buttonState = digitalRead(buttonPin3);
  // if the button state has changed, 
  if ((buttonState != previousButtonState) 
    // and it's currently pressed:
  && (buttonState == HIGH)) {
       // type out a message
    Keyboard.print("BUTTON ");
    Keyboard.println("4");
  }
  // save the current button state for comparison next time:
  previousButtonState = buttonState; 
}
if (buttonState == LOW);
else {int buttonState = digitalRead(buttonPin4);
  // if the button state has changed, 
  if ((buttonState != previousButtonState) 
    // and it's currently pressed:
  && (buttonState == HIGH)) {
       // type out a message
    Keyboard.print("BUTTON ");
    Keyboard.println("5");
  }
  // save the current button state for comparison next time:
  previousButtonState = buttonState; 
}
if (buttonState == LOW);
else {int buttonState = digitalRead(buttonPin5);
  // if the button state has changed, 
  if ((buttonState != previousButtonState) 
    // and it's currently pressed:
  && (buttonState == HIGH)) {
       // type out a message
    Keyboard.print("BUTTON ");
    Keyboard.println("6");
  }
  // save the current button state for comparison next time:
  previousButtonState = buttonState; 
}}

 

leshak
Offline
Зарегистрирован: 29.09.2011

Вначале нужно прочитать 7-ть раз мантру "я не буду бездумно называть темы лишь бы как".

Потом сесть и подумать о:

1. Откуда взялся buttonState == LOW если в изначальном скетче его небыло, а нам посоветовали "просто сдублируйте".
2. Почему мы "дублировали" как-то очень выборочно. То что нам потребуется сем РАЗНЫХ переменных buttonPin - cообразили. А остальные переменные?

Вы явно не вникали "как же работает оригинальный скетч". Иначае поняли бы, что в previousButtonState сохраняется прошлое нажатие кнопки. После дублирования, какой именно кнопки там состояние будет сохранятся? Той которую нажали последней? А потом использоватся это значение будет для определения нажались ли другие кнопки?   Бред же выходит. Наверное для каждой кнопки свой previuseButtonState - был бы логичней. Да и... если не ставим цель экономить память - семь штук buttonStateN - тоже не помешал бы. Тогда совет "просто сдублируйте" - вообще можно выполнить не включая мозг. Просто сем раз скопировать и поправить циферки в имени переменной.

А когда заработает.... можно почухать затылок и почитать for . Авось поситят идеи как не выполнять мартышкину работу по 7-ми кратному дублированию одной и той же работы.

arduino_test
Offline
Зарегистрирован: 17.08.2013

Раобрался, спасибо (digitalWrite). Работает как нужно!

arduino_test
Offline
Зарегистрирован: 17.08.2013

1

leshak
Offline
Зарегистрирован: 29.09.2011

>Еще подскажите пожалуйста как сделать что бы один символ выдавал

Хм.... Вряд ли такое кто либо до вас делал. Трудно найти решение. Шо же тут посоветовать? На разве что - почитать arduino.ru. Там на форуме часто про кнопки спрашивают/разъясняют. Даже ветки, зачем-то, прикрепленные делают. Наверное - для красоты.

arduino_test
Offline
Зарегистрирован: 17.08.2013

Поспешил с комментарием, нашел. добавил  delay(1000); . Спасибо большое за наводки.

arduino_test
Offline
Зарегистрирован: 17.08.2013

Поспешил с комментарием, нашел. добавил  delay(1000); . Спасибо большое за наводки.