Schalter mit Verzögerung programmieren

OP #5236781
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
(Firma: matzetronics)
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.
Gast
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
(Firma: matzetronics)
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.
Gast
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.
Angehängte Dateien:
Gast
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.
Gast
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. :(((
Gast
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.
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.