Sida 1 av 1

Hur lägger ni upp programmeringen

Postat: 1 december 2019, 15:26:36
av cazz
Bara undrar hur ni lägger upp medelstora programmeringar i detta fall arduino?

De gånger jag har programmet så är det väldigt enkla saker men har nu ett projekt (RGB julstjärnan) och nu blir det flera variablar att hålla koll på.

Så ritar ni upp det för hand på papper eller bara köra ni try an error :D

Re: Hur lägger ni upp programmeringen

Postat: 1 december 2019, 15:30:45
av sodjan
> Så ritar ni upp det för hand...

Det beror ju väldigt mycket på vad du lägger i begreppet "det".
Jag brukar nog i alla fall göra en mappning av t.ex. I/O pinnar
till funktioner med papper och penna. Kanske en grov mappning
av minnet eller simulering av några kritiska funktioner.

Re: Hur lägger ni upp programmeringen

Postat: 1 december 2019, 15:59:07
av Icecap
Om det är Arduino eller verkliga saker är i grunden likgiltigt, principen är det samma.

Först o främst definierar jag projektet! Först övergripande och sedan ett steg ner i detaljer.
Jag noterar oftast detta i källkoden men är det ett mer allvarligt projekt än en RGB julstjärna skriver jag en del papper i LibreOffice.

Men källkoden kan innehålla typ följande:
/*
Purpose:
* Make a christmas star tingle due with the use of RGB-LED's.
* The star has 6 arms with 2 RGB-LED on each and one RGB-LED in the center.
* The LED's shall be controlled individually/combined/whatever (välg rätt sätt) through PWM/On-Off (välj rätt sätt).

På detta sätt kan jag minnas vad som ska ske överordnad.

Om vi t.ex. antar att alla LED drivs "parallellt" och att färgerna ska "glida" mellan olika färger hade jag gjort några funktioner som klarar detta åt mig.

Först en funktion som ställer nya mål för hhv. Röd, Grön och Blå. I mitt fall hade jag slumpat med en primtalsfunktion.

Sedan en funktion som "känner till" vad status är nu (R, G & B nivå) och kan stega i rätt takt mot de nya mål.

Sist en funktion för att ställa de 3 PWM-kanalers duty-cycle.

Dessa tre hade sedan kört så att när ett mål var nådd (glidit till nya R, G & B-värden) hade det utlöst nya värden till R, G & B.
Så länge de inte är nådd hade funktionen för att "glida" dit körts regelbundet och resultatet av den hade ställd PWM-kanalerna.

På detta vis blir "huvuddelen" av programmet rimligt enkel att läsa och förstå om man nu ger de rätta namn till rutinerna.

Varje sub-rutin (funktion) ska sedan (kanske) ha vissa input och det borde framgå av dom hur deras funktion lösas. Igen enkelt att läsa och underhålla.

Re: Hur lägger ni upp programmeringen

Postat: 1 december 2019, 16:27:15
av swesysmgr
cazz skrev:Bara undrar hur ni lägger upp medelstora programmeringar i detta fall arduino?
Skriver en grov struktur först med kommentarsrader som visar vad som skall hända för varje moment inne i loop() och sedan tomma funktioner med en kommentarsrad som visar vad varje funktion skall göra. Då tycker jag att man ganska snabbt ser om man är på rätt spår eller behöver tänka om ifall programmet är på 100 till 1000 rader.

En bättre editor än Arduino-miljön tycker jag är att föredra, har använt https://code.visualstudio.com/ med Arduino plugin (allt gratis).
cazz skrev:Så ritar ni upp det för hand på papper eller bara köra ni try an error :D
Kopierar en bra bild från nätet av den modell som skall användas och lägger den som bakgrund i ett ritprogram som stödjer lager.

Ritar in/utsignaler med pilar i olika färger + kommentarer i ett eller flera lager ovanpå. Koppla sedan upp med kablar i samma färger (röd/grön/blå för PWM-kanalerna i en julstjärna t.ex.) och risken för fel minskar, framför allt om man behöver göra avbrott i kopplandet.

Detta med lager kan låta löjligt men då kan du redigera kommentarer m.m. fritt utan att påverka bilden av själva arduinon. Inget fel med papper och penna men att sudda och ändra färger är krångligt och papper har en tendens att ha kommit bort om du vill uppgradera julstjärnan till julen 2020. Med alla filer i samma mapp finns allt kvar.

Re: Hur lägger ni upp programmeringen

Postat: 1 december 2019, 17:53:55
av cazz
Tack för svaren.

Ska kolla hur jag ska göra om jag bara slutar ändra mig hela tiden.

Grunden var först att ha en enkel stjärna.
Det slutade med man har en sjuärmad stjärna och två LED på varje del och en i mitten.
Det var tänkt att jag ska ha en grön, gul och en röd på varje rad.
Det slutade med att det blev RGB lampor istället.
Så då tänkte man att man kan köra röda, gröna och blåa lite snyggt.
Det slutade med att man kom på att man kan blanda färgerna.
Som tur är då jag kommer köra transistorer att det inte blir så mycket blandat men endå man går från enfärgade LED och nu ska man
blanda och då blir det mer jobb att tänka ut :D

Re: Hur lägger ni upp programmeringen

Postat: 1 december 2019, 18:12:44
av TomasL
Skriver en kravspec på både mjukvara och hårdvara.
Letar reda på lämplig processor för jobbet.
Mappar io-pinnar, vanligtvis i Excel, där jag ger portar mm samma namn de har i nätlistan. Använder alltid samma namn både i EDA-systemet som i källkoden.
Därefter gör jag som de andra. Tomma funtioner med både beskrivningar och pseudokod

Re: Hur lägger ni upp programmeringen

Postat: 1 december 2019, 18:57:24
av Klas-Kenny
Brukar bara köra på, så att säga.
Har ju i princip alltid ett kopplingsschema som talar om hur hårdvaran runt om ser ut. Sen brukar jag börjar med initialisering av all hårdvara och att skriva lågnivådrivare för hårdvaran i processorn, och därefter drivare för all hårdvara som processorn sedan styr eller pratar med.

När man har funktioner på plats för att styra all hårdvara runt om så börjar jag med den "riktiga" funktionen. Då börjar helt enkelt i någon ände och jobbar mot målet. Försöker först få till någon grov, grundläggande funktion, sen bygger på alla detaljer allt eftersom.

Re: Hur lägger ni upp programmeringen

Postat: 1 december 2019, 21:03:49
av 4kTRB
Om programmet är objektorienterat kan man lämpligen lägga upp programmet i objekt.
Annars flödesdiagram som då man kodade i assembler.

Re: Hur lägger ni upp programmeringen

Postat: 30 september 2020, 21:12:29
av Micke_s
Brukar dokumentera pinnarna som kommentater i ino filen.
Schemat ritar jag oavsett i eagle, så det finns där.
Sedan någon folder med pdf:er, bilder och annan info.

Är det större så kan man börja tänka på klasser och dela upp det i filer.
Notering om klasser: så länge objektet skapas i början och aldrig tas bort så är inte minneshantering ett problem.

Större projekt där mycket kod är inblandad så blir det lite mer dokumentation utanför koden.
Som flödesdiagram, in/ut kommandon till omvärden och vad de olika delarna ska göra.

Mindre projekt så är vettiga kommentarer i koden bäst enligt mig, gäller förvisso större projekt också.
Skriv kommentarer på hela funktioner vad den är tänkt att göra istället för varje kodrad. Undvik knepig kod.
Var gränsen för mindre projekt går beror på person.

Re: Hur lägger ni upp programmeringen

Postat: 1 oktober 2020, 04:07:25
av Synesthesia
För all programmering:
Sammanställ beskrivningar, kravspecar, önskemål mm, kanske göra tabeller över vissa saker för att göra det mer överskådligt, sedan brukar man komma på hur man vill programmet skall se ut på ett ungefär.

Programmeringen: gör först I/O (fast det brukar kompilatorn sköta, man behöver bara konfigurera), sedan andra funktioner som använder I/O osv, i den ordningen.
Ofta testar jag funktioner som kan vara mer svårtestade i en vanlig PC-kompilator innan jag lägger in det, då kan man även även kompilera ihop det med något grafiskt interface med lite programvara som gör att det skall motsvara hårdvaran eller I/O-interfacet i den hårdvara skriver program till för att kunna testa lättare.
Undviker globala variabler, om de ändå finns blir det helst som struct.

För ditt Arduino-projekt hade jag gjort ett library som inkluderat funktioner för att enkelt styra alla ljus-utgångar, och hade t.ex funktioner för steglösa övergångar varit med hade jag lagt det i samma library för att förenkla programmet som styr ljuset.

Re: Hur lägger ni upp programmeringen

Postat: 1 oktober 2020, 10:05:24
av SeniorLemuren
swesysmgr skrev: 1 december 2019, 16:27:15 En bättre editor än Arduino-miljön tycker jag är att föredra, har använt https://code.visualstudio.com/ med Arduino plugin (allt gratis).
Tyckte det var ett bra tips, jag använder ju visualstudion till mina hemsidor. Det finns ju flera olika plugin för Arduino. Har du någon erfarenhet av vilken som är bäst?

Re: Hur lägger ni upp programmeringen

Postat: 1 oktober 2020, 12:45:03
av HUGGBÄVERN
Top - down.
Specar grovt vad jag vill ha gjort. Delar upp projektet i mindre block som delas i än mindre och sedan är jag kanske på programmeringsnivå.

Re: Hur lägger ni upp programmeringen

Postat: 2 oktober 2020, 01:41:46
av swesysmgr
SeniorLemuren skrev: 1 oktober 2020, 10:05:24
swesysmgr skrev: 1 december 2019, 16:27:15 En bättre editor än Arduino-miljön tycker jag är att föredra, har använt https://code.visualstudio.com/ med Arduino plugin (allt gratis).
Tyckte det var ett bra tips, jag använder ju visualstudion till mina hemsidor. Det finns ju flera olika plugin för Arduino. Har du någon erfarenhet av vilken som är bäst?
Har inte använt Arduino så mycket och bara kört Microsofts VS-code plugin för Arduino (den med flest röster). Jämfört med en "normal" IDE tycker jag Arduinos original är väldigt torftig.

Re: Hur lägger ni upp programmeringen

Postat: 9 oktober 2020, 10:08:11
av bleb
Tråden var ju ganska gammal så jag hoppas det har löst sig redan för TS...

Men när det kommer till ett program/projekt som är lite större än "hello world", är en bättre IDE ett måste (man får nästan mer hjälp i notepad++ än man får i Arduinos IDE).
Jag kör på Microsofts VisualStudio, (Community versionen är gratis, precis som Code).
Till detta kör jag vMicro (VisualMicro.com) som extension för att få Arduino kompabilitet.
(den lägger sig som ett skal över arduino IDE så man blir inte helt av med den...)
VisualMicro kostar (500 sek för en maskin i "evighet" eller 120 per år, samt gratis att testa i 30 dagar) men är helt klart värt det, även om den har sina egenheter...
Men väl i Visual Studio, har du sen all funktionalitet man har i "vanlig utveckling",
Så "Peek definition", "find all referenses", "rename", "call hierarchy" etc, är bara ett högerklick bort,
så koden blir inte i sån oordning som den kan bli när man labbar omkring och klipper och klistar och hittar på variabler on the fly...
(själv är jag något av en ninja på att lämna oanvända funktioner kvar efter mig annars...).

Ett "julstjärneprojekt" hade jag bara kört på om jag suttit i VisualStudio...

Re: Hur lägger ni upp programmeringen

Postat: 9 oktober 2020, 10:29:52
av Gimbal
Man tar en bit i taget. :rofl