www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe beim Uhr programmieren


Autor: Yamaharacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus
ich bin gerade dabei eine Uhr mit Wecker und Datum zu programmieren. Das 
ganze mache ich mit Bascom.

Nun habe ich hier zwei Probleme und zwar

1. Ich will das Licht mittels eines Distanzsensors einschalten welcher 
an dem Analog Eingang Pinc.0 angeschlossen ist. Hierfür verwende ich 
einen Sharp GP2D12.
Im bereich Analogwertverarbeitung bin ich nicht so fit deshalb wollte 
ich fragen ob in meinem Programm jemand einen Fehler findet warum mein 
Licht sich nicht einschaltet.
Bereich des Sensors sind 10-80cm. Ich will ungefähr 20-30cm haben muss 
also nicht genau sein.


2. Problem ist wenn ich mit der Uhr durchtappe duch mein Menü und ich 
will den Wecker stellen bleiben immer die Sekunden der Uhr rechts neben 
dem Wecker stehen. Weiß jemand wie ich das hinbekomme damit die Sekunden 
weg sind?

Hier mein Code. Ich weiß dass die Datumsverarbeitung fehlt. Seit bitte 
nachsichtig.

$regfile = "m8def.dat"
$crystal = 1000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40

Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , 
Db7 = Portb.4 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2

Config Lcdbus = 4
Cursor Off

Config Portb.0 = Output
Config Portb.5 = Output
Config Portb.1 = Output

Config Pind.0 = Input
Config Pind.1 = Input
Config Pind.2 = Input
Config Pind.3 = Input
Config Pinc.0 = Input

Const Adc_multi = 0.00244140625
Config Adc = Single , Prescaler = Auto
Start Adc

Portd.0 = 1
Portd.1 = 1
Portd.2 = 1
Portd.3 = 1


Enable Interrupts
Config Clock = Soft
Config Date = Mdy , Separator = /
Declare Sub Stunde
Declare Sub Minute
Declare Sub Stundew
Declare Sub Minutew
Declare Sub Onoff
Declare Sub Licht
Declare Sub Stellenmenue

Dim Stellenstunde As Byte
Dim Stellenminute As Byte
Dim Konfiguration As Byte
Dim Anaus As Byte
Dim Messung As Word
Messung = Getadc(0)

Cls

Time$ = "00:00:00"
Date$ = "01/01/00"

Do
   If Konfiguration = 1 Then
         Locate 1 , 1
         If Stellenstunde < 10 Then Lcd "0"
            Lcd Stellenstunde ; ":"
         If Stellenminute < 10 Then Lcd "0"
            Lcd Stellenminute
         End If

   Locate 2 , 9
   Lcd Date$

   Debounce Pind.0 , 0 , Stellenmenue , Sub


   If Konfiguration = 0 Or Konfiguration = 2 Or Konfiguration = 3 Then
      Locate 1 , 1
      Lcd Time$
   End If


   If Konfiguration = 1 Then                                'Wecker 
stellen
      Debounce Pind.1 , 0 , Stundew , Sub
      Debounce Pind.2 , 0 , Minutew , Sub
   End If


   If Konfiguration = 2 Then                                'Uhr stellen
      Debounce Pind.1 , 0 , Stunde , Sub
      Debounce Pind.2 , 0 , Minute , Sub
   End If

   Debounce Pind.3 , 0 , Onoff , Sub

   If Konfiguration = 0 And Anaus = 0 Then                  'Wecker 
an/aus
            Locate 2 , 1
            Lcd "aus   "
          End If

   If Konfiguration = 0 And Anaus = 1 Then
            Locate 2 , 1
            Lcd "an    "
         End If


   If Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 Then
               Portb.1 = 1
               Else
               Portb.1 = 0
   End If

   If Messung < 500 Then
   Portb.5 = 0
   Else
   Portb.5 = 1
   End If


Loop



'Stellenmenü                                                'Menü zum 
einstellen Wecker/Uhr/Datum
Stellenmenue:
Incr Konfiguration
   If Konfiguration = 4 Then Konfiguration = 0


   If Konfiguration = 1 Then
      Locate 2 , 1
      Lcd "Wecker"
   End If



   If Konfiguration = 2 Then
      Locate 2 , 1
      Lcd "Uhr   "
   End If


   If Konfiguration = 3 Then
      Locate 2 , 1
      Lcd "Datum "
   End If
Return



'Stunde                                                    'Hier wird 
die Stunde der Uhr hochgezählt
Stunde:
   Incr _hour
   If _hour > 23 Then
      _hour = 00
   End If
Return



'Minute                                                     'Hier wird 
die Minute der Uhr hochgezählt
Minute:
   Incr _min
   If _min > 59 Then
      _min = 00
   End If

Return



'MinuteW                                                    'Hier wird 
die Minute des Weckers hochgezählt
Minutew:
Incr Stellenminute
   If Stellenminute > 59 Then
   Stellenminute = 0
   End If
Return



'Stundew                                                    'Hier wird 
die Stunde des Weckers hochgezählt
Stundew:
Incr Stellenstunde
   If Stellenstunde > 23 Then
   Stellenstunde = 0
   End If
Return



'onoff                                                      'Hier wird 
der Wecker ein- und ausgeschaltet
Onoff:
Incr Anaus
   If Anaus = 2 Then Anaus = 0
Return

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 2. Problem ist wenn ich mit der Uhr durchtappe duch mein Menü und ich
> will den Wecker stellen
Schreib einfach noch ein paar Leerzeichen hinter die Weckzeit...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yamaharacer schrieb:

> 1. Ich will das Licht mittels eines Distanzsensors einschalten welcher
> an dem Analog Eingang Pinc.0 angeschlossen ist. Hierfür verwende ich
> einen Sharp GP2D12.
> Im bereich Analogwertverarbeitung bin ich nicht so fit deshalb wollte
> ich fragen ob in meinem Programm jemand einen Fehler findet warum mein
> Licht sich nicht einschaltet.
....
Dim Stellenstunde As Byte
Dim Stellenminute As Byte
Dim Konfiguration As Byte
Dim Anaus As Byte
Dim Messung As Word
Messung = Getadc(0)     ; <------ hier wird der ADC abgefragt
                        ; soll so sein. Aber innerhalb der Schleife dann
                        ; nicht mehr

Cls

Time$ = "00:00:00"
Date$ = "01/01/00"

Do
   If Konfiguration = 1 Then
         Locate 1 , 1
         If Stellenstunde < 10 Then Lcd "0"
...

Solange du den ADC nur einmal ausserhalb der Hauptschleife abfragst, 
wird das wohl nichts mit einer laufenden Messung.

Autor: Yamaharacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja und wenn ich das

Lothar Miller schrieb:
> Schreib einfach noch ein paar Leerzeichen hinter die Weckzeit...

hab ich schon versucht dann werden die nuller der minute meiner weckzeit 
einfach um die leerzeichen nach rechts verschoben.

Karl heinz Buchegger schrieb:
> Solange du den ADC nur einmal ausserhalb der Hauptschleife abfragst,
> wird das wohl nichts mit einer laufenden Messung.

und wenn ich das ganze in die do schleife einbinde wird er dann die 
ganze zeit überwacht? stimmt denn meine angabe unten mit 500? kommt mir 
nämlich komisch vor da ich messung als word deklariere und unten dann 
500 also quasi integer schreibe.
hab das mit der analogwertverarbeitung aus dem internet also nicht mein 
werk. frag nur mal nach.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yamaharacer schrieb:

> hab das mit der analogwertverarbeitung aus dem internet also nicht mein
> werk. frag nur mal nach.

Ähm.
Das ist auch nicht anders, als wie wenn du einen digitalen Eingang 
abfragst. Nur dass du die getadc Funktion aufrufen musst um einen 
Messwert zu bekommen.

Warum probierst du den nicht einfach ein Testprogramm, mit dem du den 
Sensor ausprobierst?
In einer Schleife ständig

    ADC Abfragen
    Messwert ausgeben

Dann weißt du, welche Werte du bekommst und kannst auch mit der Hand 
probieren ob und wie sich die Werte verändern.

Als Bascom Spezi hast du das in 2 Minuten geschrieben und dann weißt du 
was Sache ist.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yamaharacer schrieb:

> hab ich schon versucht dann werden die nuller der minute meiner weckzeit
> einfach um die leerzeichen nach rechts verschoben.

Was genau hast du geändert?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sag mal.
Ist dein Programm im BASCOM Editor genauso sinnentstellend eingerückt 
wie hier im Forum?

Dann wundert es mich nicht, dass du keine Fehler siehst oder 
Modifikationen korrekt durchführen kannst.

Autor: Yamaharacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was meinst du? also die beschreibungen sind hier verschoben wie ich 
gesehen habe aber sonst ist alles wie bei mir auf dem pc.

Autor: Yamaharacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Warum probierst du den nicht einfach ein Testprogramm, mit dem du den
> Sensor ausprobierst?
> In einer Schleife ständig
>
>     ADC Abfragen
>     Messwert ausgeben
>
> Dann weißt du, welche Werte du bekommst und kannst auch mit der Hand
> probieren ob und wie sich die Werte verändern.
>
> Als Bascom Spezi hast du das in 2 Minuten geschrieben und dann weißt du
> was Sache ist.

und wie sehe ich das? gibts da programme wie ich das ganze am pc 
sichtbar machen kann?

Karl heinz Buchegger schrieb:
> Was genau hast du geändert?

Do
   If Konfiguration = 1 Then
         Locate 1 , 1
         If Stellenstunde < 10 Then Lcd "0"
            Lcd Stellenstunde ; ":"
         If Stellenminute < 10 Then Lcd "0"
            Lcd Stellenminute
         End If

hier habe ich bei ":" leerzeichen eingefügt ":  "

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ZB das hier
Do
   If Konfiguration = 1 Then
         Locate 1 , 1
         If Stellenstunde < 10 Then Lcd "0"
            Lcd Stellenstunde ; ":"
         If Stellenminute < 10 Then Lcd "0"
            Lcd Stellenminute
         End If

   Locate 2 , 9

So wie das End If geschrieben ist suggeriert das auf die Schnelle, dass 
es zum If 2 Zeilen darüber gehört.

Das
            Lcd Stellenstunde ; ":"
suggeriert durch seine Einrückung, dass es in Abhängigkeit vom If genau 
darüber steht. Pustekuchen, das ist nicht der Fall. Die LCD Ausgabe 
hängt von gar nichts ab.

Mit korrekter Einrückung sieht das so aus
Do
   If Konfiguration = 1 Then
      Locate 1 , 1

      If Stellenstunde < 10 Then Lcd "0"
      Lcd Stellenstunde; ":"

      If Stellenminute < 10 Then Lcd "0"
      Lcd Stellenminute

   End If

   Locate 2 , 9


Und wenn der vorgeschlagene 'Fix' darin besteht, einfach nach der 
Weckzeit noch 2 Leerzeichen auszugeben, dann kann das nur so sein ....
Do
   If Konfiguration = 1 Then
      Locate 1 , 1

      If Stellenstunde < 10 Then Lcd "0"
      Lcd Stellenstunde; ":"

      If Stellenminute < 10 Then Lcd "0"
      Lcd Stellenminute; "  "

   End If

   Locate 2 , 9


.... denn jetzt wird nach den Stunden, dem ':' und den Minuten noch 2 
Leerzeichen ausgegeben. Nachdem die Weckzeit komplett ausgegeben 
wurde. Und komplett bedeutet Stunden UND Minuten. Da können die Minuten 
nicht um 2 Stellen nach rechts rutschen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yamaharacer schrieb:
> Karl heinz Buchegger schrieb:
>> Warum probierst du den nicht einfach ein Testprogramm, mit dem du den
>> Sensor ausprobierst?
>> In einer Schleife ständig
>>
>>     ADC Abfragen
>>     Messwert ausgeben
>>
>> Dann weißt du, welche Werte du bekommst und kannst auch mit der Hand
>> probieren ob und wie sich die Werte verändern.
>>
>> Als Bascom Spezi hast du das in 2 Minuten geschrieben und dann weißt du
>> was Sache ist.
>
> und wie sehe ich das?

Ähm.
Du hast ein LCD zur Verfügung!
Da kann man was drauf schreiben lassen. Zb Werte die man vom ADC 
bekommt.

>> Was genau hast du geändert?
>
> Do
>    If Konfiguration = 1 Then
>          Locate 1 , 1
>          If Stellenstunde < 10 Then Lcd "0"
>             Lcd Stellenstunde ; ":"
>          If Stellenminute < 10 Then Lcd "0"
>             Lcd Stellenminute
>          End If
>
> hier habe ich bei ":" leerzeichen eingefügt ":  "

Und warum machst du die Leerzeichen vor der Ausgabe der Minuten?
Die komplette Weckzeit besteht aus Stunden UND Minuten! Wenn du die 
Leerzeichen hinter der Weckzeit haben willst, dann musst du schon die 
Minuten auch ausgeben und erst dann 2 Leerzeichen dahinter setzen!

<Kopfschüttel>

Irgendwie habe ich das Gefühl, du denkst du brauchst nur irgendwas 
hinschreiben und der µC sucht sich dann schon selbst zusammen, in 
welcher Reihenfolge die Dinge gemacht werden müssen, damit das 
rauskommt, was dir vorschwebt.
Dem ist nicht so! Ein BASCOM Programm ist nicht Excel, bei dem ein 
ausgefuchster Algorithmus rausfindet in welcher Reihenfolge die Zellen 
zu aktualisieren sind.

(Alle anderen: nicht lachen. Das gibts wirklich, dass notorische Excel 
Benutzer das als gegeben voraussetzen)

Autor: Yamaharacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat nix gebracht. jetzt wird die sekunden zahl einfach nach rechts 
hinter die minutenzahl der weckzeit geschoben.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yamaharacer schrieb:
> hat nix gebracht. jetzt wird die sekunden zahl einfach nach rechts
> hinter die minutenzahl der weckzeit geschoben.

Das kann nicht sein.
Denn bei der Ausgabe der aktuellen Zeit hier
   If Konfiguration = 0 Or Konfiguration = 2 Or Konfiguration = 3 Then
      Locate 1 , 1
      Lcd Time$
   End If


positionierst du den Cursor neu an die Position 1,1 ehe die Normalzeit 
ausgegeben wird.

Zudem sind die if so gestaltet, dass entweder
  die Normalzeit
oder
  die Weckzeit ausgegeben wird

Wird die Weckzeit nicht ausgegeben, dann wird die Normalzeit ausgegeben 
und umgekehrt. Die Ausgabe der Weckzeit beeinflusst daher die Ausgabe 
der Normalzeit überhaupt nicht. Mann muss nur dafür sorgen, dass bei der 
Ausgabe der Weckzeit eventuelle Überbleibsel der Normalzeit (wie zb die 
Sekunden) durch Leerzeichen überschrieben werden. Und genau das machen 
die 2 Leerzeichen.

Wahrscheinlich sollten es 3 Leerzeichen sein, denn die Zeit wird meines 
Wissens so dargestellt
   10:12.45
Ob das jetzt vor den Sekunden ein . ist oder ein : kann ich nicht sagen 
(ist auch egal, es ist einfach nur ein Zeichen), aber auf jeden Fall ist 
die Differenz von

             09:45          <- Weckzeit
und          10:12:45

3 Zeichen, die mit Leerzeichen übermalt werden müssen.

Steht am LCD die aktuelle Anzeige

            10:12:45

und will man die durch

            09:45

austauschen, dann müssen nach Ausgabe der Minuten noch 3 Zeichen mit 
Leerzeichen übermalt werden.

            10:12:45
            09:45
                 ^^^
                 |||
                 ||+----- das 3te Zeichen, das übermalt werden muss
                 ||
                 |+------ das 2te Zeichen, das übermalt werden muss
                 |
                 +------- das 1te Zeichen, das übermalt werden muss

Tust du das nicht, dann wird aus

            10:12:45
durch Übermalen mit "09:45" auf dem LCD
            09:45:45

Übermalst du bei einer Normalzeit
            10:12:45
nur mit 2 Leerzeichen bei der Weckzeit, dann wird daraus
            09:45  5

Also: Ein bischen besser beobachten was sich auf dem LCD tut und daraus 
dann Schlüsse ziehen.

Autor: Yamaharacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
och logisch. danke schon mal.

nur das mit der analogwertverarbeitung wie kann ich diese nun auslesen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yamaharacer schrieb:
> och logisch. danke schon mal.
>
> nur das mit der analogwertverarbeitung wie kann ich diese nun auslesen?

Hast du doch schon!
GetADC macht doch genau das!

Den Wert von GetADC holst du dir in die Variable Messung. So wie du das 
bisher auch gemacht hast. Nur halt innerhalb der Schleife. Sobald du den 
Wert in der Variablen Messung vorliegen hast, ist das einfach nur noch 
ein Wert in einer Variablen. So wie StellenStunde auch nur ein Wert in 
einer Variablen ist.

Wie hast du denn Stellenstunde ausgegeben?
Und genau das gleiche machst du auch mit der Variablen Messung nachdem 
du dir vom ADC den neuen Wert geholt hast.

Such dir einen Platz auf dem LCD, schick den Cursor mit Locate dort hin 
und gib die Variable aus. Das ist doch Kinderkram, mit welchen Problemen 
du dich da herumschlägst! Man könnte meinen, du verstehst von deinem 
eigenen Programm noch nicht einmal die Funktionsweise von weniger als 
10% des Codes. Und selbst die auch nur holprig.
   ...

   Messung = GetADC( 0 )

   Locate 2, 12
   LCD  Messung; "     "

   If Messung < 500 Then
     Portb.5 = 0
   Else
     Portb.5 = 1
   End If

   ....

Autor: Yamaharacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tja sieht wohl so aus. und ist auch so. is ja schließlich nicht mein 
beruf sondern hobby.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yamaharacer schrieb:
> tja sieht wohl so aus. und ist auch so. is ja schließlich nicht mein
> beruf sondern hobby.


Ich kann mich daran erinnern, dass du vor ein paar Wochen schon mit 
deinem Wecker gekommen bist.

Ganz ehrlich.
Such dir ein anderes Hobby. Programmieren ist nichts für dich.
Das ist keine Schande und du kannst auch nichts dafür. Aber für dich 
wird das immer ein Buch mit 7 Siegeln bleiben, das du nicht knacken 
kannst, wenn das was du heute gezeigt hast, deine ganzen Fortschritte in 
der Zwischenzeit sind.

Autor: Yamaharacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habs nun so gemacht wie du sagtest. auf dem lcd display steht nun 
dauerhaft 1023.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yamaharacer schrieb:
> habs nun so gemacht wie du sagtest. auf dem lcd display steht nun
> dauerhaft 1023.

Das bedeutet, dass der ADC ständig seinen Maximalwert liefert.
Der ADC liefert Werte von 0 bis 1023

Also schnapp dir ein Voltmeter und miss einmal nach, ob sich die 
Ausgangsspannung vom Sensor überhaupt ändert, wenn du mit der Hand davor 
rumfuchtelst

(von welcher Website hast du die ADC Initialisierung gestohlen?)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau aus dem Grund meinte ich vorher:
Ein eigenes Testprogramm machen!

Also: mach dein jetziges Projekt in BASCOM zu, fang ein neues an
$regfile = "m8def.dat"
$crystal = 1000000

Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 ,
Db7 = Portb.4 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2

Config Lcdbus = 4
Cursor Off

Config Adc = Single , Prescaler = Auto

Dim Messung As Word

Cls
Start Adc

Do
  Messung = Getadc(0)

  Locate 1, 1
  Lcd Messung ; "    "
Loop

Dieses Programm dreht sich einzig und alleine darum, den ADC am Kanal 0 
auszulesen und das gelesene am LCD anzuzeigen.
So probiert man Dinge aus, die man zum ersten mal macht. Losgelöst von 
allem anderen. Konzentration auf das Neue.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist der AREF Pin vom Mega8 beschaltet?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier auch mal
Config Adc = Single , Prescaler = Auto , Reference = AVCC

Ich bin mir nicht sicher, welche Referenz beim Mega8 standardmässig 
hergenommen wird. Sicher ist sicher, also selbst angeben und nicht auf 
den Compiler verlasssen.

Autor: Yamaharacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Reference = AVCC

ohh man das hab ich vorhin noch rausgenommen weils in nem beispiel 
welches ich angeschaut habe nicht drinn war. jetzt geht das ganze zwar 
nur von 0-600 aber es geht.

danke an alle. auch für die geduld vielen dank.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yamaharacer schrieb:
> Karl heinz Buchegger schrieb:
>> Reference = AVCC
>
> ohh man das hab ich vorhin noch rausgenommen weils in nem beispiel
> welches ich angeschaut habe nicht drinn war. jetzt geht das ganze zwar
> nur von 0-600 aber es geht.

Das klingt plausibel.
Laut Datenblatt vom Sensor liefert der Spannungen von 0 bis ~2.6 Volt.

   5 V   ......   1024
   2.6 V  .....     x
  ----------------------

           2.6 * 1024
     x =  ------------  =  ungefähr 600
               5

Autor: Yamaharacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jo habs auch so errechnet.

nun habe ich jedoch ein weiteres problem das einschalten des lichts 
klappt nun wunderbar nur wenn ich das licht einschalte bleibt die uhr 
stehen und läuft nachdem das licht aus ist erst weiter.

ebenso funktioniert mein vorhaben nicht dass das licht zwischen 20 und 8 
uhr ausgeschaltet bleiben soll.

hier mein ansatz:


Messung = Getadc (0)
If Messung > 300 OR _hour > 20 and _hour < 8 then
     Portb.5 = 0
     wait 5
     else
     Portb.5 = 1
End If

Autor: Yamaharacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sobald ich die uhr stelle bleibt das licht dauernd ab wenn ich die uhr 
nicht stelle geht wenigstens die funktion mit dem sensor dass das licht 
5 sekunden an bleibt und dann aus geht.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> If Messung > 300 OR _hour > 20 and _hour < 8 then

versuche es doch mal mit richtiger Klammersetzung.....

Autor: Yamaharacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab ich schon probiert und dann kamen errors

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>hab ich schon probiert und dann kamen errors

Die gleichen wie vorher?

Autor: Yamaharacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habs rausgefunden:
statt:
If Messung > 300 OR _hour > 20 and _hour < 8 then

dieses:
If Messung > 300 OR _hour > 20 or _hour < 8 then


jetzt funktioniert das ganze nur will ich dass das licht wenn ich den 
sensor betätige 4 sekunden an bleibt. werd mich vll morgen nochmal drann 
setzten.

Autor: Yamaharacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so hab das ganze nun gelöst mit dem licht. hier mein weg:

Messung = Getadc (0)
If _hour > 20 or _hour < 8 then
Portb.5 = 1
If Messung > 300 then
portb.5 = 1
wait 5
end if
else
Portb.5 = 0
End If



weiß zufällig jemand wie ich das mit dem datum einfach realisieren kann?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.