-         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: Probleme mit einfacher Tasterschaltung

  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von Moppi
    Registriert seit
    18.03.2018
    Beiträge
    1.981
    Blog-Einträge
    15
    Anzeige

    Guter Hinweis, da muss man noch mal schauen.

    Ja, das mit den Werten ist korrekt, ich ändere das oben noch einmal.

    Danke wkrug!

    MfG

    - - - Aktualisiert - - -

    Zitat Zitat von wkrug Beitrag anzeigen
    Ich würde wie oben schon geschrieben 2 Switch abfragen einbauen.
    Die erste für die Richtung, die zweite für vor / zurück und Stopp.
    Wenn mehr nicht benötigt wird, sicher die einfachere Variante.

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    32
    Beiträge
    4.910
    Code sollte in den Code Tags sein, dann ist es lesbar.


    als Beispiel:
    Code:
    Hier steht der Code
    Zum Thema, wie du den Switch Befehl ändern musst. Du musst verstehen wie Switch funktioniert.

    Code:
    switch (variable)
    {
    case 1: Hier steht der Code für Auswahl 1
    break;
    
    case 2: Hier steht der Code für Auswahl 2
    break;
    
    default:
    }
    Die Variable bei Switch muss eine Integervariable sein (nicht Float o.Ä.), dadurch hast du immer ganze Zahlen. Der Switch Befehl kontrolliert die angegebene Variable auf den darin enthaltenen Wert und springt zum richtigen Case. Steht z.B. in der Variable eine 1, wird zum "Case 1" gesprungen. Sollte die Zahl keinen Case zugeordnet sein (z.B. Variable=3), wird zum "default" gesprungen. Default sollte immer eingebaut werden, auch wenn nichts darin steht. Das switch wird nach jedem Break abgebrochen. Solltest du kein Break verwenden wird in die nächste Case Bedingung gesprungen. Z.B. du vergisst bei Case 1 das Break und in der Variable steht "1" drinnen, wird "case 1" ausgeführt und geht danach weiter zu "case 2".



    Als Variable kannst du jede Ganzzahlvariable nehmen, also auch z.B. einen Eingangsport. Wenn du in PINB z.B. PB0 und PB1 auf 1 hast, wird direkt in Case 3 gesprungen (wenn PINB bei der Variable angegeben ist). Achte aber darauf das du nur die Eingänge maskierst.

    Ich hoffe es ist so verständlich.

    MfG Hannes

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    126
    Hallo Moppi,
    unheimlich Nett von Dir. Danke
    Aber das wird mit mir nichts.
    Man gibt ja ungern zu, das man in gewissen Bereichen blöd ist.
    Mein Problem ist mein Gehirn. (Stromunfall, kann kaum lernen, vergesse neue Sachen schnell. Alles `Alte`ist noch da. Aber da hatte ich noch keinen Arduino)
    Deshalb ist es wohl doch besser, ich nehme 2 Attiny je Bot. Der Übersichtlichkeit halber. Habe ich auch noch, allerdings in SMD. Dazu muss der Code schon stehen!(Nach dem verlöten ist Schicht.)
    Zum flashen habe ich mir eine Fassung gebaut. Drunter ist eine 8 Pol Fassung gelötet. Die passt in die ATTiny Fassung für bedrahtete auf den UNO zum Programmieren.
    Also ganz blöde bin ich nun auch nicht. Das sind mir nur zuviele Unbekannte.
    Klicke auf die Grafik für eine größere Ansicht

Name:	SNC10003.jpg
Hits:	3
Größe:	40,6 KB
ID:	34573
    Mit der While Schleife. Das hat den Vorteil, das man nicht gleichzeitig Vor/Rück bei ATTiny 1 schalten kann. Und nicht gleichzeitig rechts/links bei ATTiny 2. Schon aber Vor/Rück bei ATTiny 1 und Rechts/Links bei Attiny 2. Damit umgehe ich doch mein Unvermögen ziemlich locker.
    Ich scheiter jetzt schon am sketch daran, das der Fehler mit der Deklarierung von > if (case '2': ) < für mich unklar ist.

    if (case'1'
    {
    digitalWrite(Motor_1, HIGH);//Vorwärts
    digitalWrite(Motor_2, LOW);
    }
    else
    {
    digitalWrite(Motor_1, LOW);
    digitalWrite(Motor_2, LOW);
    }
    {
    if (case '2'
    {
    digitalWrite(Motor_1, LOW);//Rückwärts
    digitalWrite(Motor_2, HIGH);
    }
    else
    {
    digitalWrite(Motor_1, LOW);
    digitalWrite(Motor_2, LOW);
    }

    Arduino: 1.8.10 (Windows 7), Board: "Arduino/Genuino Uno"

    C:\Users\Kellerassel\Documents\Arduino\Wein__ben\W ein__ben.ino: In function 'void loop()':

    Wein__ben:84:5: error: expected primary-expression before 'case'

    if (case'1'

    ^~~~

    Wein__ben:84:5: error: expected ')' before 'case'

    Wein__ben:95:5: error: expected primary-expression before 'case'

    if (case '2'

    ^~~~

    Wein__ben:95:5: error: expected ')' before 'case'

    Wein__ben:104:1: error: expected '}' at end of input

    }

    ^

    Wein__ben:104:1: error: expected '}' at end of input

    Mehrere Bibliotheken wurden für "Servo.h" gefunden
    Benutzt: C:\Program
    exit status 1
    expected primary-expression before 'case'

    Dieser Bericht wäre detaillierter, wenn die Option
    "Ausführliche Ausgabe während der Kompilierung"
    in Datei -> Voreinstellungen aktiviert wäre.

    Oh
    Achim

  4. #14
    Erfahrener Benutzer Robotik Einstein Avatar von Moppi
    Registriert seit
    18.03.2018
    Beiträge
    1.981
    Blog-Einträge
    15
    Hallo Achim,

    switch ersetzt if (...) else ...

    aus dem
    Code:
    if(variable == 1){
    ...
    }
    else{
    ...
    }

    kann man diesen machen
    Code:
    switch (variable){
    
    case 1:
       ...
    
    case ...
    
    }

    Für Deinen Beispielcode kann man das etwa so machen
    Code:
    switch (...){
    
    
    case 1:
    digitalWrite(Motor_1, HIGH);//Vorwärts
    digitalWrite(Motor_2, LOW); break;
    case 2:
    digitalWrite(Motor_1, LOW);//Rückwärts digitalWrite(Motor_2, HIGH); break;
    }



    Mach es aber bitte so, wie es für Dich besser ist.


    MfG
    Geändert von Moppi (18.12.2019 um 20:06 Uhr)

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    126
    Danke Euch Allen!
    Nun dachte ich, es wäre Einfach.
    War aber nichts.
    Dieser Code schaltet so lange man den Taster hält:

    Code:
    */
    const int ledPin_1    = 8;
    const int ledPin    = 13;
    const int Pin = 6; // Taster
    const int Pin_1 = 7; // Taster
    
    void setup()
    {
      pinMode(6, INPUT);
      pinMode(7, INPUT);
      pinMode(13, OUTPUT);
      pinMode(8, OUTPUT);
    }
    
    void loop()
    {
      int Taster = digitalRead(6);//Taster A
      while (Taster == 1)//while the button is pressed
      {
        digitalWrite(13, HIGH);
        delay(10);
        digitalWrite(13, LOW);
    
        Taster = digitalRead(6); //refresh value of variable
      }
    
    
    
      {
        int Taster_1 = digitalRead(7);//Taster B
        while (Taster_1 == 1)//while the button is pressed
        {
          digitalWrite(8, HIGH);
          delay(10);
          digitalWrite(8, LOW);
    
          Taster_1 = digitalRead(7); //refresh value of variable
        }
      }
    }
    Dieser nicht???:

    Code:
    const int Motor_1 = 10; //Motor
    const int Motor_2 = 11;
    const int Fern_3 = 4; //Fern Vor
    const int Fern_1 = 5; //Fern Rück
    const int FERNON = 13;
    int Start = 12; // start Motor
    void setup() {
      pinMode(10, OUTPUT);
      pinMode(11, OUTPUT);
      pinMode(4, INPUT);
      pinMode(5, INPUT);
      pinMode(12, OUTPUT);//Start
      pinMode(13, OUTPUT);
    }
    
    void loop()
    {
      digitalWrite(Start, HIGH);
    
      digitalWrite(FERNON, HIGH);
      {
        int Taster = digitalRead(Fern_3);//Fern Vor
        while (Taster == 1)//while the button is pressed
        {
          digitalWrite(10, HIGH);
          digitalWrite(11, LOW);
          delay(100);
          digitalWrite(10, LOW);
          digitalWrite(11, LOW);
    
          Taster = digitalRead(Fern_3); //refresh value of variable
        }
    
    
    
        {
          int Taster_1 = digitalRead(Fern_1);//Fern vor
          while (Taster_1 == 1)//while the button is pressed
          {
            digitalWrite(11, HIGH);
            digitalWrite(10, LOW);
            delay(100);
            digitalWrite(11, LOW);
            digitalWrite(10, LOW);
    
            Taster_1 = digitalRead(Fern_1); //refresh value of variable
          }
        }
      }
    
    }
    Wo ist der Fehler?
    Wieso fehlt bei mir das Zeichen Codeblock setzen??
    Geändert von radbruch (18.12.2019 um 22:01 Uhr)

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von Moppi
    Registriert seit
    18.03.2018
    Beiträge
    1.981
    Blog-Einträge
    15
    so ist er dann richtig

    Code:
    const int Motor_1 = 10; //Motor
    const int Motor_2 = 11;
    const int Fern_3 = 4; //Fern Vor
    const int Fern_1 = 5; //Fern Rück
    const int FERNON = 13;
    int Start = 12; // start Motor
    
    void setup() {
    pinMode(10, OUTPUT);
    pinMode(11, OUTPUT);
    pinMode(4, INPUT);
    pinMode(5, INPUT);
    pinMode(12, OUTPUT);//Start
    pinMode(13, OUTPUT);
    } void loop() {
    digitalWrite(Start, HIGH);
    digitalWrite(FERNON, HIGH);
    int Taster = digitalRead(Fern_3);//Fern Vor
    while (Taster == 1)//while the button is pressed
    {
    digitalWrite(10, HIGH);
    digitalWrite(11, LOW);
    delay(100);
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);
    Taster = digitalRead(Fern_3); //refresh value of variable
    }
    int Taster_1 = digitalRead(Fern_1);//Fern vor
    while (Taster_1 == 1)//while the button is pressed
    {
    digitalWrite(11, HIGH);
    digitalWrite(10, LOW);
    delay(100);
    digitalWrite(11, LOW);
    digitalWrite(10, LOW);
    Taster_1 = digitalRead(Fern_1); //refresh value of variable
    }
    }

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    126
    Das tut mir Leid!!

    Es ist nicht der Sketch.
    Den Ersten habe ich am UNO getestet. Den 2. an dem Bot mit Promini.
    Der Festspannungsregler bricht kurz ein.
    Es ist der TS 7805CZ. Der sollte laut Manual keine weitere Beschaltung brauchen, wenn der Weg kurz ist.
    War wohl nix.
    Entschuldigung. Morgen mache ich weiter!

    Achim, der Weihnachten gemischt kommen sieht

  8. #18
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    51
    Beiträge
    1.668
    Versuchs mal mit ner richtigen Stromversorgung.
    Diese 9V-Blöcke gehn für Radios oder nen paar LED's, aber für Motoren oder Servos eher nicht.
    Die liefern einfach die hohen Ströme nicht.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    126
    Hallo,
    in der zwischenzeit habe ich die Prominis und die Silberdrähte ausgelötet.
    Überall aus ex Projekten die Attiny gezogen und wenigstens die VOR/RÜCKwärtsgeschichte hingekriegt.

    Ja, überlegen wäre gut gewesen! 9Volt Block bedeutet 6 Minizellen.
    Der Anlaufstrom eines DC Motors kann bis zum neunfachen des Betriebsstroms bedeuten.
    Deshalb habe ich jetzt die Steuerung mit ner Schottky Diode getrennt und je einen Goldcap 1Farad montiert. Davon kann die Schaltung ja fast alleine Leben.
    Damit die Schaltung nicht "flattert", musste ich die Pause auf mind. 200mSec hochsetzen.
    Nun dachte ich, das läuft jetzt.
    War aber nichts.
    Ich bekomme den Scetch für den ATtiny 85 nicht hin.
    Servo H geht natürlich nicht. Dann hatte ich Softwareservo getestet, lief auch nicht. Jetzt bin ich bei :

    #include <Servo8Bit.h>

    Servo8Bit myservo;

    int pos = 0;
    const int Fern_0=3;//Fern Rechts
    const int Fern_2=4;//Fern Links


    void setup() {
    myservo.attach(0); // Servo auf DigitalPin 0

    pinMode(3, INPUT);
    pinMode(4, INPUT);
    }

    void loop()
    {
    int Taster = digitalRead(Fern_0);//Fern Rechts
    while (Taster == 1)//while the button is pressed
    {
    myservo.write(60);
    delay(300);
    myservo.write(90);
    delay(100);
    Taster = digitalRead(Fern_0); //refresh value of variable
    }



    {
    int Taster_1 = digitalRead(Fern_2);//Fern vor
    while (Taster_1 == 1)//while the button is pressed
    {
    myservo.write(120);
    delay(300);
    myservo.write(90);
    delay(100);
    Taster_1 = digitalRead(Fern_2); //refresh value of variable
    }
    }
    }

    Wieso fehlt mir die Möglichkeit Codeblöcke zu setzen?
    Tut mir Leid!
    Was fehlt?

    Manchmal frage ich mich, ob ich noch alle Tassen im Schrank habe. Bloß für die Weihnachtsbande so einen Nerv zu haben. Aber dann fällt mir mein ü80 Vater ein. Er kommt mit seinem neuen 160Ps Flitzer an. Steigt aus und geht zur Pforte. (Wie jedes Jahr)Das haben garantiert meine Töchter(18+27) gesehen und schalten den Überwachungsmonitor ein. Er kommt, wie jedes Jahr nur zu Weihnachten vorbei. Latscht an einer weißroten Kette mit der Aufschrift: "Klingeln, Kette ziehen" vorbei bis zum Rolltor. Das ist motorisch angetrieben. Nun versucht er zu schieben,zu drücken. Die Töchter gaggern sich einen. Er sieht sich um, und wiederholt seine Aktivitäten bis einer drinnen auf die Taste drückt.
    Nun fängt er an zu reden bis er wieder verschwindet. Wer alles Krank ist, wieso die Nachbarn kein Gift streuen und sein Weg verunkrautet, was er gestern gemacht hat vorgestern. Keiner kommt zu Wort. Er übersabbelt alles.
    Beim Essen hören wir gerne ein Hörbuch. Die Herdmanns oder Mrs. Moose oder ähnlich. Geht aber nicht, denn er hat längst den Ton übernommen und erzählt seinen Kram.
    Um das zu brechen, brauche ich etwas um alle Sinne zu beschäftigen, abzulenken. Dummerweise fiel meine Wahl dieses Jahr auf diese dusseligen Rob`s(Oder ich Dussel)
    Wenn da alle auf Tasten drücken und es nur 2 Frequenzen gibt, dachte ich. Dann gibt es geiles Chaos. Dann fällt ihm nichts ein. Wir hatten schon vieles. Unter Anderem Emaillieren, Hexbug Hindernisstour.
    Ich gestehe, einmal pro Woche rufe ich ihn an, melde mich. Dann lege ich den Hörer hin und sage nur immer ja, oh,äh, weiß nicht, ja gut usw. Nach einer Stunde ist er durch und sagt: ja, danke für den Anruf und legt auf.
    Achim

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    126
    Danke nochmnal für die Hilfe!
    Das Projekt habe ich um 1 Jahr vertagt.
    Weihnachten läuft so wie es ist!
    Das " Fahrzeug " ist Ok.
    Aber der Rest?
    Die Batterie ist echt zu klein. Das Ärgerliche ist nur, das der Fernsteuerempfänger 5 Volt braucht. Wenn ich einen Lipo verwenden würde, bräuchte ich ein Step Up Modul.
    Der Platz wäre da. Die L 293D Brücke ist auch nicht das Gelbe. Hier baue ich lieber 4 Transistoren ein. Braucht weniger Platz und startet bei weniger Spannung. Zwischen Fernsteuerung und ATtiny wäre wohl ein Inverter nicht schlecht. Oft lief der LOOp trotz Whileschleife einfach ständig durch.

    Wirklich schönen Dank und allen viel Ruhe und ein nettes Auskommen
    Achim

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Fehleranalyse PWM-Tasterschaltung
    Von hansesel im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 09.01.2014, 13:51
  2. Probleme mit Tasterschaltung
    Von Tuxist im Forum C - Programmierung (GCC u.a.)
    Antworten: 17
    Letzter Beitrag: 13.05.2012, 06:48
  3. Probleme mit einfacher Linenverfolgung!
    Von RuKi000 im Forum Asuro
    Antworten: 9
    Letzter Beitrag: 17.04.2009, 20:47
  4. einfacher Getränkemixer
    Von Feli im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 9
    Letzter Beitrag: 23.03.2008, 20:54
  5. Einfacher Pegelwandler
    Von Coalminer im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 22.11.2004, 06:48

Berechtigungen

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