Oprettet tir. d. 31. januar 2012 kl. 16:58:11

Balls_of_Kevlar
Balls_of_Kevlar (1.245 point. Point ude: 240)

Arduino Code

Hej

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å?

Tak,
Sofus Christensen

Skrevet tir. d. 31. januar 2012 kl. 17:26:25| #1

kentora
kentora (7.380 point)
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 :)

Skrevet tir. d. 31. januar 2012 kl. 18:37:22| #2

Balls_of_Kevlar
Balls_of_Kevlar (1.245 point)
Hej

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.

Jeg håber det var den info du skulle bruge, Tak

Sofus Christensen

Skrevet tir. d. 31. januar 2012 kl. 19:08:16| #3

kentora
kentora (7.380 point)
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 :)

http://en.wikipedia.org/ (...)

Skrevet tor. d. 02. februar 2012 kl. 13:21:05| #4

Balls_of_Kevlar
Balls_of_Kevlar (1.245 point)
Nej men jeg ville bare sætte det i gang på et bestemt tidspunkt.

og ok

Jeg forstår stadig ikke din pseudo-code, men kunne du skrive hvordan du ville gøre det ved bare en led :-)

Skrevet søn. d. 05. februar 2012 kl. 16:12:45| #5

Balls_of_Kevlar
Balls_of_Kevlar (1.245 point)
Forstår du hvad jeg mener?

Skrevet man. d. 06. februar 2012 kl. 07:26:18| #6

kentora
kentora (7.380 point)
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.

Skrevet man. d. 06. februar 2012 kl. 18:19:52| #7

Balls_of_Kevlar
Balls_of_Kevlar (1.245 point)
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.

Skrevet man. d. 06. februar 2012 kl. 18:39:18| #8

kentora
kentora (7.380 point)
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.

Skrevet man. d. 06. februar 2012 kl. 20:53:18| #9

Balls_of_Kevlar
Balls_of_Kevlar (1.245 point)
Jeg har kigget på den og forstår ikke "timespan" og det der int og [i]

Skrevet tir. d. 07. februar 2012 kl. 08:16:27| #10

kentora
kentora (7.380 point)
[] 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.

Skrevet tor. d. 09. februar 2012 kl. 19:34:55| #11

Balls_of_Kevlar
Balls_of_Kevlar (1.245 point)
Nåååår nu forstår jeg hvad du mener (nogenlunde) GENIAL IDE :D

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Eget CMS-system

Oprettet den 26. maj 2012 kl. 12.24
MadsLundholmDk giver 30 point for svar | Giv et svar »

PHP kode

Oprettet den 24. maj 2012 kl. 00.15
ksno04 giver 30 point for svar | Giv et svar »

usynlige mellemrum i string indlæst fra .txtfil i PHP

Oprettet den 23. maj 2012 kl. 13.20
carsten1973 giver 60 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger