Snabb digitalRead(), digitalWrite() för Arduino (3 / 5 steg)

Steg 3: Switch och LED och använder pin bank D.




Banken D styr stift 0 - 7, men stift 0 och 1 som används för seriell kommunikation. De flesta Arduino entusiaster försök inte att använda dessa pins för något annat. Saker kan få konstiga om du bråka med dessa stift. Så för säkerheten är det bäst att bevara värdena 0 och 1 i DDRD och PORTD register-bitar. Detta kräver användning av logiskt och och eller kommandon.

Varje register är 8 bitar numrerade 0 till 7 från höger till vänster. Bit 0 är 2 ^ 0, bit 1 är 2 ^ 1, etc.

Ett logiskt eller jämför två byte bit för bit och resultatet är 1 om endera eller byte är 1, om inte resultatet är 0.

Den vertikala linjen (|) är symbolen för ett logiskt eller.

Här är en sanning bordlägger för ett logiskt eller:

0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1

Så om vi eller 11001100
Mot 00111100
Resultatet blir 11111100

.

Ett logiskt och jämför två byte bit för bit och resultatet är 1 endast om båda bitar är 1.
Et-tecknet (&) är symbolen för ett logiskt och.

Här är en sanning bordlägger för ett logiskt och:

0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1

Så om vi och 11001100
Mot 00111100
Resultatet blir 00001100

För att bevara lite du kan OR det mot 0 eller och det mot 1.

Följ med i dokumentationen i programmet för att se hur detta fungerar.

Bygga den krets som visas i diagrammet, behöver du:

  • Arduinoen
  • Skärbräda
  • LED
  • Motstånd, 330-560 Ohm
  • Hoppare ledningar

Kopiera detta program till Arduino IDE och ladda upp den till din Arduino:

/*********************************************************
* Demonstration med bank D stift 0 - 7 och bevara den
* värden för stift 0 och 1 i register som DDRD och PORTD.
*
* Anoden av en LED är ansluten till stift 7 med
* ett motstånd i serie ansluten till marken.
*
* En tryckknapp switch är ansluten till stift 2 och marken
* och använder den interna pull-up resistorn.
*
* LED lamporna när knappen är nedtryckt.
*
*********************************************************/

/**********************************************
* setup() funktion
**********************************************/
void setup()
{
Ställa in stift 2 till ingång och stift 7 till utgång
samtidigt tillstånd av stift 0 och 1.
Vi bryr oss inte vad som händer med 3-6.

DDRD = DDRD | B10000000;

Den "|" innebär ett logiskt eller.
Nu vet vi det lite 7 är hög.
Och vi vet bits 0 och 1 är bevarade.
Men vi är fortfarande inte säker på bit två.

DDRD = DDRD & B10000011;

Vi gör en logisk och nu vi vet status för alla bitar.

Ett logiskt eller mot noll eller en logisk och mot en
ändras inte status för lite.

Denna bevarade status för bits 7, 1 och 0.
Sedan bit 2 var ANDed mot 0 vet vi att det är nu klart.
DDRD registret är nu dit vi vill.

Nu måste vi få ange PORTD registret det sätt vi vill.

PORTD = PORTD & B00000011;

BITS 0 och 1 är bevarade, alla andra är avstängda.

PORTD = PORTD | B00000100;

BITS 7 är avstängd, starttillståndet för LED.
Bit 2 beror på, stift 2 är indata vrida den är lite
på i PORTD vänder på den interna pull-up resistorn.
}

/**********************************************
* loop() funktion
**********************************************/
void loop()
{
Läs PIND registret.

int knappen = PIND;

du har nu värdena för alla åtta stift i PIND register
som ingår i en variabel. Den enda stift vi bryr oss om är stift 2.
Så vi gör en logisk och på knappen variabeln att isolera de
lite som vi vill.

knappen = knappen & B00000100;

På grund av den interna pull-up resistorn kommer att PIN-koden vara hög
Om knappen inte är intryckt och lågt om det är.
Så knappen återgår antingen 2 ^ 2 (4) eller noll om den trycks.

PORTD = PORTD & B00000111;

Inaktivera LED, och bevara bitar 0 - 2.

IF(Button == 0)
{
PORTD = PORTD | B10000000;
Aktivera LED och bevara bitar 0 - 2.
}
}

Kommandot digitalWrite() kommer att bromsa ett program mycket i en slinga, men kommandot pinMode() är normalt används endast i setup() funktion och köra en gång. programmet ovan kommer att köras lika bra om du använder en mer standardiserade setup() funktion, så här:

Setup()
{
pinMode (7, OUTPUT);
pinMode (2, INPUT_PULLUP;
}

Med hjälp av DDRD registret är inte nödvändigt är det skönt att förstå hur den och de logiska operationerna fungerar.

Se Steg
Relaterade Ämnen

Snabb installationsguide till Arduino LCD 2004 med PCF8574

Detta är en snabb Installationsguide för din Arduino LCD.Saker du måste veta innan du sätter igång:1. LCD-skärmar är inte skapade lika, vissa har olika stift än den andra.2. huvuddragen i ställa in: LCD, biblioteket och koden.Steg 1: Läs din kontakte...

Kombinera 1 eller fler Arduinos med en RaspberryPi

Detta instructable är en demonstration av den Drogon fjärrkontrollen (DRC) funktion som ingår i wiringPi.WiringPi bibliotek, skriven av Gordon Henderson, lägga till funktioner som gör att du till program GPIO stiften på RaspberryPi i C i en titulera...

En nybörjares guide till Arduino

Efter några år av experimentera med Arduino, beslutade jag att det är dags att dela den kunskapen har jag fått. Så jag här går, en guide till Arduino, med nakna grunderna för nybörjare och lite mer avancerade förklaringar för personer som är något me...

Android kontrollerade ljus och kraft, pfodDevice för Arduino

Uppdatering: Se Android/Arduino för nybörjare - Design anpassade Android menyer att slå Arduino utgångar på och av. Absolut No programmering krävs för ett alternativ som inte kräver någon programmering alls.===========================================...

Programming ESP8266 ESP-12naE NodeMCU använder Arduino IDE - en handledning

NodeMCU Dev styrelsen är baserad på allmänt utforskade esp8266 System på Chip från Expressif. Den kombinerade funktionerna i WIFI kopplingspunkt och station + microcontroller och använder enkelt LUA baserat programmeringsspråk. ESP8266 NodeMCU erbjud...

RC kontroll och Arduino: A färdiga arbeten

i detta instructable jag kommer att ta dig med på min resa för att lära sig lägga till RC kontroll med en Arduino mikrokontroller. Till skillnad från andra Instructables eller Bloggar, kommer att jag innehålla all information jag kan även om det inte...

Arduino hög hastighet oscilloskop med PC-gränssnitt

Använd din Arduino och PC som en Snabb lagring oscilloskop.Arduinoen kan på ett tillförlitligt sätt samla spänning avläsningar med en frekvens mellan 141 och 153 KiloHertz.1000 data avläsningar kan tas i runt 6.8ms.Överfört kapitalinlösenfond till en...

Klon!

Presentera... KLON! - En liten TV fjärrkontroll som kan Klona alla femknappar på din IR-fjärrkontrollen... och också kan JAM IR överföringen avnågon annan fjärrkontroll. .. .annoy andra av störning TV-signalen, eller närnågon annan har tagit fjärrkon...

ESP8266 HTTP-Server med IO

Detta är en kort artikel att införa ESP8266_http_io biblioteket. Detta är en enkel http-gränssnitt för att komma till ESP gpio med Python, Tcl, Javascript eller något annat språk som kan göra http GET-förfrågningar. Detta bör fungera på varje ESP mod...

3D tryckt robotarm

Denna robotarm består nästan helt av 3D tryckta delar som snap tillsammans. Den har tre servo-kontrollerade leder, plus en roterande bas och gripare. Armen styrs av ett antal knappar som ansluter till en Arduino Uno gömd i basen. En enkel krets gör a...

Enkel mjuk krets knappen

Någonsin ville ha en tålig och pålitlig mjuk krets knapp? Med bara en liten bit av ledande tråd, kan två bitar av tyg och några vadd du göra din egen.Det material du behöver:1/8 gården av icke-ledande tyg1/16 gården av oledande vadd36" av ledande trå...

FireHero: Tur Guitar Hero i en extrem sport genom att lägga till eldkastare!

Så, länge sedan jag hade läst om propan brand poofers. De är ganska cool... Jag menar, vem inte älskar eld?! Men oavsett hur awesome, de kunde få ganska tråkigt efter ett tag på att se samma stora eldklot. Jag har aldrig byggt en eftersom jag ville h...

LED Infinity Matrix - Bluetooth kontrollerad

Du har förmodligen sett infinity speglar innan. Men har du någonsin sett en bluetooth kontrollerad Infinity Matrix?Målet med vår Infinity Matrix var att kunna dra i ljus, nästan som en oändlighet Etch A Sketch. Vi ville kontrollera varje LED inuti ma...

Inga hemligheter längre (NSA för korta)

detta är en snabb konstverk som innefattar en Arduino, datalogger sköld, ttl kamera och ett eye-fi SD kort. Dess syfte är att låta NSA har lätt visuell tillgång till min verkstad. Mitt syfte är att belysa enfald övervakning mitt tråkiga liv. Genom at...

Räknaren tweiger

följande steg gör att du kan bygga din egen tweiger-counter! Den söker i nuvarande twitter meddelanden som skickas runt om i världen för ord som kärnkraft, beräknar en skjutbara fönster medel och skjuter det till arduino som kommer att klicka på för...

Prototyp rörelsesensor från fotocell

detta är ett snabbt projekt jag kastade ihop efter diska i helgen. Jag tog min dator i köket för att spela musik medan jag jobbade. Tyvärr, det var ett fel med min plan; Jag hade inte tänkt på vad jag skulle göra när jag ville byta till en annan sång...

Girino - snabb Arduino oscilloskop

jag är en fysiker och den trevligaste delen av arbetet på detta område är att jag får att bygga mitt eget instrument. Med detta sätt att tänka, jag bestämde mig att bygga en homebrew Arduino oscilloskop. Detta instructable skrevs med syfte att underv...

Arduino Robot V2 (snabb) också röst kontrollerat

Detta är min andra version av min arduino robot efter "Bygga din första robot". Min andra versionen är något komplicerat förhållande till min första en men erbjuder bättre funktioner. I detta instructable kommer jag för att visa dig hur man bygg...

Scintillino - en Arduino-baserad snabb & smutsiga scintillationsräknare

har du någonsin undrat om strålningsnivåer runt omkring dig? Ja idag kan du bygga din egen detektor som mäter joniserande strålning och visar data i realtid på en LCD-skärm (och även din dator om du vill).Den visuella designen, som nedan, kanske en s...