Un drukknop is een knop waarmee u een elektronisch signaal kunt onderbreken of verzenden. Met dit eenvoudige element gecombineerd met andere elementen kunt u projecten maken voor een groot aantal toepassingen. Het gebruik van dit soort drukknoppen is heel gebruikelijk bij projecten met Arduino. En door meerdere van deze knoppen te combineren kun je een wat complexer toetsenbord creëren, al zijn er al programmeerbare toetsenborden voor deze toepassingen ...
Overigens je moet de drukknop niet verwarren met een schakelaar. Het zijn totaal verschillende dingen. Het verschil is dat de schakelaar of schakelaar wordt geactiveerd of gedeactiveerd bij elke druk op de knop. Terwijl de drukknop maar in één toestand blijft terwijl er druk op wordt uitgeoefend. Ik heb opgemerkt dat het kan verzenden of onderbreken, dat komt omdat er twee fundamentele soorten knoppen zijn.
Daar zijn de GEEN of normaal open drukknoppen en NC of normaal gesloten drukknoppen. Dit klinkt ook voor u uit de relais. En ja, het is precies dezelfde operatie. Als je een NC hebt, laat deze stroom door zijn aansluitingen gaan en onderbreekt hij alleen terwijl je erop drukt. Aan de andere kant laat de NA geen stroom door als er geen druk op wordt uitgeoefend en zal deze alleen passeren als je erop drukt.
Wetende dat, is bijna alles wat u moet weten over een drukknop om uw verbinding en programmering met Arduino te starten. De waarheid is dat het zo'n eenvoudig element is dat er niet veel meer te zeggen is over dit soort drukknoppen.
Drukknopintegratie met Arduino
La een drukknop aansluiten om het te laten communiceren met Arduino kan niet eenvoudiger. Een voorbeeld is het diagram dat u op deze lijnen kunt zien. Dat is alles wat nodig is om te beginnen met experimenteren. Maar met dat schema kun je natuurlijk weinig doen. Je zou een beetje fantasie moeten gebruiken om te beslissen wat die knop gaat bedienen. Als u hwlibre.es vaak leest, heeft u al enkele artikelen gezien waarin we drukknoppen hebben gebruikt ...
Manieren om het te verbinden
Een ding dat u moet weten, is de kwestie van anti-bounce en hoe u deze drukknoppen aansluit. Eerst gaan we naar de manier om ze te verbinden, waarvan je al weet dat het kan zijn met de pull-up en pull-down weerstanden:
- Optrekken- Met deze weerstandsinstelling kan de microcontroller of Arduino een nul op die pin zien of lezen wanneer de drukknop wordt ingedrukt. Dat wil zeggen, het interpreteert het als een LAAG signaal.
- Omlaag trekken: In dit geval is het omgekeerd, u kunt een 1 of HIGH-signaal lezen of ontvangen via de aangesloten pin.
Verwar het niet met de NC of NA, wat iets anders is, zoals we eerder hebben gezien. Dit is onafhankelijk van de andere ...
Anti-stuiteren
De drukknoppen hebben een bounce-effect wanneer ingedrukt. Dat wil zeggen, wanneer erop wordt gedrukt of losgelaten, is er een fluctuatie in het signaal dat door zijn contacten gaat en kan het van een HIGT-status naar LOW of vice versa gaan zonder echt te willen dat dit gebeurt. Dat kan een ongewenst effect hebben op de Arduino en ervoor zorgen dat hij vreemde dingen doet, zoals het activeren van een element wanneer we het echt wilden uitschakelen met de drukknop, enz. Dat komt omdat de Arduino de bounces interpreteert alsof er meer dan eens op is gedrukt ...
Dat negatieve effect het heeft een oplossing. Hiervoor moet een kleine condensator worden geïmplementeerd in het anti-bounce circuit (hardwaremethode) of software (het wijzigen van de broncode), of een pull-up of pull-down configuratie is gebruikt of dat het NC of NO is. In al deze gevallen moet de oplossing worden geïmplementeerd om deze rebounds te voorkomen.
Bijvoorbeeld pull-up en pull-down circuits met de anti-bounce condensator ze zouden er ongeveer zo uitzien:
Terwijl software methode Het kan worden gezien in dit codefragment:
if (digitalRead (button) == LOW) // Controleer of de knop is ingedrukt
{
ingedrukt = 1; // De variabele verandert van waarde
}
if (digitalRead (knop) == HIGH && ingedrukt == 1)
{
// Voer de gewenste actie uit
ingedrukt = 0; // De variabele keert terug naar de oorspronkelijke waarde
}
Eenvoudig projectvoorbeeld
Als we eenmaal het onderwerp hebben geleerd van de manieren om onze drukknop en het anti-reboundcircuit te verbinden, gaan we een praktisch voorbeeld zien van bedien een LED met de drukknop. Het schema is net zo eenvoudig als u kunt zien.
Eenmaal correct aangesloten, is het volgende dat u moet schrijven de code in Arduino IDE om uw paneel te programmeren en te gaan experimenteren met de knoppen. Een eenvoudig codevoorbeeld om ons circuit te besturen, zou het volgende zijn:
// Voorbeeld van schets om de knop te bedienen
int-pin = 2;
int staat;
pulserende int = 0;
leegte setup ()
{
pinMode (2, INPUT); // Om de puls te lezen door die pin in te voeren
pinMode (13, OUTPUT); // Voor de LED
Serial.begin (9600);
}
leegte lus ()
{
if (digitalRead (2) == HIGH)
{
pen = 2;
antiBounce (); // Roep de anti-bounce-functie op
}
}
// Software anti-bounce-functie
leegte anti-bounce ()
{
while (digitalRead (pin) == LOW);
state = digitalRead (13);
digitalWrite (13,! staat);
while (digitalRead (pin) == HIGH);
}
Stoer!!! Heel erg bedankt, ik heb een CNC gebouwd en paradoxaal genoeg waren de knoppen het moeilijkst om af te stemmen.
Hoi! Ik raadpleeg als beginneling, in verband met de GND… ..de zwarte draad mag niet uit de negatieve lijn komen, die zich boven de lijn bevindt die in diagram 2 wordt weergegeven?
Uitstekende uitleg .. een paar jaar geleden heb ik een auto-ontstekingsproject gedaan en de waarheid is dat ik nooit een juiste toetsaanslag kon maken. Voor het contact .. Ik ga deze methode proberen. Ik dank u hartelijk voor deze geweldige hulp
Hallo, ik ben bezig met een project met drie knoppen en 5 LED's met de volgende volgorde.
1 drukknop stuurt een signaal naar 2 leds, die ik 1 en 2 heb genoemd.
de tweede drukknop stuurt een signaal naar 3 LED's, genaamd 2,3 en 4.
mijn derde drukknop stuurt een signaal naar 3 andere LED's, genaamd 3,4, 5 en XNUMX.
Ik ben erin geslaagd om die volgorde te doen, ik heb alleen één probleem, wanneer op 2 knoppen wordt gedrukt, stuurt het een vals signaal naar de LED die moet blijven branden, waardoor het met tussenpozen knippert, ik heb het gecontroleerd door een vertraging in te stellen (van 2 seconden, dat is wat ik nodig heb zodat de LED's blijven branden en vervolgens uitgaan. dan is mijn vraag hoe kan ik de millis-functie in mijn programma plaatsen, ik begrijp niet hoe millis werkt, ik wil weten of je me kunt helpen door een voorbeeld maken voor 3 knoppen met millis in elk van hen, ik heb millis nodig om op elk moment op de knoppen te kunnen drukken zonder de Arduino te vertragen.
Hola Omar,
Ik raad je aan om onze Arduino-tutorial te bekijken:
https://www.hwlibre.com/programacion-en-arduino/
En je kunt ook ons artikel over millis () bekijken:
https://www.hwlibre.com/millis-arduino/
Een groet.