Hello, I just founded this community and I would be happy if I receive some help from more experienced. I have one problem. Lets say that I have 5 push buttons and 3 leds. Led1 turns on if at least 1 out of the 5 push buttons is pressed. Led2 turns on if at lest 3 push buttons are pressed and Led3 turns on if at least 4 push buttons are pressed. How can this be solved more efficient that what I already did? I have a couple of questions. Are these momentary pushbuttons that you have to hold down all at once, if for instance you want the condition to be 4 buttons pressed are you debouncing the buttons?
Something like this. I am using a pushbutton that needs to be pressed and holded if I want to light a LED with it, so yes, these are momentary pushbuttons. With the code above everything works fine, I do not debouncing the buttons, I know a little about this how it can be done hardware;using a capacitor or software;with debouncing code.
Exactly, order of the presses are not important, important is just that LED1 turns on when I press at least one pushbutton, it can be pushbutton nr. Same for LED2, not important which pushbuttons are pressed but there have to be at least 3 pushbuttons pressed at the same time.
And for LED3, it will turns on minimum 4 pressed pushbuttons. I got this code which at first sight looks ok but…it is not working for me. Here is my Proteus simulation of same case, using logical gates Sans titre. One thing mechanical switches always need are pull-resistors to provide a logic level in open state. I tried with switch cases yesterday and I got stucked with the code and than went to sleep.
But I will do it now because I want to understand it fully. About pulldown resistors I forgot to mention that I used them when I made this circuit on breadboard. I used 10k resistors, one per pushbutton, closing to GND pull-down resistor. Like I said, breadboard circuit works ok with the code in first post, I was trying to see what are other options to solve this.
And Ric one was good and will the one version with switch cases. What should I change in that code with arrays that it will function? If your buttons are closing to GND you need pull-up resistors to provide the opposite level when not closed.
Now I connected LCD display to show which buttons is pressed and now with lcd display code included I have problem that leds are not bright enough if I with push buttons combinations light on led1 or led2.
But if I press 4 or 5 buttons at the same time, all leds turn on at full force.Do you have an application where you want multiple buttons for different user inputs?
Maybe you have a timer and you want one button for minutes and another for hours. In this tutorial, we are going to use Arduino to explore how to make one button have the functionality of two or more.
Arduino : One Push Button Multiple Functions (Single Press, Double Press, Long-Time Press)
Based on how we press the button, different LEDs will illuminate. Follow the instructions and schematic below to get the circuit set up before we dive into the mechanics of the Arduino code. Now, when you press the push button which will electrically connect both sides of the buttonpin 2 to will have ground voltage applied.
We will use this ground voltage input to trigger our different functions. One way is to have the number of presses determine the output. Another way that we can implement multiple functions with one button is for the user to hold down the button for different lengths of time with the length of the hold determining the output. For example, if the user holds the button for half a second and releases, something happens. If she holds it for 2 seconds, something different happens.
This latter method of using button hold length time to determine separate functions is the strategy we will learn here. Before I go any further though, I would like to thank Steve for creating the base Arduino code that we will be using. Steve is a member of the Premium Arduino course a couple of months ago, he was new to Arduino. While creating a home automation project, he was in need of using a single button to do multiple things, and came up with a very simple way to make it happen.
Thanks Steve! Here is the complete sketch, I recommend looking it over first, and then we will discuss it piece by piece below. At the top of the sketch, we find the comments. You should make it a habit to read the comments in a sketch before jumping into the mechanics of the code. The comments should lay the groundwork for what is going to happen in the program and will help you interpret the intent of the code as you begin to analyze it.
One Button Multiple Functions !!#Arduino
Arduino Stack Exchange is a question and answer site for developers of open-source hardware and software that is compatible with Arduino.
It only takes a minute to sign up. I am behind a problem of controling multiple leds with multiple push buttons. Lets say that I have 5 push buttons and 3 leds.Home Automation: Using 4 Push button push-ON and push-OFF 4 relays with Arduino
Led1 turns on if at least 1 out of the 5 push buttons is pressed. Led2 turns on if at lest 3 push buttons are pressed and Led3 turns on if at least 4 push buttons are pressed. How can this be solved? With if else? There are more shorthand ways to write this e. If all you are doing is lighting LEDs then de-bouncing the buttons isn't necessary, any LED flicker caused by the contacts bouncing won't be visible to your eye.
If however at a later date you want to trigger other logic in your program to run once per button press then you will need to worry about that. All buttons and switches bounce a little when you close them, without something in the electronics or software to cope with that a single button press can look like a dozen very quick presses to your software.
Your code won't work as is. Each time you assign a value to state you're overwriting it in the next line. You could, for example have multiple int state variables such as state1 for the first line in the loop then state2 in the second etc.
This way you gather all the button states first. Then you compare the number of button presses counted in state as you were doing and light the LEDs based on that. However you will likely have a problem with contact bounce on the switches. This happens when a switch is closing and the voltage is not steady for about 20ms imaging a switch sparking as it is closing.
To get around this you'll need either some additional components or add a time delay in your code for each button press to check it several times until the voltage is stable.
Do a Google search for 'Arduino contact bounce' for solutions. I solved my problem by myself with if. I am happy that I got this working and I learned something new. Thank you all for help and inputs. Sign up to join this community. The best answers are voted up and rise to the top. Home Questions Tags Users Unanswered. Multiple push buttons Ask Question. Asked 3 years, 1 month ago. Active 3 years, 1 month ago. Viewed 15k times. Enric Blanco 2, 1 1 gold badge 9 9 silver badges 24 24 bronze badges.
Arduino Stack Exchange is a question and answer site for developers of open-source hardware and software that is compatible with Arduino. It only takes a minute to sign up. Problem 1: LED1 needs to be on only when button1 is held down. Right now it takes several presses to turn on and off and stays on. Problem 1: LEDs 2,3,4 do not turn off with buttons 2,3,4. They are all turned off by button1, which is what I want, but I also need them to turn of with their respective button presses.
I need buttons 2,3,4 to light up LEDs 2,3,4 and stay lit until I press the respective buttons again OR button1 which turns off all lights, and the LED for button1 must only stay on when button1 is held down. I am half way there with just a few minor problems. The first is LED1 stays on rather than when I hold the button1 down only. And the other problem is, it takes many presses to turn the LEDs on or off.
I fixed this on 2,3,4 by removing the following code for each pin:. But I would also like LEDs 2,3,4 to turn off with their respective button press.
Tutorial: Using analog input for multiple buttons
With that code removed LEDs 2,3,4 no longer work independently of button1. First thing, you need to debounce your buttons. The fact that you declared the unused variable debounceDelay suggests you have though about debouncing, but you did not implement it. Next thing, you should look for button press and release events. This is usually called edge detection. With enough effort, you could probably do that yourself.
However, to make your life easier, you can use a debouncing library that does edge detection, such as the quite popular Bounce2. This library provides, for each button it debounces, a rose method that tells you when the input signal rose i. Using these methods, your problem can be coded in a fair natural way. For example not tested :. Sign up to join this community.
The best answers are voted up and rise to the top. Home Questions Tags Users Unanswered. Asked 1 year, 8 months ago. Active 5 months ago. Viewed 3k times. Edgar Bonet Using this method, I'll show you how you can access 5 or even more inputs through 1 Arduino pin.
These buttons will only be read correctly if only one is pushed at any time though. As we go through it I'll explain whatever background info you need to know, so as long as you can blink a button, read a switch and read an analog input, you'll be fine. If you can't do any of these, I'll point you in the right direction in the relevant steps as well. Did you use this instructable in your classroom? Add a Teacher Note to share how you incorporated it into your lesson. More on this later.
So how do you put multiple buttons on one pin? You cheat! The secret to this is using an analog input pin, not digital. You can read about how the analog input works by going through this Arduino tutorial.
Essentially, what you need to know though is that when there is 0V on the analog pin, analogRead returns a value of 0 and if there is 5V, analogRead will return a value of For any voltage between 0V and 5V, analogRead will return a number proportional to the voltage.
The current I is fixed, which means that we just need to add a resistor between the supply voltage and the analog pin to change the voltage. For those of you that were getting excited about all the maths that's necessary to calculate the voltages, I'm going to have to disappoint you Let's get a bit more practical, and I'll show you why we don't care about the maths.
We know that the analog pin reads voltages and we know that we can change those voltages by adding a resistor between it and the supply voltage. We also know that we've gone this far because we want to be able to read switches, so we should probably toss some switches in too. Now, for those that are interested, To design this, you start with what you know. If you connect each button to the supply voltage through a different value resistor, depending on which button is pushed, the value returned by analogRead would be different, and you can use a bunch of if statements to see which button was pressed.
The reason we don't need maths is because we just connect it all up, push the buttons and print the returned values to the serial port. Using the previous circuit, build it on a breadboard. Once the circuit is built, you can hook up the GND and 5V to the Arduino, and connect the buttons to analog pin 0 You can change it, just remember to change it in the sketch. For your resistor values, you should pick values that are fairly evenly spread between an arbitrary lower and higher range.
One of your buttons could be connected directly to 5V, so you need one resistor less than buttons and the one pull down resistor shared by all the buttons. If one of your buttons is connected to 5V it should always return a value of So if you want to save a couple of cents, leave out the resistor on button 1.
Download the attached sketch and upload it to your Arduino. Once it is uploaded, open the serial monitor as well. You will see that the values returned will fluctuate for a bit before settling down in a small band of numbers. Write down the biggest and smallest numbers. The first thing that is clear is that the range is bigger for some buttons.
Electrical Engineering Stack Exchange is a question and answer site for electronics and electrical engineering professionals, students, and enthusiasts. It only takes a minute to sign up. I'm using analog pin 5 on Arduino to detect presses from 6 push-buttons. On the picture top-right button is number 1 and then from right to left they go as 2, 3, 4, 5, 6. Program should print 0 when none of the buttons is pressed and if one of them is presses, it should print its position as I mentioned before.
Currently the problem is that if I press say second button, it will instead only once sometimes print 2 a couple of times. I guess it is because of the "noise" when button is pressed and that it should be debounced, but I don't know how to debounce analog pin. When you detect a significant difference in ADC reading, wait 20 milliseconds and then average a few readings then make a decision. If one of the readings still looks badly quantifiable, wait another short period of time.
Many switches of the style you're using are hard to debounce well, and trying to use a resistive multiplexer won't make it easier. Still, if you can afford two port pins one analogI can offer a recipe for success which should work even if your switches are pretty lousy.
I'd suggest moving the bus-bar resistor ignore the bottom bus bar of the breadboard to the left of your leftmost one, and wiring that to a the non-analog port pin. The common wire on the top should be connected to the analog port pin.
The wire from the right-most resistor should connect to ground. When your unit is "idle" [you don't think any buttons are pushed] set the common output to high and float the other one. It will read low when no buttons are pushed, and will read close to VDD when any button is pushed. To find out which button is pushed, float the common wire and drive the left-side wire high. Briefly set the common wire high or low see note and float it again, then read the voltage on that pin a little while later keeping the left-side wire high.
Once the reading has been taken, you may if desired turn off power to the left-side wire turn it on again before the next reading cycle. If no button is pushed, readings after the pin had been pulsed high will be much higher than when after it had been pulsed low. This will indicate that the button has been released.
Once the button has been released, you may go back to the "idle" configuration. When the left resistor is driven high, the resistor string will draw current whether or not any buttons are pressed, but when the left pin is floated and the common wire is high, no current will be drawn until a button is pushed.
To get good results with cheap switches, you should delay long enough after each momentary "ground" or "VDD" pulse on your common wire that if the switch is making any contact at all it will yield a good reading try putting a K resistor in parallel with a switch, and adjust the delay and sensitivity so that it "barely" registers the switch as being held.
Cheap switches have a resistance of well over a meg when totally released, and less than 10 ohms when fully pressed, but their resistance can wander all over the place between those states, and conventional debounce timing won't help. What will help is having a circuit that won't detect a button press until the resistance gets fairly low, and will regard a button as held unless its resistance gets much higher.
For the circuit I've described, the left-side button will be more "sensitive" to "new" button pushes than the right-side button, and "hold" sensitivity may be different for all six buttons, but you should have little trouble ensuring that every button's "hold" sensitivity is much higher than its "new push" sensitivity, which is the requirement for reliable debouncing.
I have just recently started working with Arduino, and whilst this is an old question, I found this thread when trying to extend the number of buttons I could listen to. I worked from the original Fritzing illustration and produced a slight variant in both hardware and software.
I modified the resistor set to use different values to try and produce a more consistent step between switches rather than the logarithmic steps produced by using the same resistors throughout.
I also built some basic software which looks for the same value for 3 readings in a row before acknowledging a change in voltage. This eliminates small variations in the reading.In this tutorial you will learn how to use multiple buttons on one analog pin. For example, if you have 4 buttons, you will need 4 digital pins to read them. But, if you connect them all together, with different resistors, you can read them from only one analog pin!
Did you use this instructable in your classroom? Add a Teacher Note to share how you incorporated it into your lesson. It's quite simple, every time a button is pressed, the Arduino receives an analog value from 0 to Depending resistance to each button this value changes.
By this way we can recognize which button was pressed. Build the circuit above and program the Arduino with the following sketch. Bellow you will find the Codebender serial monitor, just press the connect button to start serial communication. As you can see if no button is pressed the value obtained is 0.
Now press the first button with 1K resistor and keep a notice with the value that you received. Keep going with all of them.
Let's see how we can use these values to control some leds. Build the above circuit, the connections are pretty easy. You have successfully completed one more Arduino "How to" tutorial and you learned how to use multiple buttons on only one analog pin!
I hope you liked this, let me know in the comments. There will be more of them, so make sure to click Follow button! I am working on a toughbook pi and needed something to convert the keyboard. We are talking 86 keys but your example is a good start!
Come check it out; github.