Sida 4 av 4
Re: Definera givartyp i C och sätta mätområde m.a.p. dessa
Postat: 13 oktober 2010, 09:23:39
av StRob
stekern skrev:
Såhär kan du göra
Kod: Markera allt
#if (FLOW_LIMIT > 3.5 || FLOW_LIMIT < 50)
#error Flow limit out of limits
#endif
EDIT: Förutom att jämförelsen med 3.5 nog inte fungerar, det måste vara en integer har jag för mig
Kan jag få det att fungera med flyttal på något sätt?
Jag har försökt med "const unsigned int HUNDREDxFLOW_LIMIT = FLOW_LIMIT*100; och så skriver ja"#if (HUNDREDxFLOW_LIMIT > 350 || HundredxFLOW_LIMIT < 5000)" istället, men jag får "error FLOW_LIMIT out of limits". Alltså #if (HUNDREDxFLOW_LIMIT > 350 || HundredxFLOW_LIMIT < 5000) verkar ju vara uppfyllt.
Just det, definitionen av FLOW_LIMIT: #define FLOW_LIMIT 3.60
Re: Definera givartyp i C och sätta mätområde m.a.p. dessa
Postat: 13 oktober 2010, 11:01:04
av sodjan
Jag är inte helt säker, men det känns som att du blandar saker
som körs i preprocessorn (#define och #if) med sådan som
hantera senare av kompilatorn (const unsigned int....) !?
Jag är inte helt hundra på att du kan förvänta dig att din #if ska
kunna "se" sådant som är beräknat i din "const unsigned int"...
Re: Definera givartyp i C och sätta mätområde m.a.p. dessa
Postat: 13 oktober 2010, 11:09:32
av stekern
Men ha FLOW_LIMIT multiplicerat med 100 och sen delar du med hundra i dina andra defines
dvs t.ex.
#define FLOW_LIMIT (360)
#define ANNANDEF (2000/(FLOW_LIMIT/100))
Re: Definera givartyp i C och sätta mätområde m.a.p. dessa
Postat: 13 oktober 2010, 11:28:24
av sodjan
Ja, så tänkte jag tänkte också.
Ge f-n i flyttal helt...
#define FLOW_LIMIT 360
#if (FLOW_LIMIT > 350 || FLOW_LIMIT < 5000)
Du låter helt enkelt enheten för FLOW_LIMIT vara hundradelar.
O.s.v.
Re: Definera givartyp i C och sätta mätområde m.a.p. dessa
Postat: 13 oktober 2010, 12:36:11
av StRob
Men det är just det jag vill slippa. Jag vill ha det i liter/min, för det är så vedertaget i sammanhanget. Jag vill att användaren skall slippa tänka på det och pss ta bort en mänsklig felkälla. Det är som att vi skulle börja prata hastigheten i en bil i m/h. Det är ju bara en faktor tusen, men i sammanhanget känns det konstigt..

Men går det inte så går det inte..
Re: Definera givartyp i C och sätta mätområde m.a.p. dessa
Postat: 13 oktober 2010, 12:42:34
av sodjan
Vilken "användare" ? Vad är det som "användaren" ska göra med själva *koden* ?
Det är ju bara internt i koden som du använder 10 ml/min som enhet, vid
presentation mot användaren kan du ju alltid sätta ditt ett komma var du vill.
> Det är som att vi skulle börja prata hastigheten i en bil i m/h
Tja, elektroniken/programvaran i bilen mäter sannolikt något i stil med m/s eller liknande.
Det är bara *hastighetsmätaten* som är graderad i km/h (d.v.s det som "användaren" ser).
Det finns absolut noll anledning till att programvaran i bilen skulle ha något med km/h att göra.
Du måste hålla isär mätning/beräkning från presentation.
Re: Definera givartyp i C och sätta mätområde m.a.p. dessa
Postat: 13 oktober 2010, 12:47:27
av Icecap
I den tripmätare jag gjorde för evigheter sedan var utläsningen i meter men intern upplösning var i 1/10mm så jag ser inte heller vad som är problemet!
Jag läste ut längder i meter förutom odometern som var i 100m som lägsta värde (xxx,xkm), tider visades i HH:MM:SS fastän intern upplösning var 1/100-del sekund osv.
Så allvarligt: get real! Ta ett heltalsvärde, skriv kommentar i headern på programmet om vilken upplösning som används och fixa så att utskriften motsvarar L/s eller vilken upplösning du vill använda. Det är ju faktisk bara en fråga om att peta in ett komme på rätt ställe, inget annat.
Re: Definera givartyp i C och sätta mätområde m.a.p. dessa
Postat: 13 oktober 2010, 13:27:50
av stekern
mL/min är nog minst lika vedertaget som L/min, så multiplicera med tusen då.
Re: Definera givartyp i C och sätta mätområde m.a.p. dessa
Postat: 13 oktober 2010, 14:20:29
av StRob
med Användaren, menar jag mig själv, eller någon annan som ska byta givare eller byta flödesgräns lr programmera upp ett nytt kort. För att göra det så skall man kompilera om koden och kanske programmera upp en ny µC på ett nytt kort. Och för att det ska vara så smidigt som möjligt så VILL jag ha det så.

Jag är fullt medveten om skillnaden i presenterade enheter och de enheter processorn jobbar med. Men detta är en del i koden som man ställer in sin data, vilket gör det till något av ett anvädargränssnitt på sätt och vis.. (Bilen jobbar nog för övrigt inte i m/s utan skulle mer troligt få t.ex pulser från nån hallgivare lr liknande vilket skulle innebära en frekvens..) Min flödesgivare i detta projektet ger frekvens där de olika givartyperna motsvarar en viss volym per puls, så det är inte så att jag arbetar med liter/minut i koden heller, det görs om till ett timervärde. Men jag vill helt enkelt att när man ska in och ändra så ska man inte behöva ha några förkunskaper om kodens uppbyggnad, det skall vara så lätt som möjligt. Därav mitt önskemål. Men som jag tidigare nämnt, JAG VILL VETA OM DET GÅR FÖR ATT LÄRA MIG.

Och värdet skall inte presenteras alls. Så för funktionen skulle jag lika gärna kunna ha motsvarande timervärde som FLOW_LIMIT. Men ska du då ändra gränsen till 11,34 liter/minut så vore det aningen opraktiskt, eller hur? Absolut enklast vore att skriva in 11,34, en kompromiss 1143. Det jag menar är, går det så vill jag lära mig. Går det inte så går det inte. Säg då det.
mL/min är nog minst lika vedertaget som L/min, så multiplicera med tusen då.
Nej, inte i detta fall. pratar man alkohol i blodet, är det promille, pratar man hastighet på vägarna är det km/h, hastighet på sjön är knop, flöde i min applikation är liter/minut. Punkt slut!

Klart att alla är vedertagna enheter, men inte i sammanhanget.
Re: Definera givartyp i C och sätta mätområde m.a.p. dessa
Postat: 13 oktober 2010, 14:40:46
av sodjan
Läs på lite om "dokumentation".
Exakt *VAD* är problemet med att skriva :
Kod: Markera allt
//
// Här anges parameterar för givare.
// FLOW_LIMIT anges i hundradels l/m.
// T.ex 15 l/m anges som "1500".
//
#define FLOW_LIMIT 360
//
//
Det borde man kunna förstå även om det har gått 10 år sedan man
senast var inne i koden...

Re: Definera givartyp i C och sätta mätområde m.a.p. dessa
Postat: 13 oktober 2010, 15:05:20
av stekern
Om man inte hunnit bli senil under de 10 åren
Ok, du får nöja dig med att "det går inte" då.
Om du absolut vill ange i L/min så kan du ju vara omständig och göra så här:
Kod: Markera allt
/* Flow limit integer part */
#define FLOW_LIMIT_I 3
/* Flow limit fraction part */
#define FLOW_LIMIT_F 60
#define FLOW_LIMITX100 (FLOW_LIMIT_I*100+FLOW_LIMIT_F)
#define FLOW_LIMIT ((FLOW_LIMITX100)/100)
#if FLOW_LIMITX100 > 350
#error out of limit
#endif
men det gör ju knappast koden mer lättläst än sodjans förslag
Re: Definera givartyp i C och sätta mätområde m.a.p. dessa
Postat: 14 oktober 2010, 13:00:10
av StRob
Nä, då är ju Sodjans förslag smidigare.
Precis, Det går inte. Duger gott åt mig som svar. Som sagt för ajälva applikationen spelar det ingen som helst roll, men jag vill bara veta om det går så ja kan lära mig.

Men alla snöar in så på själva uppgiften. Det var inte prio, snarare exempel..
Tack snälla för hjälpen (och dryga kommenterer

)