INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Tür mit Lichtsensor
05.07.2015, 00:01
Beitrag #1
Tür mit Lichtsensor
Bin absoluter Neuling brauche Hilfe!!!
Möchte eine Tür aufbauen mit ein DC Motor und ein Lichtsensor.
Hab ein Arduino Uno, eine H-Brücke, zwei Taster und zwei magnetschalter angeschlossen(anleitung und programm aus inet)
Und so programmiert:

#include <timer.h>
#include <stdio.h>

# define LED 13
# define MAGNET_OBEN 7
# define MAGNET_UNTEN 8
# define FOTO 0
# define MOTOR 9
# define MOTOR_DIR1 4
# define MOTOR_DIR2 3
# define MOTOR_MIN 0x7F
# define KNOPF_RAUF 12
# define KNOPF_RUNTER 2

# define HELL 300
# define FINSTER 200

# define STATUS_TAG 0
# define STATUS_ABEND 1
# define STATUS_NACHT 2
# define STATUS_MORGEN 3
# define STATUS_START_RAUF 4
# define STATUS_RAUFFAHREN 5
# define STATUS_START_RUNTER 6
# define STATUS_RUNTERFAHREN 7
# define STATUS_ERROR 8

int status = STATUS_ERROR;
char errbuf [80];
char *errmsg = "";
int neuinitialisieren = 1;
int debounce_magnet = 0;
int debounce_knopf_runter = 0;
int debounce_knopf_rauf = 0;

# define TIMER_MS 10000 // 10 seconds debounce 300000 // 5 minutes
# define FAHRZEIT_MS 75000 // max 75 seconds for up/down of door
Arduino_Timer timer (TIMER_MS);

int debounced_read (int iopin, int *counter)
{
if (!digitalRead (iopin))
{
if ((*counter)++ >= 10)
{
*counter = 0;
return 0;
}
}
else
{
*counter = 0;
}
return 1;
}

void motor_an ()
{
digitalWrite (LED, HIGH);
digitalWrite (MOTOR, HIGH);
}

void motor_aus ()
{
digitalWrite (LED, LOW);
digitalWrite (MOTOR, LOW);
}

void linksrum ()
{
digitalWrite (MOTOR_DIR1, LOW);
digitalWrite (MOTOR_DIR2, HIGH);
}

void rechtsrum ()
{
digitalWrite (MOTOR_DIR1, HIGH);
digitalWrite (MOTOR_DIR2, LOW);
}

// Wir benutzen Status-Funktionen fuer jeden Status unserer Maschine:
// Wenn die Funktion 0 zurueckliefert, geht die Maschine in den naechsten
// Zustand, sonst bleibt sie im gleichen Zustand.

int fahren (int magnet)
{
if (!debounced_read (magnet, &debounce_magnet))
{
return 1;
}
if (timer.is_reached (millis ()))
{
motor_aus ();
timer.stop ();
errmsg = "Zeitueberschreitung fahren";
status = STATUS_ERROR;
return 0;
}
return 0;
}

int starte_rauffahren ()
{
if (digitalRead (MAGNET_UNTEN))
{
errmsg = "Hochfahren: Tuere nicht unten";
status = STATUS_ERROR;
return 0;
}
timer.start (millis (), FAHRZEIT_MS);
debounce_magnet = 0;
rechtsrum ();
motor_an ();
return 1;
}

int rauffahren ()
{
return fahren (MAGNET_OBEN);
}

int starte_runterfahren ()
{
if (digitalRead (MAGNET_OBEN))
{
errmsg = "Hochfahren: Tuere nicht oben";
status = STATUS_ERROR;
return 0;
}
timer.start (millis (), FAHRZEIT_MS);
debounce_magnet = 0;
linksrum ();
motor_an ();
return 1;
}

int runterfahren ()
{
return fahren (MAGNET_UNTEN);
}

int nacht ()
{
int val;
motor_aus ();
val = analogRead (FOTO);
Serial.println (val);
if (val > HELL)
{
timer.start (millis ());
return 1;
}
return 0;
}

int tag ()
{
int val;
motor_aus ();
val = analogRead (FOTO);
Serial.println (val);
if (val < FINSTER)
{
timer.start (millis ());
return 1;
}
return 0;
}

int abend ()
{
int val;
motor_aus ();
val = analogRead (FOTO);
if (val > FINSTER)
{
status = STATUS_TAG;
return 0;
}
if (timer.is_reached (millis ()))
{
timer.stop ();
return 1;
}
return 0;
}

int morgen ()
{
int val;
motor_aus ();
val = analogRead (FOTO);
if (val < HELL)
{
status = STATUS_NACHT;
return 0;
}
if (timer.is_reached (millis ()))
{
timer.stop ();
return 1;
}
return 0;
}

int error ()
{
motor_aus ();
Serial.println (errmsg);
delay (100);
return 0;
}

# undef int
struct state {
int status;
int next_status;
int (*statefun)();
};

// Stati muessen in der Reihenfolge der numerischen Zustandswerte sein
// Zustaende muessen lueckenlos nummeriert sein
struct state stati [] =
{ { STATUS_TAG, STATUS_ABEND, tag }
, { STATUS_ABEND, STATUS_START_RUNTER, abend }
, { STATUS_NACHT, STATUS_MORGEN, nacht }
, { STATUS_MORGEN, STATUS_START_RAUF, morgen }
, { STATUS_START_RAUF, STATUS_RAUFFAHREN, starte_rauffahren }
, { STATUS_RAUFFAHREN, STATUS_TAG, rauffahren }
, { STATUS_START_RUNTER, STATUS_RUNTERFAHREN, starte_runterfahren }
, { STATUS_RUNTERFAHREN, STATUS_NACHT, runterfahren }
, { STATUS_ERROR, STATUS_ERROR, error }
};



void setup ()
{
pinMode (LED, OUTPUT);
pinMode (MAGNET_OBEN, INPUT);
pinMode (MAGNET_UNTEN, INPUT);
pinMode (MOTOR, OUTPUT);
pinMode (MOTOR_DIR1, OUTPUT);
pinMode (MOTOR_DIR2, OUTPUT);
pinMode (KNOPF_RUNTER, INPUT);
pinMode (KNOPF_RAUF, INPUT);

digitalWrite (MOTOR, LOW);
linksrum ();
digitalWrite (LED, HIGH);

digitalWrite (MAGNET_OBEN, HIGH); // enable pull-up resistor
digitalWrite (MAGNET_UNTEN, HIGH); // enable pull-up resistor
digitalWrite (KNOPF_RUNTER, HIGH); // enable pull-up resistor
digitalWrite (KNOPF_RAUF, HIGH); // enable pull-up resistor
Serial.begin (115200);
if (FINSTER >= HELL)
{
status = STATUS_ERROR;
errmsg = "FINSTER >= HELL";
}
Serial.print ("initial state: ");
Serial.println (status);
}

void loop ()
{
struct state *st = &stati [status];
if (!debounced_read (KNOPF_RUNTER, &debounce_knopf_runter))
{
debounce_knopf_runter = 10;
linksrum ();
motor_an ();
neuinitialisieren = 1;
return;
}
else if (!debounced_read (KNOPF_RAUF, &debounce_knopf_rauf))
{
debounce_knopf_rauf = 10;
rechtsrum ();
motor_an ();
neuinitialisieren = 1;
return;
}
else if (neuinitialisieren)
{
motor_aus ();
errmsg = "Unbekannte Tuerposition bei Start";
status = STATUS_ERROR;
if (!digitalRead (MAGNET_OBEN))
{
status = STATUS_TAG;
}
else if (!digitalRead (MAGNET_UNTEN))
{
status = STATUS_NACHT;
}
neuinitialisieren = 0;
debounce_knopf_rauf = debounce_knopf_runter = 0;
Serial.print ("Initialized to: ");
Serial.println (status);
return;
}
// Hard-coded error state must work if state-table is broken
if (status >= STATUS_ERROR)
{
error ();
return;
}
if (st->status != status)
{
status = STATUS_ERROR;
sprintf
( errbuf
, "Error in state-table, expected %d got %d"
, status
, st->status
);
errmsg = errbuf;
return;
}
if (st->statefun ())
{
status = st->next_status;
}
if (status != st->status)
{
sprintf (errbuf, "new state: %d->%d", st->status, status);
Serial.println (errbuf);
}
}

Leider beim hochladen bekomme ich diesen fehler:

Fatal error: timer.h: no such file or directory

Vielendank in voraus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.07.2015, 08:51
Beitrag #2
RE: Tür mit Lichtsensor
Hi,
dann solltest Du vielleicht an der Stelle, von der Du das Programm hast, mal nach timer.h suchen.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.07.2015, 18:32
Beitrag #3
RE: Tür mit Lichtsensor
Danke für deine Antwort.
Hab es nochmal durchgelesen und bekomme auf Anfrage die Datei leider ist aber vor 6 Jahre gepostet worden.

Grüße
Ninetto
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.07.2015, 09:55
Beitrag #4
RE: Tür mit Lichtsensor
(06.07.2015 18:32)ninetto schrieb:  Hab es nochmal durchgelesen und bekomme auf Anfrage die Datei leider ist aber vor 6 Jahre gepostet worden.
Mir ist jetzt nicht so ganz klar, ob Dein Problem dadurch gelöst wird oder nicht.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.07.2015, 19:22
Beitrag #5
RE: Tür mit Lichtsensor
Hallo Torsten,
leider ist mein problem noch nicht gelöst.

Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.07.2015, 19:34
Beitrag #6
RE: Tür mit Lichtsensor
Tja, dann musst Du versuchen, ohne diese timer.h auszukommen, außer jemand anders hat sie.
Am besten, Du baust das ganze Stück für Stück selbst auf.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.07.2015, 21:04
Beitrag #7
RE: Tür mit Lichtsensor
hab mal die ganzen Timer gelöscht und drauf bekommen leider konnte ich die Tür nur mit den Taster bewegen, automatisch hat nicht funktioniert.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.07.2015, 21:06
Beitrag #8
RE: Tür mit Lichtsensor
Vielleicht solltest Du erst einmal sagen, was das ganze eigentlich tun soll. Wahrscheinlich hat niemand Lust, das aus dem Programm herauszusuchen.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  3 Bewegungsmelder, Lichtsensor und Relay Frage ! b3ta 25 1.608 15.11.2015 14:01
Letzter Beitrag: hotsystems
  Arduino - Solaranlage im Winkel der Sonne nachführen - Lichtsensor mit Servomotor TechnoJungs 8 3.946 17.12.2014 20:46
Letzter Beitrag: tito-t
  Arduino Leonard - Lichtsensor BH1750 PeterErde 6 2.969 15.07.2014 16:57
Letzter Beitrag: PeterErde

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste