Jeg vil lave et binært ur til min storebror, og har fået styr på hardware delen (tror jeg). Men softwaren er jeg ikke så sikker på. Det er min første gang og valgte derfor et binært ur fordi det er jo bare nogle led'er der slukker og tænder. Hvis i kender binære ure så ved i at den ved 1 sekundt skal tænde når der er gået 1 sekundt, og tænder sammen med 2 sekunderen når der er gået 3 sekunder (2+1=3). Så jeg havde tænkt mig at lave en kode noget lignende det her for hver led:
void loop() { digitalWrite(13, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(13, LOW); // set the LED off delay(2000); // wait for a second digitalWrite (13, HIGH); delay(1000); Dette ville virke for 1 sekunders led'en, til at vise når der er gået 1 sekund, og sammen med 2 sekunders led'en vil det vise at der er gået 3 sekunder. Men hvordan kan jeg tænde 2 sekunders led'en på samme tid som 1 sekunders led'en? Og hvad så når time led'erne skal på?
Med kunstig intelligens skaber HP’s nye OmniBook X 14 en unik og skræddersyet brugeroplevelse målrettet dem, der ønsker høj ydeevne og intelligente funktioner
Først og fremmest skal du have en udgang til hver LED. det vil sige 6 til sekunder (59 sekunder = 111011), lige så mange til minutterne og 5 til timerne (23 timer = 10111). De vil sige 17 udgange. Det er der ikke på en arduino UNO. Nu ved jeg ikke hvilken model du har, men det er vidst den mest gængse.
Hvis det skal være et rigtigt ur vil jeg gerne vide hvor du henter tiden? Eller skal det bare være et ur der tæller op?
Hvis det bare er et ur der tæller op kan du evt. udlade timer, og så bare bruge 12 LED'er.
Nu kan du tage for hver LED og sætte HIGH/LOW for hver LED, men det er lidt besværligt, og giver ikke en særlig pæn kode.
Hvis du derimod sætter et array op til dine LED'er, og en til dine tidsenheder, lignende det her: int[] leds = { 1, 2, 3, 4, 5, .. , 12 }; int[] timespans = {1, 2, 4, .. , 32, 60, 120, 240, .. , 1920 }
Som du kan se skifter jeg fra et mellemrum på 1 ved sekunder til 60 ved minutter. 1 minut er som bekendt 60 sekunder. Nu kan du lave det hele i din loop med en for lykke. Det næste her er (nogenlunde) pseudo kode, da jeg ikke vil give svaret væk, jeg fornemmer også at du gør dette for at lære :).
void loop(){ tid = millis int[] state; for hver timespan, nummer i hvis tid >= timespan[i] tid = tid - timespan state[i] HIGH ellers state[i] LOW for hver state, nummer i sæt leds[i] state[i] vent 1 sekund }
er rigtig dårlig til pseudo kode, men håber at du finder ud af noget, og at du kan forstå min kode, der er et dejligt afbræk midt i mit studie retnings projekt :)
Det skal være et ur der kan vise hvad klokken er. Jeg vil bruge chippen fra en Duemillinove fra Letelektroonik, den har vist nok in-/outputs. Jeg vil skrive det i programmerings-sproget Wiring, og jeg ander intet af det der pseudo.
Har du et real time clock modul? Eller hvordan vil du finde ud af hvad klokken rent faktisk er?
pseudo kode er bare hvor man går igennem hvad koden skal gøre. Det vil sige at koden ikke vil fungere, men er en opskrift på hvordan du skal eller kan lave din kode :)
Problemet er jo bare at du ikke kan vise klokken med en enkelt LED.
Jeg forstår dit spørgsmål sådan her: "Skal jeg tænde eller slukke hver LED hver gang koden kører igennem?". Er det en rigtig omformulering af dit spørgsmål?
Til det er svaret: JA. Alternativet er at have en array med om de var tændt eller slukkede sidste gang koden kørte, men så skal du bruge flere if sætninger, og så tror jeg at det kræver mere ressourcer.
Jeg ved godt at jeg skal bruge 17 led'er, jeg mente mere om du kunne vise hvad du ville gøre med bare en af dem. Mit spørgsmål er mere om hvordan jeg får led'erne til at delay'e den tid de skal uden at delay'e resten af koden.
Jeg forstår ikke hvorfor det er at du ikke vil lade resten af koden delaye, men det du kan gøre er at tænde for en led, lave en if sætning der tjekker om tiden er gået, og så slukker den. Men som sagt så forstår jeg ikke grunden til at du ikke vil lade det hele delaye, og jeg synes du skal prøve at kigge på min pseudo en gang til, og se om du kan forstå hvad det er jeg mener at koden skal gøre.
[] angiver at det er et array, [i] i et for loop, hvor i stiger hver gang, angiver hver enkelt element i array'et. Timespan er et array med de tider dioderne skal repræsentere.
Nåååår nu forstår jeg hvad du mener (nogenlunde) GENIAL IDE :D
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.