- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 11

Thema: Arduino-Code: fehlende Definition, benötige Hilfe

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.03.2014
    Beiträge
    173
    Ja, das ist richtig. Da habe ich mich nicht klar ausgedrückt. Der Code, so wie er im Buch steht (also ohne irgendwelche Korrekturen), funktioniert zunächst nicht. Durch das Einfügen der Deklarierung von buttonState (so wie auch von Dir vorgeschlagen) funktioniert das insofern, dass das Lauflicht läuft, und zwar ohne weitere Aktion. Danke für Deinen aufmerksamen Hinweis!
    Anliegen speziell dieses Codes soll - laut Beschreibung im Buch - jedoch sein, dass folgendes funktioniert:
    1x kurzer Tastendruck --> Lauflicht geht an
    wieder 1x kurzer Tastendruck, Lauflicht geht wieder aus

    Der vorangegangene Code im Buch macht genau das: sofort nach dem Hochladen läuft das Lauflicht los. Da ist kein Schalter vorgesehen. Entsprechend einfacher ist der Code auch ausgeführt. Anschliessend wird nun der Taster hinzugenommen (mit dem hier erwähnten Code), und der soll die Lauflicht-Funktion an- bzw. ausschalten. Und DAS macht der Code - so wie er im Buch angeboten wird - nicht.

    Ich arbeite mit Bootloader. Kann Dir aber nicht sagen, welcher das ist. Ich beschreibe die ATmegas mit der üblichen Arduino-Software, da ist der Bootloader ja integriert. Für meinen "Buch-Lern-Kurs" verwende ich einen Original-Arduino-UNO bzw. LEONARDO, da ich mit diversen Klones hin und wieder festgestellt habe, dass manches nicht funktioniert. Probleme dieser Art möchte ich zumindest beim Erarbeiten dieses Buches von vornherein ausschliessen.

    __________________________________________________ __________________________________________________ __________________________________________________ _________________

    Hier möchte ich gleich nochmal nachhaken. Wenn ich richtig "gelernt" habe, so gibt es beim Programmieren einen Unterschied zwischen deklarieren und definieren. Das war mir bisher auch noch nicht klar, aber es ergibt Sinn. Nun nehme ich diese Zeile:

    int buttonStateOld = 0;

    Die "Null" bedeutet hier ja keine PIN-Zuweisung am Arduino. Hier können (ganzzahlige) Werte zwischen -32000 bis +32000 (gerundet, 16 bit???) stehen. So zumindest wird es in der Arduino-Sprache beschrieben. Allerdings verarbeitet der doch nur 8 bit, was genaugenommen nur 256 (0-255) Werten entspricht. Warum hier 16 bit-Werte möglich sind, ist mir auch (noch) unklar, ist aber ein anderes Thema.
    Spielt es eine Rolle, ob ich in der erwähnten Zeile "buttonStateOld" überhaupt einen Wert (0 oder 1 oder 1687 ...) eintrage - bzw. kann ich dort irgendeinen Wert einsetzen, der mir grad durch den Kopf geht? Habe ich hier "richtig" gelernt? Mit einem Wert, den man dort einträgt, reserviert man sich lediglich einen Speicherplatz, was bei umfangreichen Codes dann von Bedeutung ist. Ob ich da nun 0 eintrage oder zB 156 ergibt letztlich in binärer Schreibeweise keinen wirklichen Unterschied (ausser den Wert selbst), denn meine 8 verfügbaren Bits werden ja auch bei der (Dezimal-)Zahl 0 reserviert, nur eben (binär) in 0-0-0-0-0-0-0-0 und nehmen genausoviel Speicher in Beschlag, wie zB die (Dezimal-)Zahl 12: 0-0-0-0-1-1-0-0.
    Mir ist noch nicht nicht klar, mit welchem Wert (Dezimalzahl) man diese Deklaration (hier im Beispiel buttonStateOld) definiert. Warum schreibst Du (@ oberallgeier) z.B. buttonState = 1, und nicht etwa 0 oder 181? Eine 1 oder eine 0 geben doch hier nicht HIGH oder LOW an. Warum 0 oder 1?

    Andi


    Nachtrag:
    @Rabenauge:
    Durch Einfügen von
    buttonState=digitalRead(PUSH_BUTTON);
    in den Loop funktioniert das mit dem kurzen Tasterdruck. Aber nur beim anschalten auch zuverlässig. Entgegen Deiner Vermutung läuft das Lauflicht weiter, auch wenn ich den Taster dann loslasse. Mit dem Ausschalten wird es dann aber knifflig. Der Code erkennt den kurzen Tasterdruck für "ausschalten" (also während das Lauflicht läuft) nur dann, wenn die Lauflicht-Sequenz komplett durchgelaufen ist. Also nur dann, wenn ich genau diesen Zeitpunkt erwische, geht auch das Lauflicht wieder aus. Wenn ich mitten in der Sequenz drücke, hat das keinen Einfluss.
    Ich habe das direkt ganz oben im Loop eingetragen:

    Code:
     
    void loop() 
    {
      buttonState=digitalRead(PUSH_BUTTON);
      if (buttonState != buttonStateOld)
      {
        if(buttonState == HIGH)
        {
          if(buttonFlag == false)
    Muss das evt. innerhalb einer der aufgeführten Bedingungen (innerhalb bestimmter geschweifter Klammern) eingesetzt werden, oder muss ein Interrupt geschrieben werden?

    Andi
    Geändert von Andi#87 (20.03.2023 um 20:12 Uhr)

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 29.01.2013, 19:33
  2. Bascom code auf Arduino Board Flashen **Hilfe**
    Von KoaxPilot im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 13
    Letzter Beitrag: 23.06.2011, 09:14
  3. Benötige Hilfe bei der CC2 auf RP5
    Von blade im Forum C-Control II
    Antworten: 28
    Letzter Beitrag: 19.03.2006, 17:02
  4. Hilfe: BASCOM Definition files?
    Von reiner im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 17.12.2005, 15:03
  5. benötige Hilfe bei meinem Code
    Von Reeper im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 09.12.2005, 15:36

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests