Beginner Arduino (15 / 15 stap)

Stap 15: Knop als tuimelschakelaar

Soms zult u geïnteresseerd in het exacte moment een knop wordt ingedrukt of losgelaten, zodat u kunt een gebeurtenis in uw tekening. In dit geval moet u de currentStatus van de knop Opslaan en vergelijk het met de laatste opgenomen staat. Als de currentStatus hoog is en de lastState laag, is dan weet je dat gewoon de knop is ingedrukt. Neem een kijkje op de onderstaande code:

 //Button Press Detection - single message int buttonPin = 7; boolean currentState = LOW;//stroage for current button state boolean lastState = LOW;//storage for last button state void setup(){ pinMode(buttonPin, INPUT);//this time we will set the pin as INPUT Serial.begin(9600);//initialize Serial connection } void loop(){ currentState = digitalRead(buttonPin); if (currentState == HIGH && lastState == LOW){//if button has just been pressed Serial.println("pressed"); delay(1);//crude form of button debouncing } else if(currentState == LOW && lastState == HIGH){ Serial.println("released"); delay(1);//crude form of button debouncing } lastState = currentState; } 

Ik gebruikte iets nieuws in mijn als verklaring:

Als (currentStatus == HIGH & & lastState == laag)

dit leest als "als currentStatus is lastState hoog en laag," & & laat ons toe om het controleren van de waarheid voor veel dingen in de dezelfde als verklaring. U kunt ook || ("of") om te testen is-een ding of anderzijds geldt. Lees meer hier.

Ook ziet u dat de volgende regel verschijnt twee keer in de bovenstaande code:

delay(1);

Deze vertraging was zetten daar tijd te geven de knoop te regelen met stabiele spanning voordat we beginnen met het meten van het weer, dat dit heet knop debouncing; het verhindert ons één enkele pers tellen als twee persen toe te schrijven aan de knop chatter. Met behulp van een vertraging te knop debouncing is prima voor dit eenvoudige voorbeeld, maar als u een heleboel knoppen werden meten de vertragingen zal optellen en uw code uitvoeren zeer traag maken. Dit kan uiteindelijk uw hardware een achterblijvende gevoel geeft. Ik zal het adres van sommige betere technieken hiervoor debouncing verderop in deze klasse.

Deze code ook introduceert een nieuw gegevenstype: Boole. Booleans zijn gebruikt voor het opslaan van 1 bit stukjes informatie, dingen zoals waar/onwaar, aan/uit, 1/0, van HIGH/LOW. Ik gebruikte het in mijn code voor het opslaan van de huidige en status van de knop laatste (hoog of laag).

Hier is hoe we dit kunnen gebruiken om te schakelen van een LED op en uit telkens wanneer de knop wordt ingedrukt:

 //Button Toggle LED int ledPin = 9; int buttonPin = 7; boolean currentState = LOW;//stroage for current button state boolean lastState = LOW;//storage for last button state boolean ledState = LOW;//storage for the current state of the LED (off/on) void setup(){ pinMode(buttonPin, INPUT);//this time we will set the pin as INPUT pinMode(ledPin, OUTPUT); Serial.begin(9600);//initialize Serial connection } void loop(){ currentState = digitalRead(buttonPin); if (currentState == HIGH && lastState == LOW){//if button has just been pressed Serial.println("pressed"); delay(1);//crude form of button debouncing //toggle the state of the LED if (ledState == HIGH){ digitalWrite(ledPin, LOW); ledState = LOW; } else { digitalWrite(ledPin, HIGH); ledState = HIGH; } } lastState = currentState; } 

In de bovenstaande code mij troep opwaarts een variabele met de naam "ledState" voor het opslaan van de huidige stand van de LED, dan elke keer die de knop werd ingedrukt, die ik gebruikte digitalWrite in te stellen van de LED op de tegenovergestelde staat en een nieuwe ledState opgeslagen.

Nog verder te gaan, kunt u de knopcode knevel met de fader-code van de RGB LED-voorbeeld voor het volgende:

 //Button Press Detection - single message //pin connections int red = 9; int green = 10; int blue = 11; int buttonPin = 7; boolean currentState = LOW;//stroage for current button state boolean lastState = LOW;//storage for last button state int currentColor = red;//storage for current color void setup(){ pinMode(buttonPin, INPUT);//this time we will set the pin as INPUT pinMode(red, OUTPUT); pinMode(blue, OUTPUT); pinMode(green, OUTPUT); Serial.begin(9600);//initialize Serial connection digitalWrite(currentColor, HIGH);//initialize with currentColor on (full brightness) } void loop(){ currentState = digitalRead(buttonPin); if (currentState == HIGH && lastState == LOW){//if button has just been pressed Serial.println("pressed"); delay(1);//crude form of button debouncing int nextColor = getNextColor(currentColor); fader(currentColor, nextColor); currentColor = nextColor; } lastState = currentState; } int getNextColor(int color){//helper function that gives us the next color to fade to if (color == red) return green; if (color == green) return blue; if (color == blue) return red; } void fader(int color1, int color2){ for (int brightness=0;brightness<256;brightness++){ analogWrite(color1, 255-brightness); analogWrite(color2, brightness); delay(2); } } 

Ik heb toegevoegd een extra Help-functie in de code hierboven om te helpen de volgende kleur te vervagen te kiezen:

int getNextColor (int kleur) {}

Als (kleur rood ==) terugkeer van groen;
Als (kleur groen ==) terugkeer blauw;
Als (kleur blauw ==) terugkeer rood;

}

Ik heb verklaard dat de functie met een int Arduino vertellen dat het verwachten de functie dat moet voor het retourneren van een getal (in dit geval, het nummer van de pin van de Arduino die is aangesloten op een van de RGB LED's pinnen. De als verklaringen een beetje anders kijkt dat wat we hebben gezien, kon ik heb geschreven de functie als volgt:

 int getNextColor(int color){ if (color == red) { return green; } if (color == green) { return blue; } if (color == blue) { return red; } } 

.. .en het in exact dezelfde manier werken zou. Als u alleen wilt uitvoeren van één regel in een if-instructie, kunt u de verkorte:

Als (iets) DoeIets;

zonder accolades of linebreaks.

Deel 2 van deze serie hier blijven, of leren hoe te sluiten op de MIDI in- en uitgangen van de Arduino.

Gerelateerde Artikelen

Verkeerslichten [Beginner Arduino Project]

Verkeerslichten [Beginner Arduino Project]

dit is een beginners-project voor de Arduino. Ik ben met behulp van de Arduino Uno, maar zou moeten werken met weinig of geen wijzigingen op andere modellen van de arduino.Instellen van de hardware is zeer eenvoudig. Dit project is meer een trainings
Beginner Arduino - met behulp van een 1.8-Inch-TFT-Display

Beginner Arduino - met behulp van een 1.8-Inch-TFT-Display

Dit is uw inleidende gids voor het gebruik van een 1.8 in Duimtft vertoning met een Arduino. Ik houd van de 1.8 op display voor zijn kleine grootte en lage kosten. Ik heb de mijne voor ongeveer $10 op ebay, hier. Het komt niet met instructies maar me
Blinky Blockhead (beginner Arduino project)

Blinky Blockhead (beginner Arduino project)

Dit is enkel een pret weinig toevoeging aan uw bureau.Dank aan mijn zus voor het maken van de papieren kubus en de haren!Stap 1: Verzamel uw leveringen.Stap 2: Teken een rechthoek die is 2 1/2 X 10 "Stap 3: Tekent u lijnen die 2 1/2 uit elkaar.Stap 4
Lcd met gids van de Beginner Arduino interface

Lcd met gids van de Beginner Arduino interface

Deel te worden opgestart1. JHD162A LCD2. Arduino board3. potentiometer4. jumper dradenWat is LCD?LCD (vloeibare kristalvertoning) is de technologie die wordt gebruikt voor displays in notitieboekje en andere kleinere computers. Net als light - emitti
Een Beginner Arduino Project: Tri-Colour door een Bi-Colour LED

Een Beginner Arduino Project: Tri-Colour door een Bi-Colour LED

Hi en welkom op mijn 7e instructable. Ditmaal ben ik spelen met mijn nieuwe TRduino duemilanove. Eigenlijk het is een kloon van Arduino gemaakt door Thinnkware en hebben de 328 ATMega.Arduino is een zeer goede programmeur en het is ook open bron (het
Arduino Beginner en elementaire elektronica Kit Primer

Arduino Beginner en elementaire elektronica Kit Primer

ik leerde dat een van mijn nichtjes had een belang in de programmering.  Ze werkte met robotica op middelbare school en heeft een zomer stage waar ze Arduinos hadden.  Ik denk dat ze was in staat om te lenen van een Arduino om te experimenteren met t
Hoe maak je een LED 7-segment display met Arduino

Hoe maak je een LED 7-segment display met Arduino

Ik ga u tonen hoe te maken van een 7 segment display met LED's. Combineren met Arduino aftelproceduretijdopnemers, eenvoudige tekst, en meer te maken. Ik willen maken van de oorspronkelijke projecten. Ik zocht de hele instructables en als dit niet vi
Android praat met Arduino

Android praat met Arduino

dit project iets wijzigt de Google Android monster app genaamd "Bluetooth Chat" zodat u kunt een bericht typen in de Android app en die dezelfde boodschap op een LCD-scherm die is gekoppeld aan een Arduino Uno verschijnt.Functionaliteit: Android
Arduino - Theremin met 7 Segment LED-Display

Arduino - Theremin met 7 Segment LED-Display

In dit instructable, ik zal u tonen hoe maak je een eenvoudige speelgoed die combinatie van de LED flitser en de Theremin. We gonna met behulp van enkele elementaire elektronica gebouwd op de top van een Arduino. Het basisidee van de 7 Segment LED-Di
Gemakkelijk bouwen self balancing elektrische skateboard

Gemakkelijk bouwen self balancing elektrische skateboard

Wat is het?Dubbele wielen skateboard dat als een Segway werkt. Elektrische skateboards bestaan al met aangedreven achterwielen. Plan hier was om iets te bouwen als een Segway, maar in de vorm van een skateboard. Het weet welke kant is "up" via e
Arduibag: een aangesloten rugzak voor fiets renners

Arduibag: een aangesloten rugzak voor fiets renners

Arduibag is een aangesloten rugzak voor fiets renners. Het is ook een open source project gemaakt door twee gepassioneerde Franse jongens: Michaël D'AURIA en Stéphane DE GRAEVE.Als u weten meer over Arduibag ga dan wilt naar: http://www.arduibag.comH
Plot klok voor dummies.

Plot klok voor dummies.

Herzieningen:1. de DS1307 real-time klok module instructies toegevoegd.Dit is niet mijn idee, maar ik zal proberen aan te tonen hoe ik dit eindelijk werkt.De briljante jongens die maken deze spul, vergeet vaak dat er zijn idioten (zoals ik) rond, die
Low-Power pomp voor Gravity watertank

Low-Power pomp voor Gravity watertank

het ideeDit project startte als een test om te zien de minste energie nodig om water van de pomp in een gravity tank hoog van de grond. We wilden vinden de meest efficiënte pomp mogelijke, misschien slechts een paar watt. Het interessante deel leek d
Gekwetter Laser Tripwire met Webcam Capture

Gekwetter Laser Tripwire met Webcam Capture

Dit instructable zal u tonen hoe te bouwen van een laser tripwire dat kan twitter en pak een afbeelding van een webcam, evenals elk commando kun je in een bash-script.Dit instructable is eigenlijk vrij eenvoudig en is ook geschikt als een beginner ar