Werbung
Wie meine Vorredner (-schreiber) schon sagten: die Arduino-Bibliotheken sind speziell auf einige Prozessoren angepasst. Solange man also zum Beispiel einen ATMega328 nutzt, ist alles gut. Sobald man einen etwas exotischeren Controller nutzt, funktionieren viele der Standard-Bibliotheken nicht mehr. Digistump (http://digistump.com/) hat ein Arduino-Board auf Basis eines ATtiny. Dafür gibt es auch eine Erweiterung der Arduino-IDE mit ein paar passenden Bibliotheken.
Für meine eigenen Projekte bin ich allerdings von der Arduino Software wieder abgerückt, da sie doch recht unflexibel ist und jede Menge Overhead mitbringt. Es ist zwar etwas mehr Arbeit, einen Controller in nativem C zu programmieren, allerdings lohnt sich der Aufwand in meinen Augen. Ich nutze deshalb eigentlich nur noch das ATMEL Studio. Habe dort auch schon einige Projekte mit Servos umgesetzt, ohne auf fertige Bibliotheken zurück zu greifen. Übrigens auf Basis eines ATtiny45, der dafür dicke reicht, wenn man auf den ganzen Arduino Schnick-Schnack verzichtet. Eines der Projekte ist ein Servo-Positionier-Modul, bei dem man die beiden Servo-Positionen per Poti einstellen kann und dann einfach per Taster oder per Optokoppler-Eingang hin und herschalten kann. Vielleicht kannst Du Dir Dein Leben etwas erleichtern, wenn Du aus sowas zurück greifst.
Wenn man die Grundlagen und die Theorie der Servo-Ansteuerung mal verstanden hat (und zudem vielleicht noch ein Oszi hat), ist das eigentlich alles kein Problem und geht insgesamt vielleicht sogar schneller als der Versuch, Arduino auf Deine Bedürfnisse anzupassen.
Geändert von redround (19.10.2016 um 11:48 Uhr)
Kalt oder heiß, wer weiß?
Das baue ich nicht wieder.
Vielleicht noch als Raumthermostat im Haus.
Ich glaube ich vertüddel mich gerade total.
Je mehr man liest, je mehr Info. Leider breit gefächert.
An Schnick-Schnack habe ich auch kein Interesse.
Genau das Suche ich gerade:
Eines der Projekte ist ein Servo-Positionier-Modul, bei dem man die beiden Servo-Positionen per Poti einstellen kann und dann einfach per Taster oder per Optokoppler-Eingang hin und herschalten kann.
Meinst du bei Digistump die kleinen Wifi Boards?
Ich habe noch mehrere von den ATtinys und ProMinis.
Damit muß ich erstmal etwas machen. Es reicht schon, dass ich unter anderem jede Menge Logik Ic wenig Sinnvoll rumliegen habe.
Ich versuche mal einen Servo-Positionier-Modul-Sketch hinzukriegen.
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
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.
Sorry die //Beschreibung stimmt nicht.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); } }
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.
So auch nicht. Also zwischen 2 Werten HIGH sonst LOW?Code:if (val <= 70 >=120)
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
Mir fehlt die Info wie man 2 Werte in die if Abfrage setzt.
So auch nicht. Also zwischen 2 Werten HIGH sonst LOW?In den inneren Klammern steht eine und (&&) verküpfte Bedingung.Code:digitalWrite(relaisPin, (val > 70 && val < 120) ? HIGH:LOW);
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);
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); } }
Lesezeichen