Ga naar inhoud


hoe werkt dat?


Aanbevolen berichten

  • Moderator

Ik zie bij sommige apparaten bijv 4 schakelaars en 4 leds maar 5 aansluitingen. Als ik op knop 3 duw gaat led3 aan enz.

Druk ik nu op 4 dan gaat led 3 uit en led 4 aan.

 

Hoe werkt dat met maar 5 of 4 draden naar de processor?

Bijv met een arduino?

Een smartphone is een hulpmiddel, geen levensstijl 

Kijk rond IN de wereld in plaats van voorover gebogen NAAR de wereld.

Link naar reactie
Delen op andere sites


Niet zo moeilijk 😉 . 

Pin in input mode zetten. Schakelaar van pin naar GND. LED van VCC naar een weerstand en dan naar de pin.

Als je nu de schakelaar indrukt zal de LED aangaan, immers de pin wordt naar GND geschakeld. De CPU (Arduino) detecteert dit, doordat ook de pin naar GND gaat. De CPU zet de pin in output mode, en stuurt een "0", dus effectief gezien de pin naar GND. LED blijft vrolijk branden als de schakelaar wordt losgelaten. LED uitschakelen doe je door de pin naar input te zetten, al dan niet met een pull-up weerstand geactiveerd, en dan zal er op de pin ongeveer  VCC  verschijnen, dus de LED heeft dan geen voldoende spanningsverschil om te branden.

“Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill

Link naar reactie
Delen op andere sites

  • Moderator
Quote

LED uitschakelen doe je door de pin naar input te zetten, al dan niet met een pull-up weerstand geactiveerd, en dan zal er op de pin ongeveer  VCC  verschijnen, dus de LED heeft dan geen voldoende spanningsverschil om te branden.

Maar dat uitschakelen doet de processor dan toch en niet de gebruiker?

Want als je nu knop 3 in drukt gaat led 3 aan maar als je nu knop 3 nogmaals indrukt staat de pin nog steeds in output. Dan werkt het dus niet.

Een smartphone is een hulpmiddel, geen levensstijl 

Kijk rond IN de wereld in plaats van voorover gebogen NAAR de wereld.

Link naar reactie
Delen op andere sites

  • Moderator

Yep, ik moet je hersentjes toch een beetje laten werken 😁

Een smartphone is een hulpmiddel, geen levensstijl 

Kijk rond IN de wereld in plaats van voorover gebogen NAAR de wereld.

Link naar reactie
Delen op andere sites

Exact dezelfde manier, echter in plaats van de IO pin vast te zetten als output, schakel je die elke paar ms naar de input mode. Dan kijk je of de IO pin nog steeds aan GND hangt, en zo ja, dan schakel je de output uit.

 

Uiteraard moet je na het inschakelen wel eerst detecteren dat de pin niet aan GND hangt, want dat betekent dat de schakelaar is losgelaten. Anders zal het altijd blijven "knipperen" bij het inschakelen, en in een random stand blijven zodra de schakelaar wordt losgelaten ....

“Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill

Link naar reactie
Delen op andere sites

  • 3 weken later...
  • Moderator

Ik krijg er door de drukte nog geen tijd voor 🥴 (evenementen seizoen)

Een smartphone is een hulpmiddel, geen levensstijl 

Kijk rond IN de wereld in plaats van voorover gebogen NAAR de wereld.

Link naar reactie
Delen op andere sites

Dit werkt bij mij. Voer dit elke 100ms ofzo uit en het gaat goedkomen.

 

    if (startFlag) {                                    // Button pin is in OUTPUT mode
      pinMode(SW_STRT, INPUT_PULLUP);                   // Change temporarily to INPUT mode
      if (!digitalRead(SW_STRT)) {                      // Button is pressed
        startFlag = false;                              // Set flag indicating START is INactive
      } else {                                          // Button is not pressed
        pinMode(SW_STRT, OUTPUT);                       // Back to OUTPUT mode
        digitalWrite(SW_STRT, LOW);                     // Drive pin LOW again --> LED ON
      }
    } else {                                            // Button pin is in INPUT mode
      if (!digitalRead(SW_STRT)) {                      // Button is pressed
        startFlag = true;                               // Set flag indicating START is active
        pinMode(SW_STRT, OUTPUT);                       // Change to output
        digitalWrite(SW_STRT, LOW);                     // Drive LOW --> LED ON
      }
    }

 

Anode van de LED hangt via een weerstand aan de VCC, en de kathode hangt aan de GPIO pin. De GPIO pin gaat naar een drukknop toe die naar GND gaat.

In mijn geval de "Start knop". Zodra je de knop indrukt gaat de LED meteen aan en die blijft aan totdat je de knop nogmaals indrukt. De boolean flag "startFlag" geeft de status weer van de schakelaar.

 

Succes ermee 🙂 

“Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill

Link naar reactie
Delen op andere sites

Geplaatst: (aangepast)

Ik liep tegen een probleem aan.... Als de knop ingedrukt bleef ging de status continue aan/uit .

Dus maar een kleine wijziging aangebracht die dat tegengaat.

        bool stopFlag, stopPressed;                         // Flags used in the routine
        if (stopFlag) {                                     // Button pin is in OUTPUT mode
          pinMode(SW_STOP, INPUT_PULLUP);                   // Change temporarily to INPUT mode
          if (!digitalRead(SW_STOP)) {                      // Button is pressed
            if (!stopPressed) {                             // This is not a repeat reading
              stopFlag = false;                             // Set flag indicating STOP is INactive
            }
            stopPressed = true;                             // Keep track if button is released or not
          } else {                                          // Button is not pressed
            pinMode(SW_STOP, OUTPUT);                       // Back to OUTPUT mode
            digitalWrite(SW_STOP, LOW);                     // Drive pin LOW again --> LED ON
            stopPressed = false;                            // Keep track if button is released or not
          }
        } else {                                            // Button pin is in INPUT mode
          if (!digitalRead(SW_STOP)) {                      // Button is pressed
            if (!stopPressed) {                             // This is not a repeat reading
              stopFlag = true;                              // Set flag indicating STOP is active
              stopPressed = true;                           // Keep track if button is released or not
              pinMode(SW_STOP, OUTPUT);                     // Change to output
              digitalWrite(SW_STOP, LOW);                   // Drive LOW --> LED ON
            }
          } else {
            stopPressed = false;                            // Keep track if button is released or not
          }
        }

(Ja, ik heb een start en stop knop in mijn applicatie 😉 )

aangepast door Big fellow

“Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill

Link naar reactie
Delen op andere sites

Maak een account aan of log in om te reageren

Je moet een lid zijn om een reactie te kunnen achterlaten

Account aanmaken

Registreer voor een nieuwe account in onze community. Het is erg gemakkelijk!

Registreer een nieuwe account

Inloggen

Heb je reeds een account? Log hier in.

Nu inloggen
  • Wie is er online   0 leden

    • Er zijn geen geregistreerde gebruikers deze pagina aan het bekijken
×
×
  • Nieuwe aanmaken...