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

Thema: Fehler im Sketch für ATtiny?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.04.2008
    Beiträge
    282
    Ich dachte eher an was fertiges: http://shop.cboden.de/Schaltgeraete/...rchparam=servo

    Du kannst das aber natürlich auch selbst bauen. Wenn Du willst, kann ich aber auch eine komplette Steuerung für Dich bauen. Vielleicht kannst Du Dich ja mal mit etwas Mechanik revanchieren

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Das sieht ja sehr gut aus.
    Aber leider auch sehr groß. Dann ist ja der ProMini wieder im Spiel. Auch weil ich gerne mit 3,7 Volt bastle.

    Code:
    #include <SoftwareServo.h>
    
    
    
    
    SoftwareServo myservo;  // create servo object to control a servo 
    
    int potpin = A1;  // analog pin used to connect the potentiometer
    int val;    // variable to read the value from the analog pin 
    const int relaisPin = PB1; // Arbeitender DigitalPin6
    
    void setup() 
    { 
      myservo.attach(0);  // attaches the servo on pin 2 to the servo object 
    pinMode(PB1, OUTPUT);// ist der schaltende Ausgang
    
    } 
    
    void loop() 
    { 
      val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023) 
      val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180) 
      myservo.write(val);
                            // waits for the servo to get there 
    
      SoftwareServo::refresh();
    int val = analogRead(potpin); 
    if (val <= 70)
    {
      digitalWrite(relaisPin, HIGH);
    }
    else
    {
      digitalWrite(relaisPin, LOW);
    }
    if (val >= 110)
    {
    digitalWrite(relaisPin, HIGH);  
    }
    else
    {
    digitalWrite(relaisPin, LOW);  
    }
      
    }
    Sorry die //Beschreibung stimmt nicht.
    Das Funktioniert schon. Mir fehlt die Info wie man 2 Werte in die if Abfrage setzt.
    so wie ich das jetzt habe geht es nicht.
    Code:
    if (val <= 70 >=120)
    So auch nicht. Also zwischen 2 Werten HIGH sonst LOW?
    Wie schreibt man das?
    Steht irgendwie nicht im Arduino Kochbuch?
    Das das Servo nur solange reagiert, wie ein Taster gedrückt ist, regle ich einfach Analog.
    Jegliches delay mag die Library nicht.

    Leider bin ich jetzt bis Dienstag weg. Meine Frau verschleppt mich ganz hoch rauf, bis zur Mosel. Gefährliches Erdbebengebiet.
    Naja, ich muß mit.
    Meint sie?
    Dabei habe ich hier soviel zu tun!
    Beton vor der Pforte schütten, Blätter harken, Katzen füttern, einkaufen, Haus putzen, 10 Tage warten bis das Kind vom Reiterhof kommt,
    Dachrinne sauber machen, Gartenteich ausräumen und und und diesen Blödsinn hier machen.
    Sie meint das nützt nichts!
    Tschüss
    oder heißt es jetzt schon
    Tschüssle?
    Achim

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Mir fehlt die Info wie man 2 Werte in die if Abfrage setzt.
    So auch nicht. Also zwischen 2 Werten HIGH sonst LOW?
    Code:
    digitalWrite(relaisPin, (val > 70 && val < 120) ? HIGH:LOW);
    In den inneren Klammern steht eine und (&&) verküpfte Bedingung.
    Nach der Bedingung steht was zu tun ist nach folgender Syntax:
    Bedingung ? True-Fall : False-Fall

    Genauso geht:
    Code:
    boolean is_in_bounds = val > 70 && val < 120;
    digitalWrite(relaisPin,  is_in_bounds);
    
    // oder
    if(digitalWrite(val > 70 && val < 120)
      digitalWrite(relaisPin, HIGH);
    else
      digitalWrite(relaisPin, LOW);

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Die Ferien sind längst vorbei und ich versuche es weiter.
    Danke Sisor, für deine Wissensvermittlung. Das hat mir sehr geholfen!
    Der Sketch lief zwar, aber auch wenn nichts gemacht werden sollte flossen 30-40mA.
    Kann sein, das es an der geringen Spannung und den billigen Servos liegt. Eben, das sie die Position nicht eindeutig finden und weiter versuchen.
    Jetzt habe ich nach etlichen Versuchen einen sketch gefunden, welcher selbst bei 2,6 Volt läuft.
    Hier wird das/der Servo(Wie überhaupt-der-die-das) in Schritten mit Pause geführt.
    Mein Problem ist aber, das hier eine ständige Wiederholfunktion im Vordergrund steht. Eine-for- Schleife.
    Ich habe viel Versucht, aber die Softwareservo Bibliothek nimmt nichts an. Mit anderen Worten. Es passiert nichts.
    Begeister bin ich von der ATtiny Stabilität. Weit über 100 x habe ich ihn schon aus der Fassung gezogen und in das Steckbrett gesetzt.

    Also würde ich gerne wissen, wie ich die for Schleife ersetze, sodass nur nach Aufforderung das Ziel in einzelnen Schritten erreicht wird. Wie immer hilft mir das Arduino Kochbuch nicht weiter. Da werden rotierende Servos beschriebe. Auch mit ner "for" Schleife. Statt nur den Grundcode zu geben sind in allen Beispielen immer 2 Funktionen verknüpft.
    Damit habe ich Probleme

    Achim, der Versuchende.
    Code:
    #include <SoftwareServo.h>
    
    SoftwareServo servo;
    void setup()
    {
      servo.attach(0);} //benennt den Pin des Servos
    
    void loop() 
    {
        int pos; //wechselnde Position, nach numerischen Werten???
        for(pos = 30; pos < 150; pos += 1)//Bestimmung,soll in 1ner Schritten von 150 nach 30° laufen
        {
            servo.write(pos); // //Nun soll das Servo laufen           
            delay(20);                     
            SoftwareServo::refresh();//this row....
            
        }
     {   delay(2000);
    }
    
    
    {
      delay(2000);
    }
    
        for(pos = 150; pos>=30; pos-=1) //das Gleiche rückwärts
        {                               
            servo.write(pos);             
            delay(20);                     
            SoftwareServo::refresh();//This row....
            
        }
        {
          delay(2000);
    }
    }

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Wenn ich in dem unteren Sketch nur
    Code:
    servo.write(pos=150);
    delay(50);
    {
    delay(1000);
    }
    servo.write(pos=30);
    delay(5o);
    {
    delay(1000),
    }
    eingebe, versucht es wenigstens etwas dem Befehl zu folgen.

    Wenn ich
    Code:
    #include <SoftwareServo.h>
    
    SoftwareServo servo;
    
    void setup()
    {
     servo.attach(0);
    
    }
    
    void loop()
    {
       int pos; 
    
    
    {servo.write(pos=30);// //Nun soll das Servo laufen           
            delay(5); 
    servo.write(pos=30);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=32);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=34);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=36);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=38);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=40);// //Nun soll das Servo laufen
             SoftwareServo::refresh();          
            delay(5); 
            servo.write(pos=42);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=44);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=46);// //Nun soll das Servo laufen           
            delay(5);
            servo.write(pos=48);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=50);// //Nun soll das Servo laufen
            SoftwareServo::refresh();           
            delay(5); 
            servo.write(pos=52);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=54);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=56);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=58);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=60);// //Nun soll das Servo laufen           
            delay(5);  
                                
            SoftwareServo::refresh();
            servo.write(pos=62);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=64);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=66);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=68);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=70);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=72);// //Nun soll das Servo laufen
             SoftwareServo::refresh();          
            delay(5); 
            servo.write(pos=74);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=76);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=78);// //Nun soll das Servo laufen           
            delay(5);
            servo.write(pos=80);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=82);// //Nun soll das Servo laufen
            SoftwareServo::refresh();           
            delay(5); 
            servo.write(pos=84);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=86);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=88);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=90);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=92);// //Nun soll das Servo laufen           
            delay(5);  
                                
            SoftwareServo::refresh();
    }
    {delay(1000);
    }
    
    {
      servo.write(pos=90);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=88);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=86);// //Nun soll das Servo laufen           
            delay(5);  
              servo.write(pos=84);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=82);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=80);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=78);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=76);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=74);// //Nun soll das Servo laufen           
            delay(5);                    
            SoftwareServo::refresh();
    
            servo.write(pos=72);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=70);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=68);// //Nun soll das Servo laufen           
            delay(5);  
              servo.write(pos=66);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=64);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=62);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=60);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=58);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=56);// //Nun soll das Servo laufen           
            delay(5);                    
            SoftwareServo::refresh();
            servo.write(pos=54);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=52);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=50);// //Nun soll das Servo laufen           
            delay(5);  
              servo.write(pos=48);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=46);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=44);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=42);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=40);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=38);// //Nun soll das Servo laufen           
            delay(5);                    
            SoftwareServo::refresh();
            servo.write(pos=36);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=34);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=32);// //Nun soll das Servo laufen           
            delay(5);  
              servo.write(pos=30);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=28);// //Nun soll das Servo laufen           
             
            SoftwareServo::refresh();
    }
    {
      delay(1000);
    }
    }
    eingebe, geht nichts??

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Hi achso.
    Lies dir mal hier die Beschreibung von refresh() durch und warte bis es 'KLICK' macht.

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Hi Sisor,
    da habe ich die Library auch her und das gelesen.
    Code:
    refresh()
        You must call this at least once every 50ms to keep the Servos updated. You can call it as often as you like, 
    it won't fire more than once every 20ms. When it does fire, it will take from .5 to 2.5 milliseconds to complete,
     but won't disable interrupts.
    Soweit ich das verstehe, verstehe ich nicht viel. Für mich steht da, dass alle 50ms die Servos upgedatet werden sollen. Was aber das Programm nicht unterbricht. Das es nicht mehr als alle 20ms feuert verstehe ich nicht. Wenn es aber feuert, ist es nach 2,5ms fertig?
    Gerne hätte ich den "Klick". Blöderweise aber nur ein Heulen und Pfeifen.
    Heute Abend probiere ich weiter rum. Mit Lernen ist nicht viel drin. Ich habe "mein Ding vor einigen Jahren weggekriegt". Eben Pech gehabt. Nun muss es so gehen. Ich muss immer alles gleichzeitig sehen, dann kann ich kombinieren. Bei der Programmierung muß man sich viel Neues merken, das leistet mein Gehirn nicht mehr.
    Schönen Dank
    Achim

Ähnliche Themen

  1. Digispark - Sketch hochladen
    Von Cysign im Forum Arduino -Plattform
    Antworten: 2
    Letzter Beitrag: 23.02.2016, 13:36
  2. Sketch Problem
    Von wendtdir im Forum Arduino -Plattform
    Antworten: 1
    Letzter Beitrag: 16.07.2015, 18:25
  3. Arduino Sketch serielles Terminal: erkennen von CR
    Von Ford Prefect im Forum Arduino -Plattform
    Antworten: 3
    Letzter Beitrag: 18.06.2014, 14:58
  4. frage zu sketch arduino und webserver
    Von der_tom im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 11.03.2012, 18:07
  5. Timer1 Fehler bei Attiny 25
    Von hütti im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 28.05.2007, 16:25

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress