PicBasic problem
PicBasic problem
Jag har 2 st temperaturgivare anslutna till var sitt ben.
Hade tänkt att spara lite minne genom att använda samma subrutin, och bara byta ben beroende på vilen som ska läsas av. Dock får jag felmeddelande när man compilerar. "Duplicate Variable 'SENSOR'"
Kan man på nått sätt ta bort kopplingen "sensor VAR PORTE.0" innan man byter ben ??
sensor VAR PORTE.0 'sensorn DS1820 Outside
GoSub checksensor 'anropar subrutin
outside = temp 'tempvärdet från subrutinen sparas i outside
sensor VAR PORTE.1 'sensorn DS1820 Inside
GoSub checksensor 'anropar subrutin
inside = temp 'tempvärdet från subrutinen sparas i inside
Hade tänkt att spara lite minne genom att använda samma subrutin, och bara byta ben beroende på vilen som ska läsas av. Dock får jag felmeddelande när man compilerar. "Duplicate Variable 'SENSOR'"
Kan man på nått sätt ta bort kopplingen "sensor VAR PORTE.0" innan man byter ben ??
sensor VAR PORTE.0 'sensorn DS1820 Outside
GoSub checksensor 'anropar subrutin
outside = temp 'tempvärdet från subrutinen sparas i outside
sensor VAR PORTE.1 'sensorn DS1820 Inside
GoSub checksensor 'anropar subrutin
inside = temp 'tempvärdet från subrutinen sparas i inside
Jo det är ju med 2 ggr om du ser kodsnutten jag klippt in.
Det jag önskar är att kunna växla variabeln "sensor" fram o tillbaka mellan 2 fysiska portar.
Alltså först ska tempen läsas av på PORTE.0
sedan ska samma procedur upprepa sig på PORTE.1
Eftersom proceduern är exakt lika på de båda portarna hade jag tänkt att använda samma subrutin, bara ändra porten.
Det går kanske inte att göra så, men jag hoppas på det, skulle vara smidigt.
Det jag önskar är att kunna växla variabeln "sensor" fram o tillbaka mellan 2 fysiska portar.
Alltså först ska tempen läsas av på PORTE.0
sedan ska samma procedur upprepa sig på PORTE.1
Eftersom proceduern är exakt lika på de båda portarna hade jag tänkt att använda samma subrutin, bara ändra porten.
Det går kanske inte att göra så, men jag hoppas på det, skulle vara smidigt.
Jag är inte heler någon hejare på basic men jag tycker det ser ut som du deklarerar variabeln sensor varje gång du kör subrutinen, d.v.s skapar en ny variabel varje gång. Eftersom dom har samma namn så får du felmeddelande.
Jag tror du får göra något sånt här:
Jag tror du får göra något sånt här:
Kod: Markera allt
<Deklarera varialbeln sensor>
:start
sensor = PORTE.0
GoSub checksensor 'anropar subrutin
outside = temp 'tempvärdet från subrutinen sparas i outside
sensor = PORTE.1 'sensorn DS1820 Inside
GoSub checksensor 'anropar subrutin
inside = temp 'tempvärdet från subrutinen sparas i inside
goto start
Jag kanske är dålig på att förklara vad jag hade tänkt med det hela.
Det är INTE 2 subrutiner med samma namn, det är en o samma subrutin.
Jag försöker förklara igen.
Jag deklarerar variabeln SENSOR mot PORTE.0
Sedan anropas subrutinen som jobbar mot variabeln SENSOR alltså PORTE.0
När den subrutinen är färdig vill jag deklarera om variabeln SENSOR mot PORTE.1 istället. Sedan anropas samma subrutinen som jobbar mot variabeln SENSOR alltså PORTE.1 i denna gång.
Detta börjar förståss om så att samma subrutin växelvis läser av 2 fysiska portar. På så vis skulle jag bara behöva bara en subrutin i stället för 2, vilket sparar minne för mig.
Tyvärr gick inte din idé heller ToB, då sparas bara testen PORTE.0 i variabeln sensor. Sensor blir inte knuten till den fysiska PORTE.0
Det är INTE 2 subrutiner med samma namn, det är en o samma subrutin.
Jag försöker förklara igen.
Jag deklarerar variabeln SENSOR mot PORTE.0
Sedan anropas subrutinen som jobbar mot variabeln SENSOR alltså PORTE.0
När den subrutinen är färdig vill jag deklarera om variabeln SENSOR mot PORTE.1 istället. Sedan anropas samma subrutinen som jobbar mot variabeln SENSOR alltså PORTE.1 i denna gång.
Detta börjar förståss om så att samma subrutin växelvis läser av 2 fysiska portar. På så vis skulle jag bara behöva bara en subrutin i stället för 2, vilket sparar minne för mig.
Tyvärr gick inte din idé heller ToB, då sparas bara testen PORTE.0 i variabeln sensor. Sensor blir inte knuten till den fysiska PORTE.0
Kan man inte göra så här?
Eller blir det samma sak??
Kod: Markera allt
sensor_out VAR PORTE.0
sensor_in VAR PORTE.1
:start
sensor = sensor_out
GoSub checksensor 'anropar subrutin
outside = temp 'tempvärdet från subrutinen sparas i outside
sensor = sensor_in 'sensorn DS1820 Inside
GoSub checksensor 'anropar subrutin
inside = temp 'tempvärdet från subrutinen sparas i inside
goto start
Nerå, det är bra med kommentarer från de som inte är lika insnöade. Jag har faktist aldrig stött på ett problem som detta, utan bara tagit för givet att det inte går i PICBasic.
Det skumma är ju att min testkod:
...fungerar att kompilera. Däri ej sagt att det är exekverbart.
>> ristomemo
Har du provat denna lösning? Det kanske blir ett dolt exekveringsfel som visar sig först när det börjar bli lite mer komplext kodmässigt?
Det skumma är ju att min testkod:
Kod: Markera allt
temp1 VAR PORTA.1
temp2 VAR PORTA.2
temp VAR BIT
loop:
temp = temp1
GoSub test
temp = temp2
GoSub test
GoTo loop
End
test:
temp = 1
Pause 500
temp = 0
Return
>> ristomemo
Har du provat denna lösning? Det kanske blir ett dolt exekveringsfel som visar sig först när det börjar bli lite mer komplext kodmässigt?