Definera givartyp i C och sätta mätområde m.a.p. dessa

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
StRob
Inlägg: 167
Blev medlem: 15 maj 2007, 09:30:47
Ort: Karlstad

Re: Definera givartyp i C och sätta mätområde m.a.p. dessa

Inlägg 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
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Definera givartyp i C och sätta mätområde m.a.p. dessa

Inlägg 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"...
Användarvisningsbild
stekern
Inlägg: 453
Blev medlem: 2 november 2008, 08:24:18
Ort: Esbo, Finland

Re: Definera givartyp i C och sätta mätområde m.a.p. dessa

Inlägg 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))
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Definera givartyp i C och sätta mätområde m.a.p. dessa

Inlägg 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.
StRob
Inlägg: 167
Blev medlem: 15 maj 2007, 09:30:47
Ort: Karlstad

Re: Definera givartyp i C och sätta mätområde m.a.p. dessa

Inlägg 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..
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Definera givartyp i C och sätta mätområde m.a.p. dessa

Inlägg 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.
Användarvisningsbild
Icecap
Inlägg: 26658
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Definera givartyp i C och sätta mätområde m.a.p. dessa

Inlägg 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.
Användarvisningsbild
stekern
Inlägg: 453
Blev medlem: 2 november 2008, 08:24:18
Ort: Esbo, Finland

Re: Definera givartyp i C och sätta mätområde m.a.p. dessa

Inlägg av stekern »

mL/min är nog minst lika vedertaget som L/min, så multiplicera med tusen då.
StRob
Inlägg: 167
Blev medlem: 15 maj 2007, 09:30:47
Ort: Karlstad

Re: Definera givartyp i C och sätta mätområde m.a.p. dessa

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Definera givartyp i C och sätta mätområde m.a.p. dessa

Inlägg 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... :roll:
Användarvisningsbild
stekern
Inlägg: 453
Blev medlem: 2 november 2008, 08:24:18
Ort: Esbo, Finland

Re: Definera givartyp i C och sätta mätområde m.a.p. dessa

Inlägg 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
StRob
Inlägg: 167
Blev medlem: 15 maj 2007, 09:30:47
Ort: Karlstad

Re: Definera givartyp i C och sätta mätområde m.a.p. dessa

Inlägg 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 ;-) )
Skriv svar