PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit einfacher Tasterschaltung



achso
17.12.2019, 19:27
Hallo,
mal wieder komme ich nicht weiter.
Ein kleiner 4 Kanal Fernsteuer Roboter. 1 DC Motor. L293D, proMini, 9Volt Block, Festspannungsregler 5 Volt und ein Servo.
Die 4 Emfängerkanäle liefern HIGH und sind mit 10K auf GND.
Vor, Rück, Links, Rechts
Mit diesem Sketch geht es noch nicht. Es geht nur eine Funktion zur Zeit. Aber z.B. Vor und Links oder Rechts zugleich geht nicht.
Was kann ich machen um das zu erreichen?


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);//Taster
pinMode(7, INPUT);//Taster
pinMode(13, OUTPUT);//LED
pinMode(8, OUTPUT);//LED
}

void loop()
{
int pulsador = digitalRead(6);//Taster A
while (pulsador == 1)//while the button is pressed
{
digitalWrite(13, HIGH);
delay(10);
digitalWrite(13, LOW);

pulsador = digitalRead(6); //refresh value of variable
}



{
int pulsador_1 = digitalRead(7);//Taster B
while (pulsador_1 == 1)//while the button is pressed
{
digitalWrite(8, HIGH);
delay(10);
digitalWrite(8, LOW);

pulsador_1 = digitalRead(7); //refresh value of variable
}
}
}

Gerne würde ich einen Tipp bekommen
Achim

Moppi
17.12.2019, 19:38
Hallo,

kann auch nicht funktionieren, mit dem gleichzeitigen Drücken:



while (pulsador == 1)//while the button is pressed
{
digitalWrite(13, HIGH);
delay(10);
digitalWrite(13, LOW);

pulsador = digitalRead(6); //refresh value of variable
}




Wenn Du einen Button drückst und in der Schleife so lange wartest, bis der nicht mehr gedrückt ist, wie fragst Du dann in der Zeit ab, ob ein anderer Button gedrückt ist?

Dann musst Du zuerst immer alle Button-Zustände einlesen und dann entsprechend darauf reagieren, mit Verzweigungen, wie switch.


MfG
:Weihnacht

achso
17.12.2019, 19:57
Danke,
ja klar, ist logisch.
Aber ich weiß vorher doch garnicht welcher Taster gedrückt wird. Switch sagt mir nur Schalter?
Ich überlege gerade lieber die Prominis wieder auszulöten und duch 2 Attiny zu ersetzen. Dann wäre das Problem weg.
Weihnachten ist immer so Öde. Das muß ich jedesmal Auflockern. Deshalb habe ich 6 von diesen dösigen Teilen schon montiert.
Nun habe ich schon ca. 80 Std mit dem Sketch zugebracht. Fast schon deprimert aufgegeben.
Ärgerlicherweise wird die Zeit knapp.
Für Heute ist erstmal Schluß.
Dankeschön
Achim

wkrug
17.12.2019, 20:05
Ich würde das auch so machen wie Moppi das vorschlägt.
Also den kompletten Port an dem die Taster hängen einlesen und dann alle sinnvollen Zustände mit Switch Befehlen abarbeiten.
Dabei muss natürlich auch die Rückschaltung auf die Neutrallagen, also Geradeaus und Stopp berücksichtigt werden.
Ich mach in C da immer Zuweisungen wie z.B.
#define rechts 0b00000001
#define links 0b00000010
#define gerade 0b00000000
#define vorwärts 0b00000100
...
Die kann man dann mit dem aktuellen Zustand der Tasten UND verknüpfen und die entsprechende Reaktion auslösen.
Nicht sinnvolle Eingaben wie z.B. Links und Rechts gleichzeitig, oder Vor und Zurück gleichzeitig müssen natürlich geblockt werden.
Diese Switch sequenz kann dann in einer Endlosschleife durchlaufen werden.
Da die Befehle anscheinend direkt umgesetzt werden kann man eventuell auch auf eine Entprellung der Tasten verzichten.


Switch sagt mir nur Schalter?
switch ist auch ein C - Befehl.
Damit kann innerhalb der Anweisung abhängig von einer Variable ein anderer Programmteil ausgeführt werden

switch(richtung){
case 1:
tu was;
break;

case 2:
tu was anderes;
break;

case 3:
tu was ganz andres;
break;

default:
wenn gar nichts passt;
}
Abhängig von der Variable richtung wird case 1,2, oder 3 ausgeführt.
Wenn keine der Bedingungen zutrifft wird default ausgeführt.
Ich denka mal das Moppi das meinte.

Moppi
18.12.2019, 08:00
Switch sagt mir nur Schalter?


wkrug hat es richtig erklärt, was ich meinte. Entschuldige! Bin nicht davon ausgegangen, dass Du switch nicht kennst. Kenne Deinen Kenntnisstand noch nicht.


Danke,
Nun habe ich schon ca. 80 Std mit dem Sketch zugebracht. Fast schon deprimert aufgegeben.
Ärgerlicherweise wird die Zeit knapp.


Dein Problem ist nicht so schwer zu lösen. Der Code, den Du hier gezeigt hast, ist das alles? Also alles zu den Tastern oder hast Du noch mehr Code zu den Tastern?
Wenn, dann stell den mal vollständig hier rein, vielleicht kann man ihn direkt verändern, dass er so funktioniert, wie Du denkst. Dann sparst Du Zeit.

Weihnachten rückt immer näher. Und merkwürdiger Weise geht das jetzt von Tag zu Tag auch immer schneller.

MfG
:Weihnacht

PS: Ein Beispiel, wie man eine Tastenabfrage und die Reaktion darauf auch umsetzen kann.
Es gibt, je nach Anforderung, immer mehrere Lösungen oder eine Lösung, die besser geeignet ist.
Deshalb ist das in erster Linie nur ein Denkanstoß.




//Pin-Zuordnungen
#define Taster1 11
#define Taster2 12
#define Taster3 13


void setup()
{
//Eingänge für Taster konfigurieren
pinMode(Taster1, INPUT_PULLUP);
pinMode(Taster2, INPUT_PULLUP);
pinMode(Taster3, INPUT_PULLUP);
}


//Status-Variable ist ein Byte, also 8 Bit
byte Status;




void loop()
{


//Taster Zustände abfragen, bei INPUT_PULLUP ist Taster geschlossen, wenn der Eingang = LOW ist
Status = 0;
if(!digitalRead(Taster1))Status += 1; //Bit#0 für Taster1 setzen
if(!digitalRead(Taster2))Status += 2; //Bit#1 für Taster2 setzen
if(!digitalRead(Taster3))Status += 4; //Bit#2 für Taster3 setzen
//Status hat jetzt alle Zustände der Taster gespeichert.
//Ist ein Taster geschlossen, dann ist das zugehörige Bit in "Status" = 1, sonst 0



//Hier die Auswertung
switch (Status)
{
case 1:
//Wenn 1, dann ist Taster1 geschlossen und alle anderen offen
break;
case 2:
//Wenn 2, dann ist Taster2 geschlossen und alle anderen offen
break;
case 4:
//Wenn 4, dann ist Taster3 geschlossen und alle anderen offen
break;
case 3:
//Wenn 3, dann ist Taster1 und Taster2 geschlossen und alle anderen offen
break;
case 5:
//Wenn 5, dann ist Taster1 und Taster3 geschlossen und alle anderen offen
break;
case 7:
//Wenn 7, dann ist Taster1 und Taster2 und Taster3 geschlossen
break;
case 6:
//Wenn 6, dann ist Taster2 und Taster3 geschlossen und alle anderen offen
break;


default:
//Wenn kein Zustand von oben zutreffend ist, dann wird der Code ausgeführt, der hier steht
}


}

achso
18.12.2019, 11:01
Super,
dankeschön!
Im Januar hatte ich mit dem Bauen begonnen. Nun kam mir das ganze Jahr was dazwischen. Leider stelle ich mich mit dem Lernen immer so kompliziert an.
Die Hindernis IR Module baue ich wieder raus. Die Einfache Version reicht.
Einen Sketch hatte ich natürlich schon fertig. Da ging aber gar nichts. Das ist das Erste Mal, das weder delay, noch Millis gingen.
Heute Abend probiere ich weiter.
Fast hätte ich mich schon aus der Situation gezogen und mit je 2 ATTiny das Problem locker umschifft.
Aber die Prominis auslöten ist wenig spaßig.

Immerhin 6 Stück davon.


34566

Nochmals Danke.
Wenigstens nur noch 3 Tage bis zur Sonnenwende!
Dann gehts Bergauf
Achim

Rabenauge
18.12.2019, 13:29
Tip zu denen: ich löt denen meistens die mitgelieferten Steckleisten ein.
Wenn ich das Ganze dann irgendwo einbauen will, kommen dort-passend dazu- Buchsenleisten auf Lochrasterplatine.
Schon kann man die Dinger einfach runter nehmen, wie IC's mit Fassungen.

achso
18.12.2019, 18:33
Danke für die nette Info!

Mit dem switch!
Woher weiß der code dieses?

case '3':
//Wenn 3, dann ist Taster1 und Taster2 geschlossen und alle anderen offen
Wie ändert man das?
Wie mache ich weiter?
Beziehe ich mich dann auf z.B.
case`3`:

Hier mal der Stromlaufplan in reduzierter Zeichnung:

34571

So hatte ich es naiv zuerst versucht. Irgendwann gemerkt, das 12 kein PWM kann. Die IR Sache baue ich aus.
Eigentlich war das gar nicht so schlecht. Nur das der Promini nicht auf die `Drückzeit` der Tasten reagiert hat.


#include <Servo.h>
Servo myservo; // create servo object to control a servo

const int L = 2; // Links Fern
const int R = 3; // Rechts Fern
const int Vor = 4; // Vor Fern
const int Rueck = 5; // Rückwärts Fern
const int IRL = 6; //Hinderniss Rechts
const int IRR = 7; // Hinderniss Links
const int FERNON = 13; //Fernsteuerung Spannung
int PWM = 10; // PWM Motor
const int Motor_1 = 11; //Motor vor rück
const int Motor_2 = 12; //Motor vor rück
int val = 0;

void setup() {
myservo.attach(9); // Servo auf DigitalPin 9
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(10, OUTPUT); //PWM
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
int val = 0;

val = digitalRead(IRL); //Ir Links lesen
if (digitalRead(IRL) == HIGH)
{
digitalWrite(FERNON, LOW);
analogWrite(PWM, 170);
myservo.write(60);
digitalWrite(Motor_1, LOW);
digitalWrite(Motor_2, HIGH);
delay(2000);
}
else
{
digitalWrite(FERNON, HIGH);
digitalWrite(PWM, LOW);
myservo.write(90);
digitalWrite(Motor_1, LOW);
digitalWrite(Motor_2, LOW);
}
{
val = digitalRead(IRR); //Ir Rechts lesen
if (digitalRead(IRR) == HIGH)
{
digitalWrite(FERNON, LOW);
analogWrite(PWM, 170);
myservo.write(120);
digitalWrite(Motor_1, LOW);
digitalWrite(Motor_2, HIGH);
delay(2000);
}
else
{
digitalWrite(FERNON, HIGH);
digitalWrite(PWM, LOW);
myservo.write(90);
digitalWrite(Motor_1, LOW);
digitalWrite(Motor_2, LOW);
delay(50);//Pause, damit das Servo drehen kann
}
val = digitalRead(2); //Links Fernsteuerung
if (digitalRead(2) == HIGH)
{
myservo.write(60);
delay(50);//Pause, damit das Servo drehen kann
}
else
{
myservo.write(90);
delay(50);//Pause, damit das Servo drehen kann
}
{
val = digitalRead(3); //Rechts Fernsteuerung
if (digitalRead(3) == HIGH)
{
myservo.write(120);
delay(50);//Pause, damit das Servo drehen kann
}
else
{
myservo.write(90);
}
delay(50);//Pause, damit das Servo drehen kann
}
{
val = digitalRead(4);//Fernsteuerung vor
if (digitalRead(4)==HIGH)
{
analogWrite(PWM, 170);
digitalWrite(Motor_1, HIGH);
digitalWrite(Motor_2, LOW);
}
else
{
digitalWrite(Motor_1, LOW);
digitalWrite(Motor_2, LOW);
}
{
val = digitalRead(5);//Fernsteuerung vor
if (digitalRead(5)==HIGH)
{
analogWrite(PWM, 170);
digitalWrite(Motor_1, LOW);
digitalWrite(Motor_2, HIGH);
}
else
{
digitalWrite(Motor_1, LOW);
digitalWrite(Motor_2, LOW);
}

}
}
}}

Moppi
18.12.2019, 18:57
Woher weiß der Code das?

switch (nummer)
{
case 3:

default:

}

die Nummer, angegeben bei switch in Klammern, ist die Variable, auf die sich das bezieht.

case 3: bedeutet, dass switch in einem Fall die Variable auf den Wert 3 prüft. Wenn das erfolgreich war, wird der Code ausgeführt, der nach case 3: steht. Und zwar bis zu einem break. Wenn kein break steht, mach switch mit der nächsten Fallprüfung (case) weiter.

Verstehe jetzt nur nicht, wie Du nichts weißt, wie Du da den Wert ändern sollst.

Die 3 bei case 3 ergibt sich aus 1 + 2. Die 1 steht für Bit#0 der Variablen, die 2 steht für Bit#1 der Variablen, die 4 steht für Bit#2 der Variablen, die 8 steht für Bit#3 der Variablen usw.
Warum? Weil:

01 Dezimal = 00001 Binär
02 Dezimal = 00010 Binär
04 Dezimal = 00100 Binär
08 Dezimal = 01000 Binär
16 Dezimal = 10000 Binär
usw.

Vorteil der Variante: Du kannst mit einer Zahl mehrere Taster abfragen, also Tastenkombinationen.

Wenn alle 5 Taster gedrückt wären, ergäbe sich hier: 1+2+4+8+16 = 31
Der Wert '31' stünde also dafür, dass alle Taster gedrückt wären.

Wenn Taster 3 und 5 gedrückt wären, dann ergäbe sich: 4+16 = 20
etc.



MfG
:Weihnacht

wkrug
18.12.2019, 19:13
Ich weiss jetzt nicht wie die Arduino IDE das handelt, aber '3' bedeutet in C das der Character 3, also die ASCII Ziffer 3 erwartet wird, das ist dann der dezimale Wert 51.

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.

Moppi
18.12.2019, 19:21
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 - - -



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.

021aet04
18.12.2019, 19:28
Code sollte in den Code Tags sein, dann ist es lesbar.


als Beispiel:


Hier steht der Code

Zum Thema, wie du den Switch Befehl ändern musst. Du musst verstehen wie Switch funktioniert.



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

achso
18.12.2019, 19:36
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.
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

Moppi
18.12.2019, 19:59
Hallo Achim,

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

aus dem


if(variable == 1){
...
}
else{
...
}



kann man diesen machen


switch (variable){

case 1:
...

case ...

}



Für Deinen Beispielcode kann man das etwa so machen


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
:Weihnacht

achso
18.12.2019, 20:29
Danke Euch Allen!
Nun dachte ich, es wäre Einfach.
War aber nichts.
Dieser Code schaltet so lange man den Taster hält:


*/
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???:


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??

Moppi
18.12.2019, 20:49
so ist er dann richtig



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

}
}




:Weihnacht

achso
18.12.2019, 21:05
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

Rabenauge
18.12.2019, 22:53
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.

achso
21.12.2019, 19:40
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

achso
22.12.2019, 15:14
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