- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 27

Thema: 2 funktionierende Sketche in einem - Bitte um Hilfestellung für Anfänger

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2011
    Ort
    Heilbronn
    Alter
    35
    Beiträge
    180

    2 funktionierende Sketche in einem - Bitte um Hilfestellung für Anfänger

    Guten Abend liebe Community,

    ich bin schon des längeren hier angemeldet und habe nur im stillen mitgelesen!
    Ich bin an einem Roboter Projekt tätig, der auch schon fast fertig ist,
    das Projekt möchte ich hier auch noch ausführlich vorstellen!

    Kurz zu mir: Bin 25 Jahre alt, gelernter CAD Konstrukteur und arbeite auch als dies im Familienbetrieb.
    Daher die Technische Seite zur Durchführung kein problem, Elektronik Kenntnisse auch vorhanden.

    Momentan wird der Roboter über eine herkömmliche Modellbaufernsteuerung ( Spektrum DX6i ) gesteuert,
    diese spricht den Fahrtenregler an ( SGS Elektronisch TVC-B-30 ) und der wiederum 2 Elektromotoren.
    Also Prinzip Panzersteuerung mit zwei unabhängig angetrieben Hinterräder und vorn zwei Lenkrollen.
    ( Habe 6 Jahre Modellbau betrieben daher war dies ein Kinderspiel )

    Ich möchte aber den Roboter nicht über die Funkte steuern sondern später mal über den Arduino und die passende
    selbstgeschriebene Software!. Aber erstmal Schritt für Schritt.

    Nun aber zu meinem Problem:
    Ich habe mir ein Arduino Starterkit besorgt ( Amazon ) bin auch hoch zufrieden.
    Habe die letzten 3 Wochen mit verbracht, die Schaltungen nachzubauen, nach zu stecken auf dem Steckbrett und zu
    verstehen und die Abläufe des Sketches zu verinnerlichen.
    Habe mir auch ein Buch ( Die elektronische Welt mit Arduino entdecken - Amazon und ebenfalls hoch zufrieden ) gekauft und
    auf Youtube diverse Tutorials nachgebaut und verstanden, also:

    ich bekomme kleine LED Schaltungen hin oder Schaltungen die sonstige aufgaben erledigen ( Temperatursensor od Lichtsensor )

    Jetzt möchte ich gerne zwei Schaltungen vereinen und in ein Sketch verbinden.
    Habe hier schon im Forum gelesenen, das das nicht so einfach ist bzw für mich zumindest nicht

    Habe auch den Rot befolgt und wie es in dem Beitrag geheißen hat, ein neues Programm zu schreiben.

    Jetzt taucht aber folgender Fehler auf wo ich Hilfestellung benötige um es zu verstehen!
    In den Sketch für die Netzwerkkamera ein und auszuschalten kommt die Operation : ledState = LOW; vor und
    in dem zweiten Sketch bzw Operation kommt vor: low = lightLevel;

    Jetzt bringt mir Arduino ein Fehler das er den Wert LOW ( und auch HIGH ) nicht zuordnen kann weil er zweimal in dem Sketch vorkommt.

    Das leuchtet mir auch ein, aber den Lösungsweg also wie ich ihm sagen kann ledState = LOW gehört zur ersten Operation,
    und low - lightlevel zu der anderen Operation!

    Beide Programme laufen unabhängig voneinander auf dem Steckbrett und im Arduino.

    Aber ich möchte ja das der Arduino mehrere Aufgaben erledigt, ich will ja nicht für jedes Programm ein eigenen Ardino
    das währe auch eine Lösung, kann aber nicht der Weg sein


    Ich hoffe mir kann jemand ein Tip geben, das ich es verstehe .... Versuche es schon 3 Tage zu lösen!

    Mfg Benny


    Hier noch mein geschriebener Code:

    Code:
    // Netzwerkkamera
    const int switchPin = 2;
    const int camPin = 3;
    
    // LED SENSOR
    const int sensorPin = 0;
    const int ledPin = 4;
     
    int state;                                // Variable für Operation1 = Netzwerkkammera Ein / Aus
    int lastState;                            // Variable für Operation1 = Netzwerkkammera Ein / Aus
    int ledState;                             // Variable für Operation1 = Netzwerkkammera Ein / Aus
    
    int lightLevel, high = 0, Low = 1023;     // Variable für Operation2 = LED Sensor
     
    void setup() 
    {
      pinMode(camPin, OUTPUT);
      pinMode(ledPin, OUTPUT);
      pinMode(switchPin, INPUT);
     
      Serial.begin(9600);
      
      
    }
     
    void Operation1() // Netzwerkkamera Ein / Aus
    {
      state = digitalRead(switchPin);
     
      if (state != lastState) 
      {
        if (state == HIGH) 
        {
          if (ledState == HIGH) 
          {
            ledState = LOW;
            Serial.println("LED AUS");
          }
          else
          {
            ledState = HIGH;
            Serial.println("LED EIN");
          }
        }
        lastState = state;
      }
      
      digitalWrite(ledPin, ledState);
      delay(20);
    
    }
    
    
    // ----------------------------------------
    
    void Operation2() // LED SENSOR
    {
      lightLevel = analogRead(sensorPin);
        
      analogWrite(ledPin, lightLevel);
    
      if (lightLevel < Low)
      {
        low = lightLevel;
      }
      
      if (lightLevel > High)
      {
        high = lightLevel;
      }
      
      lightLevel = map(lightLevel, Low+30, high-30, 0, 255);
      lightLevel = constrain(lightLevel, 0, 255);
    }
    
    
    void loop()
    {
      Operation1(); // Netzwerkkamera ein und aus schalten
      Operation2(); // Sensor steuert LED
    }

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    16.02.2014
    Beiträge
    80
    Hey Benny!

    Jetzt bringt mir Arduino ein Fehler das er den Wert LOW ( und auch HIGH ) nicht zuordnen kann weil er zweimal in dem Sketch vorkommt.
    Glaube nicht daß sich der Compiler so ausdrückt hat - wie lautet denn die genaue Fehlermeldung?

    "LOW" und "Low" (ebenso deine "Highs") haben doch garnichts miteinander zu tun weil unterschiedliche Schreibweise und sollten sich somit auch nicht in die Quere kommen. Nebenbei bemerkt würde ich aber zwecks Übersichtlichkeit dennoch unterschiedliche Bezeichnungen wählen...

    Was mir auffällt sind aber einige Schreibfehler (?). Oben deklarierst Du "Low", unten verwendest Du "low" - also eine für den Compiler unbekannte Variable. Darüber aber auch wieder ein "Low", ganz zu schweigen vom Präprozessor-LOW. Auch bei Deinen highs herrscht Chaos bezüglich Groß-/Kleinschreibung. Alle 3 Varianten im Umlauf. Eine von Dir deklariert, eine vom Präprozessor, eine garnicht.

    Gewöhne Dir am besten mal eine klare, durchgängige Linie an, z.B. Variablen immer mit kleinem Anfangsbuchstaben, Konstanten immer mit großem. Oder so in der Art. Hauptsache durchgängig und konsequent.

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Ich vermute, du vermischt die boolschen Variablen HIGH und LOW mit den Werten von lightLevel die du in den Variablen high und low speicherst:

    Code:
    // Netzwerkkamera
    const int switchPin = 2;
    const int camPin = 3;
    
    // LED SENSOR
    const int sensorPin = 0;
    const int ledPin = 4;
    
    int state;                                // Variable für Operation1 = Netzwerkkammera Ein / Aus
    int lastState;                            // Variable für Operation1 = Netzwerkkammera Ein / Aus
    int ledState;                             // Variable für Operation1 = Netzwerkkammera Ein / Aus
    
    int lightLevel, lightLevel_high = 0, lightLevel_low = 1023;     // Variable für Operation2 = LED Sensor
    
    void setup()
    {
      pinMode(camPin, OUTPUT);
      pinMode(ledPin, OUTPUT);
      pinMode(switchPin, INPUT);
    
      Serial.begin(9600);
    
    
    }
    
    void Operation1() // Netzwerkkamera Ein / Aus
    {
      state = digitalRead(switchPin);
    
      if (state != lastState)
      {
    
          if (ledState == HIGH)
          {
            ledState = LOW;
            Serial.println("LED AUS");
          }
          else
          {
            ledState = HIGH;
            Serial.println("LED EIN");
          }
    
          lastState = state;
      }
    
      digitalWrite(ledPin, ledState);
      delay(20);
    
    }
    
    
    // ----------------------------------------
    
    void Operation2() // LED SENSOR
    {
      lightLevel = analogRead(sensorPin);
    
      analogWrite(ledPin, lightLevel);
    
      if (lightLevel < lightLevel_low)
      {
        lightLevel_low = lightLevel;
      }
    
      if (lightLevel > lightLevel_high)
      {
        lightLevel_high = lightLevel;
      }
    
      lightLevel = map(lightLevel, lightLevel_low+30, lightLevel_high-30, 0, 255);
      lightLevel = constrain(lightLevel, 0, 255);
    }
    
    
    void loop()
    {
      Operation1(); // Netzwerkkamera ein und aus schalten
      Operation2(); // Sensor steuert LED
    }
    (ungetestet)

    Gruß

    mic
    Geändert von radbruch (02.03.2014 um 19:19 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2011
    Ort
    Heilbronn
    Alter
    35
    Beiträge
    180
    Danke für die schnellen Antworten.

    @cdk

    ja davon habe ich schon gehört, grins, habe aber granicht drauf geachtet. Das man auf die Schreibweise achten muss.
    Ich sag mal so wenn man das Prinzip verstanden hat, ist es schon fast eindeutig. aber für mein empfinden sehr viel Text
    worauf man achten muss.

    Grins:
    klar hat er nicht geschrieben

    Jetzt bringt mir Arduino ein Fehler das er den Wert LOW ( und auch HIGH ) nicht zuordnen kann weil er zweimal in dem Sketch vorkommt.
    er hat gemekert: "low" was not declared in this scope


    @ mic

    danke für den Code ich muss jetzt mal beide vergleichen um zu verstehen, was du geändert hast
    werde wieder berichten!

    Aber nochmal kurz um, das ich es verstehe? -- lag der Fehler jetzt darin das is Low - low - LOW geschrieben hab und
    er nicht wusste wohin was gehört?

    gebe cdk recht kommen alle drei Varianten drin vor

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    ... lag der Fehler jetzt darin das ich Low - low - LOW geschrieben hab
    Auch daran lag es (aber teste erstmal den neuen Code)

    Der wesentliche Fehler war, dass du beim Ändern des ledState auf logisches HIGH und LOW geprüft hast:
    if (ledState == HIGH)

    Bei den Werten des analogen Eingangs dagegen prüfst du auf größer oder kleiner:
    if (lightLevel < lightLevel_low)
    if (lightLevel > lightLevel_high)

    Logische Werte können nur true oder false sein, analoge Werte hingegen (wie bei deinem 10bit-Wandler) können 0 bis 1023 sein.

    Meine Änderung in deinem Quellcode beschränkte sich lediglich auf die Einführung zweier zusätzlicher Variablen (lightLevel_low und lightLevel_high) für die Min- und Maxwerte von lightLevel (wodurch auch die unterschiedlichen Schreibweisen von Llow eliminiert wurden :)

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. c++ Uhr, brauche hilfestellung für interrupts
    Von backinblack im Forum Software, Algorithmen und KI
    Antworten: 1
    Letzter Beitrag: 01.04.2013, 13:46
  2. Hilfestellung mit C-Programmierung für einen uC
    Von xxrider im Forum C - Programmierung (GCC u.a.)
    Antworten: 23
    Letzter Beitrag: 18.09.2011, 18:38
  3. Antworten: 14
    Letzter Beitrag: 22.06.2009, 19:49
  4. C Anfänger! Bitte code angucken
    Von Freakster235 im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 21.02.2008, 17:10
  5. bitte helft einem Anfänger !!!
    Von jagdfalke im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 9
    Letzter Beitrag: 02.03.2005, 17:25

Berechtigungen

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

Solar Speicher und Akkus Tests