Overleg:Arduino/Digitale uitvoer: verschil tussen versies

Uit Lab
Naar navigatie springen Naar zoeken springen
Regel 11: Regel 11:


Je kunt dit in de volgende tabel zien:
Je kunt dit in de volgende tabel zien:
{|
! software !! hardware-1 !! hardware-2 !!
|-
| LOW || 0V || 0V ||
|-
| HIGH || 5V || 3.3V||
|}





Versie van 11 dec 2015 15:12

Over LOW, HIGH, en het rekenen met deze waarden

Voor het uitlezen en aansturen van de digitale ingangen en uitgangen gebruikt de Arduino-taal de constanten LOW en HIGH.

De beschrijving van deze constanten in de Arduino-documentatie is verwarrend: zie

Bij deze digitale in- en uitgangen heb je te maken met twee "werelden" die gekoppeld worden: de wereld van de software - waar een digitale ingang of uitgang overeenkomt met een bit, met de waarde 0 of 1; en de wereld van de hardware, waar je werkt met spanningsniveaus.

Door het gebruik van de constanten LOW en HIGH probeert men in de Arduino-taal het niveau van de spanning op de betreffende aansluiting aan te geven. Verschillende systemen werken daar met verschillende spanningsniveaus.


Je kunt dit in de volgende tabel zien:

software hardware-1 hardware-2
LOW 0V 0V
HIGH 5V 3.3V


In principe spreekt de Arduino-documentatie zich er niet over uit wat de waarden van LOW en HIGH zijn aan de software-kant. Het enige wat vastligt is dat het constanten zijn: met andere woorden, je kunt een waarde vergelijken met LOW of HIGH:

if (in == HIGH) {
  someAction();
}


LOW en HIGH zijn geen boolean waarden

De Arduino-taal is een variant van C++. Dit betekent dat er geen boolean waarden zijn, of een boolean type. Je kunt een waarde wel gebruiken in een conditie, bijvoorbeeld bij een if- of een while-statement. In dat geval komt de waarde 0 overeen met false, en elke andere waarde met true.

Rekenen met LOW en HIGH

Geen enkele aanname

Als je geen enkele aanname wilt doen met betrekking tot LOW en HIGH, dan moet je voor het rekenen met digitale inputs en outputs altijd een omzetting doen, bijvoorbeeld:

if (in == HIGH) {
  value = 1;
} else {
} value = 0;

Dit kun je eventueel afkorten als: value = (in == HIGH) ? 1 : 0; , maar het blijft omslachtig.

Aanname: LOW en HIGH zijn bits

Aanname: LOW==0 en HIGH ==1