Forum: Mikrocontroller und Digitale Elektronik Schalter mit Verzögerung programmieren


von Julian M. (darktemperat)


Lesenswert?

Hallo Leute

ich wollte einen Arduino programmieren.
1
S1   _------_____
2
OU1  _-------____
3
OU2  __-----_____
Also wenn ich den Schalter einschalte

If(S1 == HIGH)

Dann einfach einen Switch case mit 3 States ( Schalter ON,OFF und IDLE)

Das müsste doch klappen? OU muss 0.5 sek verzögert abschalten und OU2 
verzögert einschalten

Mache ich das richtig? Vielen Dank für die Hilfe

Das Problem ist, ich kann einen Switch Case mit einem enum etc 
schreiben, aber beim Arduino mit diesen Libraries komm ich nicht ganz 
mit, kann mir das jemand erklären

: Bearbeitet durch Moderator
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Julian M. schrieb:
> aber beim Arduino mit diesen Libraries komm ich nicht ganz
> mit, kann mir das jemand erklären

Niemand zwingt dich, selbst wenn du in der Arduino IDE programmierst, 
die Libraries zu benutzen.
Du kannst 'normales' C programmieren, wenn du dich an die Regeln mit 
loop() usw. hältst, die von der IDE vorgegeben werden. Praktisch kann es 
halt sein, wenn du die millis() Funktion verwendest, um deine 
Verzögerungen zu programmieren und viele finden auch DigitalRead() und 
DigitalOut() interessant. Zwingend ist das aber nicht.

: Bearbeitet durch User
von Juju (Gast)


Lesenswert?

Hallo Leute. Wie ihr wisst, kann man ja die Switch-cases mit einem Enum
benennen und dann einfach bei den Cases diese gegeben NAmen benutzen.

WIe macht man das beim Arduino? Ich finde keine hilfreichen Infos

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Juju schrieb:
> WIe macht man das beim Arduino?

Genauso wie bei normalem C. Der Unterbau beim Arduino besteht aus dem 
gleichen Compiler wie bei 'normalen' C und C++ Projekten. Das die 
Arduino IDE da Zusatzfunktionen bereitstellt, ist nett, aber du kannst 
die Kiste auch ganz normal mit C programmieren.

: Bearbeitet durch User
von Einer K. (Gast)


Angehängte Dateien:

Lesenswert?

Hier ein Programm aus meiner Wühlkiste, leicht für deine Zwecke 
modifiziert:
1
#include "CombieTimer.h"
2
3
const byte S1   = 2; // Schalter Pin
4
const byte OUT1 = 3; // Ausgang
5
const byte OUT2 = 4; // Ausgang
6
7
EntprellTimer    entprell(20); // Schalter entprellen
8
RisingEdgeTimer  ton(500);     // steigende Flanke wird verzoegert
9
FallingEdgeTimer toff(500);    // abfallende Flanke wird verzoegert
10
 
11
void setup(void) 
12
{
13
  pinMode(S1,INPUT_PULLUP);
14
  pinMode(OUT1,OUTPUT);
15
  pinMode(OUT2,OUTPUT);
16
}
17
18
void loop(void) 
19
{
20
  bool schalter = entprell(!digitalRead(S1)); // invers wg. pullup
21
  digitalWrite(OUT1,toff(schalter));
22
  digitalWrite(OUT2,ton(schalter));
23
}
Die verwendeten Klassen findest du im Anhang.

von Julian M. (darktemperat)


Angehängte Dateien:

Lesenswert?

Sorry, habe mich vergessen einzuloggen.

Dies geht um die Aufgabe von vorhin. So hatte ich es überlegt. Kannst du 
mir eventuell helfen?

von Einer K. (Gast)


Lesenswert?

2 Threads zum gleichen Thema?
Böse!

Und die Lösung von mir gefällt dir nicht?

Schade....

von Julian M. (darktemperat)


Lesenswert?

Arduino F. schrieb:
> 2 Threads zum gleichen Thema?
> Böse!
>
> Und die Lösung von mir gefällt dir nicht?
>
> Schade....

Habs erst jetzt gesehen. Gucke es mir gerade an :)

von Einer K. (Gast)


Lesenswert?

Julian M. schrieb:
> So hatte ich es überlegt.

Deine enum Definition und dein Switch liegen in unterschiedlichen 
Sichtbarkeitsbereichen/Namensräumen.

Sie sehen sich gegenseitig nicht.
Oder besser: Der Kompiler kann diese beiden nicht in Relation zueinander 
setzen.

von sheff712626@yandex.ru (Gast)


Lesenswert?

Hallo zusammen.  Ich hoffe dass ihr mir helfen könnt.
Ich bin ein nur in Sachen Elektronik. ( kenne bißchen die schule und 
mehr nicht.und das war vor 25 jahren. Ich kann zwar unterscheiden 
Transistor  resistor.diode.kondensator. Und kann es zusammenleben. )
also ich versuche gerade ein mikrorelais zu löten. Und es klappt nichts 
da es mir einfaches wissen fehlt.

Ich brauche einen Schalter der einen 3v micro motor  jeder 5- 10 
Sekunden schaltet (ein) füur(1-2 Sekunden.)
das ganze wird von 2 Knopfzellen Batterie betrieben (2 ×3v 》ja Motor 
hält es aus und funktioniert. )
und das soll alles von allein funktionieren sobald Schaltkreis 
geschlossen  wird.
Ich weiß ehrlich nicht nach was ich da suchen soll.
Ich kann alles zusammen löten nach schaltplan.
Wenn es einfache mit SMD geht- dann löten ich SMD zusammen.
Wie gesagt es soll so klein wie möglich sein. Und selbstständig , 
kontinuierlich  arbeiten.
Kann mir da jemand vom Fach  aushelfen???
Den ich bin kein Elektriker. :(((

von Stefan F. (Gast)


Lesenswert?

Hallo Sheff,

wir helfen hier gerne dabei, kleine Fragen zu beantworten. Aber du 
brauchst jemanden, der für Dich das ganze Gerät entwickelt. Das kostet 
Geld.

Wenn du Geld sparen möchtest musst du selber lernen. Ich bin nicht 
sicher, ob ich deine Anforderung richtig verstanden habe. Ich glaube, du 
kannst das mit einem ICM7555 Mikrochip machen 
(https://www.intersil.com/content/dam/Intersil/documents/icm7/icm7555-56.pdf). 
Sicher findest du dazu auch russische Anleitungen. Falls nicht, dann 
suche nach NE555, denn dieser Mikrochip funktioniert sehr ähnlich. Aber 
für 3V musst du den 7555 nehmen.

von sheff712626@yandex.ru (Gast)


Lesenswert?

Danke.  Werde ich alles prüfen.  Ich glaube das es ist schon lange 
erfunden. :) klein Motor soll 1 mal in 5-10 Sekunden  arbeiten in der 
Zeit von 1-2 sec.  also 12345 bzzzz und wieder 12345 bzzzz . mehr ist da 
nichts.  Ist also eine Release.  Nur halt alles von 3 bis 6 Volt soll 
funktionieren. Und ohne das ich etwas betätigen  soll.

von Stefan F. (Gast)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.