-         

Ergebnis 1 bis 5 von 5

Thema: brauche Hilfe für den einfachsten Sketch

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2006
    Beiträge
    192

    brauche Hilfe für den einfachsten Sketch

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    ach, bin Anfänger und ich übe einfach zu wenig ...
    daher hänge ich an folgendem, heruntergebrochenem Easy-Sketch, der nicht die LEDs ändern will.
    Es ist ein Digispark Attiny85.
    Warum mag der nicht?

    Code:
    const int M1=4;  //Noise Modul 1 auf 4
    const int M2=5;  // Noise Modul 2 auf 5
    const int buzz=0; // Buzzer auf 0
    const int green =1; //LED Grün auf 1
    const int yellow =2; //LED Gelb auf 2
    const int red=3; //LED Rot auf 3
    
    
    void setup() {               
    
     
      pinMode(buzz, OUTPUT); //Buzzer
      pinMode(green, OUTPUT); // Green LED
      pinMode(yellow, OUTPUT); //Yellow LED
      pinMode(red, OUTPUT); // red LED
      pinMode(M1, INPUT); //Noise Modul1
      pinMode(M2, INPUT); //Noise Modul2
    
     }
    // the loop routine runs over and over again forever:
    
    void loop() {
    
    int schwelle1= digitalRead(M1);
    
    int schwelle2= digitalRead(M2);
    
      
    
    if (schwelle1=0){
    
      digitalWrite(green, HIGH);
    
     
    }
    
    if (schwelle1=1) {
    
                   
       digitalWrite(green, LOW);
    
                  
    }              
    }

  2. #2
    RN-Premium User Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    47
    Beiträge
    473
    Blog-Einträge
    16
    Zitat Zitat von xxrider Beitrag anzeigen
    Code:
    if (schwelle1=0){
    Code:
    if (schwelle1=1) {
    Wenn das Vergleiche sein sollen, dann solltest du den Vergleichsoperator == nutzen. = ist in C++ ein Zuweisungsoperator. Es ist ein beliebter Fallstrick in C, C++ und Java und ein gescheiter Compiler gibt eine Warnung aus bei Benutzung von = in der if-Anweisung.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2006
    Beiträge
    192
    ah, wird gleich probiert, danke!

    - - - Aktualisiert - - -

    o.k., also ich glaube das war auf alle Fälle ein Fehler.
    Aber funktionieren tuts trotzdem noch nicht ganz. Wenn ich P0 als Eingang proigrammiere und P1 als LED Ausgang (da ist auch eine interne LED dran), dann geht es.
    Wenn ich statt P0 Eingang den Eingang auf P5 programmiere, dann geht die LED mit einer Zeitverzögerung von ca. 3 Sekunden an und bei änderung des Eingangssignal sofort aus.
    (Zum Testen ziehe ich den Eingang entweder auf 5V oder auf gnd).
    Was kann da sein?

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    49
    Beiträge
    2.598
    Mein erstes Arduino Programm sah ähnlich aus (Fußgänger Ampel).
    Ich hatte im Define Teil keine "const" drin.

    Und ich habe durchgängig nur "HIGH" und "LOW" benutzt und keine "0" und "1".
    Als erste Maßnahme kann man mal prüfen welche Werte den "schwelle1" und 2 annehmen.
    Also eine Serielle Übertragung starten und nach der übernahme durch digitalRead mit Serial.print ausgeben und mit dem seriellen Monitor beobachten.

    Denn bis auf die Zuweisung statt des Vergleichs erscheint der Code OK zu sein.
    Und im dem Fall macht er ja was er soll.
    Die Konzequenz daraus wäre, daß das was er macht zwar richtig ist, aber nicht das was Du erwartest.
    Und da bleiben nur die beiden Variablen, die als einziges Zustandsänderungen verursachen können.
    Alo mal nachsehen was die für Werte haben.

    Beispiel für eine serielle Ausgabe in Deinem Code
    Code:
    void setup() {
      Serial.begin(9600); <<<< Serielle Ausgabe starten
      .
      .
      .
    }
    
    
    
    void loop() {
      int schwelle1 = digitalRead(M1);
      int schwelle2 = digitalRead(M2);
     
      Serial.print(schwelle1);   <<<< Wert ausgeben
      Serial.println(schwelle2);  <<<< Wert ausgeben und Zeilenumbruch
    
      if (schwelle1 == 0){
      .
      .
      .
      .
      .
    }
    Hier habe ich mal meinen Code drangehängt. der funktioniert so auf einem Arduino Nano.
    Code:
    int f_tast = 2;
    int a_rot = 3;
    int a_gelb = 4;
    int a_gruen = 5;
    int f_rot = 8;
    int f_gruen = 9;
    int f_lamp_tast = 13;
    int s_licht = A0;
    byte f_press = HIGH;
    
    void setup() {
    pinMode(f_tast, INPUT);
    pinMode(a_rot, OUTPUT);
    pinMode(a_gelb, OUTPUT);
    pinMode(a_gruen, OUTPUT);
    pinMode(f_rot, OUTPUT);
    pinMode(f_gruen, OUTPUT);
    attachInterrupt(0, button, LOW);
    //Serial.begin(9600);
    }
    
    void loop() {
      int sensorValue = analogRead(s_licht);
      //Serial.println(sensorValue);
      // Blinker code zum Prüfen ob Programm läuft 
      digitalWrite(f_lamp_tast, HIGH); //Blinker an Taste fuer Fussgaenger
      delay(500);
      digitalWrite(f_lamp_tast, LOW);
      delay(500);
      
      if (sensorValue > 500){ //Dämmerungswert für Nachtschaltung
      digitalWrite(a_rot, LOW);
      digitalWrite(a_gelb, HIGH); //Autos Gelb für Blinker
      digitalWrite(a_gruen, LOW);
      digitalWrite(f_rot, LOW);
      digitalWrite(f_gruen, LOW);
      delay(500);
      digitalWrite(a_gelb, LOW);
      }
      else {
      digitalWrite(a_rot, LOW);
      digitalWrite(a_gelb, LOW);
      digitalWrite(a_gruen, HIGH); //Autos gruen
      digitalWrite(f_rot, HIGH); //Fussgaenger rot
      digitalWrite(f_gruen, LOW);
      }
    
      // if (digitalRead(f_tast) == LOW){ //Taste Fussgaenger abfragen
      if (f_press == LOW){ //Statusvariable Taste Fussgaenger abfragen
      delay(500);
      digitalWrite(13, HIGH); //Taste Fussgaenger ist gedrueckt worden
      digitalWrite(f_rot, HIGH); //Fussgaenger rot
      digitalWrite(a_gruen, LOW);
      digitalWrite(a_gelb, HIGH); //Autos gelb
      delay(1000); // Autos Gelbphase
      digitalWrite(a_gelb, LOW);
      digitalWrite(a_rot, HIGH); //Autos rot
      delay(1000); // Fussgaenger Wartezeit damit kein Auto mehr fährt
      digitalWrite(13, LOW);
      digitalWrite(f_rot, LOW);
      digitalWrite(f_gruen, HIGH); //Fussgaenger gruen
      delay (6000); //Fussgaenger gruenphase
      digitalWrite(f_rot, HIGH); //Fussgaenger rot
      digitalWrite(f_gruen, LOW);
      delay(1000); //Autos Wartezeit damit kein Fussgaenger mehr laeuft
      digitalWrite(a_gelb, HIGH); //Autos gelb
      delay(1000); // Autos Gelbphase
      f_press = HIGH;
      }
    }
    void button(){
    f_press = LOW;
    }
    Geändert von i_make_it (10.02.2018 um 07:46 Uhr)

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2006
    Beiträge
    192
    Danke, dass du mich hier unterstützt!
    Das Projekt soll eine Lärmampel für meine Kinder werden, die 3 Lärmpegel-Abstufugen unterscheiden kann.
    Bei zu lange auf rot, soll ein Buzzer ertönen. Ich denke, wenn ich das Grundsätzliche geklärt habe, dann könnte es auch mit dem Gesamten klappen.

    aber nun erstmal für mich neu:serielle Übertragung.
    Wie ich das auf einfache Weise machen machen kann, da muss ich erstmal bisschen recherchieren.
    Aber der Weg ist gut, ich muss das transparent machen, das Handwerkszeug wird mir auch für weitere Projekte wichtig sein.
    So irgendwie unsicher bin ich ja darin, ob die ports wirklich alle funktionieren, aber nach Datenblatt müssten ja alle Ports P0-P5 universell als Analog in / Digital in / Out definierbar sein. Aber komischweis gibt es ja Unterschiede, wenn ich die Ports tausche...
    Grüße


    Zitat Zitat von i_make_it Beitrag anzeigen
    Mein erstes Arduino Programm sah ähnlich aus (Fußgänger Ampel).
    Ich hatte im Define Teil keine "const" drin.

    Und ich habe durchgängig nur "HIGH" und "LOW" benutzt und keine "0" und "1".
    Als erste Maßnahme kann man mal prüfen welche Werte den "schwelle1" und 2 annehmen.
    Also eine Serielle Übertragung starten und nach der übernahme durch digitalRead mit Serial.print ausgeben und mit dem seriellen Monitor beobachten.

    Denn bis auf die Zuweisung statt des Vergleichs erscheint der Code OK zu sein.
    Und im dem Fall macht er ja was er soll.
    Die Konzequenz daraus wäre daß das was er macht zwar richtig ist aber nicht das was Du erwartest.
    Und da bleiben nur die beiden Variablen, die als einziges Zustandsänderungen verursachen können.
    Alo mal nachsehen was die für Werte haben.
    - - - Aktualisiert - - -

    Es hat sich jetzt ein Ergebnis herausgestellt (serielle Auslesung war mich jetzt zunächst zu kompliziert, habe etwas anderes experimentiert, und auch vorsichtshalber das board gewechselt):

    (- als LED zum Nachweis habe ich die "onboard" benutzt(=P1))
    - alle restlichen Ports funktionieren korrekt als input, außer Port5. Dieser verhält sich komisch: 1. invers zu den anderen und 2. zeitverzögert
    Also: seltsam, und nachteilig, dass ich wohl mit Port 5 mein Projekt begonnen habe
    Schaun wir mal ob ich P5 als etwas anderes verwenden kann, denn ich benötige wie ich das sehe ALLE 6!


    Update:
    P5 ist bei den China-Clones wohl ein RESET pin, nicht ohne weiteres nutzbar...
    schade...
    Geändert von xxrider (10.02.2018 um 10:24 Uhr) Grund: Zitat verkleinert (ohne codes)

Ähnliche Themen

  1. Relai Signal an PC erkennen. Wie ist es am einfachsten zu realisieren?
    Von Earthbound64 im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 0
    Letzter Beitrag: 10.10.2013, 01:06
  2. [ERLEDIGT] Am einfachsten im Kreis fahren ?
    Von PICture im Forum Mechanik
    Antworten: 5
    Letzter Beitrag: 05.07.2012, 21:21
  3. [ERLEDIGT] Am einfachsten anfangen ?
    Von PICture im Forum Assembler-Programmierung
    Antworten: 49
    Letzter Beitrag: 17.07.2011, 22:38
  4. [ERLEDIGT] Wie am einfachsten Ausführungszeit Unterprogramms messen?
    Von PICture im Forum PIC Controller
    Antworten: 11
    Letzter Beitrag: 07.05.2006, 00:50
  5. Wie am besten und einfachsten °(Grad) mit LCD anzeigen?
    Von gzah im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 09.03.2006, 08:41

Berechtigungen

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