Snelle digitalRead(), digitalWrite() voor Arduino (3 / 5 stap)

Stap 3: Switch en LED en het gebruik van pin bank overleden


Bank D controleert pinnen 0 - 7, maar PIN 0 en 1 worden gebruikt voor seriële communicatie. Meeste Arduino liefhebbers probeer niet deze pinnen voor iets anders gebruiken. Dingen kunnen raar als je met deze pinnen knoeien krijgen. Dus voor de veiligheid is het beste voor het behoud van de waarden van bit 0 en 1 in de registers van DDRD en PORTD. Dit vereist het gebruik van logische AND en/of opdrachten.

Elk journaal is 8 bits 0 tot en met 7 van rechts naar links genummerd. Bit 0 is 2 ^ 0, bit 1 is 2 ^ 1, enz.

Een logische OR vergelijkt twee bytes bit voor bit en het resultaat is 1 als beide of het aantal bytes is 1, zo niet het resultaat is 0.

De verticale streep (|) is het symbool voor een logische OR.

Hier is een waarheidstabel voor een logische OR:

 0 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1 
 So if we OR 11001100 Against 00111100 The result will be 11111100 

.

Een logische en vergelijkt twee bytes bit voor bit en het resultaat is 1 alleen als beide bits 1 zijn.
Het en-teken (&) is het symbool voor een logische AND.

Hier is een waarheidstabel voor een logische en:

 0 & 0 = 0 0 & 1 = 0 1 & 0 = 0 1 & 1 = 1 
 So if we AND 11001100 Against 00111100 The result will be 00001100 

Oog op het behoud van een beetje u kunnen OR tegen 0 of en het tegen 1.

Volg samen met de documentatie in het programma om te zien hoe dit werkt.

Bouwen van het circuit in het diagram weergegeven, zult u moeten:

  • Arduino
  • Breadboard
  • LED
  • Weerstand, 330-560 Ohm
  • Jumper draden

Kopieer dit programma naar de Arduino IDE en uploaden naar je Arduino:

 /********************************************************* * Demonstration using bank D pins 0 - 7 and preserving the * values of pins 0 and 1 in the DDRD and PORTD registers. * * The anode of an LED is connected to pin 7 with * a resistor in series connected to ground. * * A pushbutton switch is connected to pin 2 and ground * and uses the internal pull-up resistor. * * The LED lights when the button is pressed. * *********************************************************/ /********************************************** * setup() function **********************************************/ void setup() { // Set pin 2 to input and pin 7 to output // while maintaining the state of pins 0 and 1. // We don't care what happens to 3 - 6. DDRD = DDRD | B10000000; // The "|" means a logical OR. // We now know that bit 7 is high. // And we know bits 0 and 1 are preserved. // But we still are not sure of bit two. DDRD = DDRD & B10000011; // We do a logical AND, now we know the status of all the bits. // A logical OR against zero or a logical AND against one // will not change the status of a bit. // This preserved the status of bits 7, 1, and 0. // Since bit 2 was ANDed against 0 we know that it is now clear. // The DDRD register is now where we want it. // Now we need to get the PORTD register set the way we want it. PORTD = PORTD & B00000011; // Bits 0 and 1 are preserved, all others are off. PORTD = PORTD | B00000100; // Bits 7 is off, the initial state of the LED. // Bit 2 is on, because pin 2 is an input turning it's bit // on in PORTD turns on the internal pull-up resistor. } /********************************************** * loop() function **********************************************/ void loop() { // Read the PIND register. int button = PIND; // you now have the values of all eight pins in the PIND register // contained in a variable. The only pin we care about is pin 2. // So we do a logical AND on the button variable to isolate the // bit we want. button = button & B00000100; // Because of the internal pull-up resistor the pin will be high // if the button is not pressed, and low if it is. // So button will return either 2^2 (4) or zero if it is pressed. PORTD = PORTD & B00000111; // Turn LED off, and preserve bits 0 - 2. if(button == 0) { PORTD = PORTD | B10000000; // turn LED on, and preserve bits 0 - 2. } } 

De opdracht digitalWrite() zal vertragen een programma veel in een lus, maar de opdracht pinMode() is normaal gesproken alleen gebruikt in de Setup-functie en eenmalig uit te voeren. het bovenstaande programma zal net zo goed uitvoeren als u een meer standaard Setup-functie, zoals dit gebruiken:

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

Terwijl met behulp van het register van DDRD niet nodig dat het is leuk om te begrijpen hoe het en de logische operaties werken is.

Gerelateerde Artikelen

Een beginnersgids voor Arduino

Een beginnersgids voor Arduino

Na enkele jaren van experimenteren met Arduino, besloten heb ik dat het tijd is om te delen van de kennis die ik heb verworven. Dus ik hier het gaat, een gids voor Arduino, met de blote basisprincipes voor beginners en sommige meer geavanceerde uitle
Het maken van een androïde toepassing voor Arduino (LED Turn on/off)

Het maken van een androïde toepassing voor Arduino (LED Turn on/off)

hier hebben we een androïde toepassing die gebruikmaakt van ecllipsedeze toepassing inschakelen leidde op arduino.deze toepassing werkt ook in je LAN.Hardware vereist:1: arduino uno2: arduino ethernet Shield3: RJ45-kabel4: LED5. android telefoonDe so
RGB-LCD Shield voor Arduino 65K kleuren KIT V2 montage handleiding

RGB-LCD Shield voor Arduino 65K kleuren KIT V2 montage handleiding

de RGB LCD shield voor Arduino 65K kleur KIT bevat alle onderdelen om een klaar om te gebruiken LCD shield voor Arduino en compatibele boards zoals Freeduino monteren.(bezoek http://store.nkcelectronics.com/rgb-lcd-shield-for-arduino-65k-color-k65.ht
Aan de slag met GearBest Starter Kit voor Arduino

Aan de slag met GearBest Starter Kit voor Arduino

Als u nieuw bij de "Arduino World bent" zal deze tutorial helpen u om uw eerste stappen met elektronica en Arduino boards Arduino boards.De "GearBest Starter Kit voor Arduino" zullen we gebruiken voor dit! Waarom? Omdat is een low-cost
Onderzoekers gids voor Arduino als uitgevoerd op OIT

Onderzoekers gids voor Arduino als uitgevoerd op OIT

middelenAdafruit ARDX - v1.3 experimenten Kit voor ArduinoOnderzoekers gids voor Arduino (PDF)Brood bord lay-outs (PDF)Arduino tutorial Arduino Tutorial bundel (Instructable)Deze Arduino Tutorial is gonna be zeer vergelijkbaar met de Arduino Tutorial
Bouwen van een ISP-Shield voor Arduino

Bouwen van een ISP-Shield voor Arduino

dit Instructable is voor de instructies van de bouw voor onze nieuwe AVR ISP Shield Kit voor Arduino. Haar ontwikkeling heeft veel te danken aan Instructables en onze eigen Gemeenschap (met name Nick!) en ik hoop om uit te leggen wat van die langs de
CupBots - 3D afgedrukt Robotic platform voor Arduino en Raspberry Pi

CupBots - 3D afgedrukt Robotic platform voor Arduino en Raspberry Pi

Hier is een geweldig weekend robotica project uit te voeren met vrienden of mensen op uw lokale maker-ruimte. Je moet een 3D-printer handig om 3D print de STL-bestanden bijgevoegd als onderdeel van de volgende stappen en een beker, in mijn geval, ik
SensoDuino: Zet uw Androïde telefoon in een draadloze sensoren Hub voor Arduino

SensoDuino: Zet uw Androïde telefoon in een draadloze sensoren Hub voor Arduino

UPDATES23 november 2013: SensoDuino 0.160 krijgt een links.19 nov. 2031: advies: de fantastische synergie tussen Arduino & Android.19 november 2013: SensoDuino 0.159 is uit. Android telefoon datum (y, m, d) en tijd (h, m, s) worden ondersteund als se
Touche voor Arduino: Advanced touch sensing.

Touche voor Arduino: Advanced touch sensing.

Update: nieuwe interface - blik op de laatste stap.Credits: Arduino sensing gedaan door DZL, verwerking van schets en Instructable gedaan door Mads Hobye.Disney Research lab ontworpen een nieuwe manier om te ontdekken van de Aanraking. U kunt een vid
Bouwen van Android Bluetooth App voor Arduino

Bouwen van Android Bluetooth App voor Arduino

Hallo, ga vandaag ik om een android app voor arduino Bluetooth module HC-06 te maken. Via deze app kunt u een lichte of led formulier uw Androïde telefoon. Kunt doen...Stap 1: Ga naar Android editorGa naar MIT App uitvinderLink: http://appinventor.mi
Linux, WiFi, Ethernet, USB-Shield voor Arduino

Linux, WiFi, Ethernet, USB-Shield voor Arduino

Yun Shield is een Arduino-schild die zal gewoon "turn" Arduino (UNO, Leonardo, MEGA2560 enz) zowel een "Arduino Yun". Het biedt een linuxsysteem, WiFi, Ethernet naar de Arduino board voor connectiviteit. Het heeft ook een USB-hostpoort
3-kanaals Dimmer/fader voor Arduino of andere microcontroller

3-kanaals Dimmer/fader voor Arduino of andere microcontroller

In een eerdere instructable heb ik voorgelegd een eenvoudige AC TRIAC fader/dimmer die kan worden gecontroleerd met een Arduino. In verschillende reacties die ik kreeg, belangstelling een aantal mensen hun in een 3-kanaals RGB-fader. Maar sinds ik ni
Digitale multimeter shield voor Arduino

Digitale multimeter shield voor Arduino

Dit instructable beschrijft een schild, die "Arduino" board in een digitale multimeter (DMM converteert).Het schild kan worden ingevoegd in "Arduino" UNO und Duemilanove planken. Het kan werken in drie modi:standalone - de meting gegev
De ESP8266 deel 1 - seriële WIFI Module voor Arduino

De ESP8266 deel 1 - seriële WIFI Module voor Arduino

Dit is het deel 1 van 3 instructables u te helpen bij het gebruik van de ESP8266 met Arduino. In dit deze eerste tutorial leer je hoe set-up en test de module op een Arduino aangesloten.De ESP8266 is misschien wel de meest veelzijdige seriële module