-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 27

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

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2011
    Ort
    Heilbronn
    Alter
    28
    Beiträge
    180

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

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    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
    Ort
    bei Karlsruhe
    Beiträge
    74
    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
    54
    Beiträge
    5.782
    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)

    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
    28
    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
    54
    Beiträge
    5.782
    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

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

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2011
    Ort
    Heilbronn
    Alter
    28
    Beiträge
    180
    Okay soweit habe ich verstanden und werde es gleich ausprobieren, ob es funktioniert, der Tipp war wenigstens verständlich =)

    Das ihr wisst um was es geht, kurz paar Bilder, wollt eigentlich noch nichts verraten aber für die schnelle Hilfe =)

    Name: Roboter RSL7
    Gewicht: 120 KG ( Gesamt)
    Aufgaben( Rasenmäher, Schneeschieben, Straße kehren mit hinterhergezogener Kärger Handkermaschine ( S550))
    Leistung Motoren: 1500 Watt (750 pro Motor )
    Akkus: 2x 12V in Reihe auf 24V
    Ausemaße(mm): 1200x600x500

    Mehr will ich dann in meinem Ausführlichen Bericht schreiben

    Klicke auf die Grafik für eine größere Ansicht

Name:	Roboter_RSL7_Bild_1.jpg
Hits:	15
Größe:	57,6 KB
ID:	27657Klicke auf die Grafik für eine größere Ansicht

Name:	Roboter_RSL7_Bild_2.jpg
Hits:	11
Größe:	49,5 KB
ID:	27658Klicke auf die Grafik für eine größere Ansicht

Name:	Roboter_RSL7_Bild_3.jpg
Hits:	20
Größe:	87,0 KB
ID:	27659Klicke auf die Grafik für eine größere Ansicht

Name:	Roboter_RSL7_Bild_4.jpg
Hits:	15
Größe:	78,5 KB
ID:	27660

    - - - Aktualisiert - - -

    Sorry für die beiden ersten Bilder das sie auf dem Kopf stehen
    kann man das hier irgendwo einstellen um 180 Grad drehen ?

    Mfg Benny

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo Benny,

    ich bin echt beeindruckt von diesem Vehikel, befürchte aber auch, dass du dich da übernimmst. Bitte warne mich und deine nähere Umgebung, bevor du damit die Gegend unsicher machst. *lol

    Ich bin sehr gespannt auf deinen ausführlichen Bericht...

    Gruß

    mic

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

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2011
    Ort
    Heilbronn
    Alter
    28
    Beiträge
    180
    Grins da hast du recht, jeder muss sich in Sicherheit begeben^^

    Als größten Test zur maximal Belastung was ich gemacht habe:

    Mein A3 BJ2002 - Gesamtgewicht: 1300 KG über eine Strecke von 100 Metern mit kleiner Steigung in unserem Industriegebiet zu ziehen .. haha

    Mfg Benny

    - - - Aktualisiert - - -

    @radbruch

    also das Resultat auf dem steckbret ist, das die led/cam angeht und die led von der zweiten operation ganz leich an ist,
    wenn man die led/cam aber einschalten will reagiert die led von der operation 2 sie wird dann beim Knopf drücken ganz hell!

    mfg Benny

    - - - Aktualisiert - - -

    Und nochmal info für Radbruch,

    habe beide einzelnen Sketche ausprobiert, also separat auf dem Steckbrett und separat ausprobiert,
    in den arduino reingeladen.

    Also einzeln funktionieren sie

    Mfg Benny

    - - - Aktualisiert - - -

    also nochmals der code wie mit " Radbruch" besprochen,

    das prob is nun das beim drücken des schalters/tasters, die LED (ROT) von Operation 2 angeht
    Obwohl diese LED (ROT) ja vom Lichtsensor gesteuert werden sollte.

    Die LED (Gelb) die vom Schalter/Taster an und ausgeschalten wir also sprich die Netzwerkkammera passiert garnichts!

    Sprich die falsche LED wird angesteuert .

    Code:
    /*
    
    Autor: Benjamin Grammel
    Datum: 28.02.2014
    Projekt: Roboter RSL-7
    Verwendungszweck: Operation 1: Netzwerkkamera am Roboter manuell ein und Ausschalten
                      Operation 2: LED´s per Lichtsensor steuern
                      Operation 3: Lüfter per Temperatursensor steuern
    */
    
    // ----------------------------------------
    
    
    
    // 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
    }
    hier zwei Bilder hoffe so ist es verständlich!

    Klicke auf die Grafik für eine größere Ansicht

Name:	Schaltung_Bild_1.jpg
Hits:	9
Größe:	69,4 KB
ID:	27661Klicke auf die Grafik für eine größere Ansicht

Name:	Schaltung_Bild_2.jpg
Hits:	12
Größe:	63,7 KB
ID:	27662

    Mfg Benny

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    16.02.2014
    Ort
    bei Karlsruhe
    Beiträge
    74
    Das ist auf dem Foto nicht richtig zu erkennen - kann sein daß Deine Peripherie nicht wie in der Software beschrieben auf Pin 2,3,4 sondern auf 3,4,5 steckt?

    Außerdem denke ich daß der Sensorpin auf Analog 0 stecken soll, oder? Damit wäre der falsch definiert - der Pin heißt nicht "0", sondern "A0" oder "14". Das erklärt warum vom Sensor nichts ankommt.

    Hey aber die Kiste sieht ja richtig spannend aus. Wenn das mit dem Rasen mähen und Straße fegen mal klappt könntest Du mir dann die Baupläne zur Verfügung stellen?

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.04.2011
    Ort
    Heilbronn
    Alter
    28
    Beiträge
    180
    das freut mich wenn er dir gefällt, über die Baupläne sprechen wir noch

    gibt keine Baupläne, jedes Teil was man sieht ist auf einer CNC Fräsmaschine (Eumach UMC1000 und Eumach HSM5X ) gefräst

    Das RSL7 befindet sich bis zu jeder kleinsten Schrauben und unterlegscheibe im CAD.

    Nochmal zum Code,

    hab jetzt den Analogen Eingang auf A1 geändert und auch dort eingesteckt und des ledPin statt 4 auf 7 das es übersichtlicher ist.
    nochmals wie gesagt einzeln funktionieren die einzelne Schaltungen.

    Klicke auf die Grafik für eine größere Ansicht

Name:	Schaltung_Bild_3.jpg
Hits:	5
Größe:	61,5 KB
ID:	27663

    Mfg Benny

Seite 1 von 3 123 LetzteLetzte

Ä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
  •