Hjälp med kod Arduino - visa volt på oled

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Shimonu
Inlägg: 295
Blev medlem: 21 oktober 2015, 22:44:33

Re: Hjälp med kod Arduino - visa volt på oled

Inlägg av Shimonu »

Icecap gav ju en lösning ovanför
EonX
Inlägg: 48
Blev medlem: 11 januari 2010, 23:36:56

Re: Hjälp med kod Arduino - visa volt på oled

Inlägg av EonX »

Det är helt rätt, jag som får träna upp min läskunnighet :vissla:

Nästa fråga, nu har jag en potentiometern som ger värdet på enklaste vis mellan 0 - 5 volt.

Om jag vill byta den mot en temperaturgivare som då har en startpunkt på ett negativt värde. Vad behöver man göra för att få det att fungera?
SeniorLemuren
Inlägg: 7804
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Hjälp med kod Arduino - visa volt på oled

Inlägg av SeniorLemuren »

Inte så konstigt att du får ett heltal när du deklarerat a som int "int a = (voltage);"Varför använder du a i stället för voltage överhuvudtaget?

Testat detta som sodjan länkade till?

Kod: Markera allt

static float f_val = 123.6794;
static char outstr[15];

void setup() {
  dtostrf(f_val,7, 3, outstr);

  Serial.begin(9600);
  Serial.println(outstr);
}

void loop(){
}
EonX
Inlägg: 48
Blev medlem: 11 januari 2010, 23:36:56

Re: Hjälp med kod Arduino - visa volt på oled

Inlägg av EonX »

Jag provade den men fick det inte att fungera, dock beror det nog mer på min okunskap än koden.

Jag använde mig av den andra länken han skickade.

Jag ska göra ett nytt försök idag, men hur ska jag på enklaste vis bli av med ”a” då?
Användarvisningsbild
Icecap
Inlägg: 26139
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Hjälp med kod Arduino - visa volt på oled

Inlägg av Icecap »

Enklast hade varit att ta en temperatursensor som är digital (t.ex. DS18B20).

Men OK, om din analoga givare kör med negativa spänningar måste du offsetta spänningen medelst t.ex. en op-amp. Det går på andra sätt också men då det är oklart exakt vilken sensor det rör sig om är bättre svar omöjliga.

Har du kollat i databladet om det finns en lösning för detta?
SeniorLemuren
Inlägg: 7804
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Hjälp med kod Arduino - visa volt på oled

Inlägg av SeniorLemuren »

I ditt fall flyttar du förstås inhämtningen och utskriften till loopen. Detta är bara ett exempel på att det funka (testat på Uno)

Kod: Markera allt

float voltage = 123.6794;
static char outstr[15];

void setup() {
  dtostrf(voltage,7, 3, outstr);

  Serial.begin(9600);
  Serial.println(outstr);
}

void loop(){
}
EonX
Inlägg: 48
Blev medlem: 11 januari 2010, 23:36:56

Re: Hjälp med kod Arduino - visa volt på oled

Inlägg av EonX »

Icecap skrev:Enklast hade varit att ta en temperatursensor som är digital (t.ex. DS18B20).

Men OK, om din analoga givare kör med negativa spänningar måste du offsetta spänningen medelst t.ex. en op-amp. Det går på andra sätt också men då det är oklart exakt vilken sensor det rör sig om är bättre svar omöjliga.

Har du kollat i databladet om det finns en lösning för detta?
Jag har inte köpt någon givare än så om en digital är bättre så köper jag en sådan direkt av den typ du nämner.

Min fundering var egentligen hur det presenteras, Med en analog tempgivarw börjar ju skalan på tex -25C, hur får man koden att tolka en viss spänning till ett negativt tal och presentera detta?
svanted
Inlägg: 5083
Blev medlem: 30 augusti 2010, 21:20:38
Ort: Umeå

Re: Hjälp med kod Arduino - visa volt på oled

Inlägg av svanted »

vad menar du med att den börjar på -25°
en analog tempgivare kan ju inte ge ut negativ spänning och du matar den med +5V
är det att specen för givaren börjar på -25°.
det handlar ju bara om att skriva vilken resistans den ger ut med början vid -25°
i praktiken beror allt på hur du kopplat och vilka komponenter du använder.
EonX
Inlägg: 48
Blev medlem: 11 januari 2010, 23:36:56

Re: Hjälp med kod Arduino - visa volt på oled

Inlägg av EonX »

Jag är helt med på vad du menar, men när jag i min kod som den är nu matar in 0V visar oled 0, när jag matar in 5V visar oled 5. Och detta reder jag ut att ändra i koden så tex vid 5V visar oled 100.

Men om jag ist skulle vilja att vid 0V visar oled -25 och 5V visar 100.

Hur skulle du koden se ut?
Användarvisningsbild
Klas-Kenny
Inlägg: 11328
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Hjälp med kod Arduino - visa volt på oled

Inlägg av Klas-Kenny »

Du säger att du reder ut att skala om 0-5V till 0-100, bra.

Att sen göra om 0-100 till tex. -25 - +75, är bara frågan om att subtrahera med 25.
Se bara till att variabeln du använder inte är av unsigned typ (en vanlig int fungerar bra), så kan processorn hantera negativa tal utmärkt.
Shimonu
Inlägg: 295
Blev medlem: 21 oktober 2015, 22:44:33

Re: Hjälp med kod Arduino - visa volt på oled

Inlägg av Shimonu »

Jag tror däremot han vill använda området -25 till 100

I det fallet får råvärdet multipliceras med 125/1023 eller vad upplösningen nu var och sen subtrahera med 25.
Användarvisningsbild
Klas-Kenny
Inlägg: 11328
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Hjälp med kod Arduino - visa volt på oled

Inlägg av Klas-Kenny »

Ja.

Jag förutsatte att om han kan omvandla till 0-100, så fixar han även att omvandla till 0-125.. :roll:
Användarvisningsbild
Wedge
Inlägg: 1026
Blev medlem: 8 juli 2012, 17:33:33

Re: Hjälp med kod Arduino - visa volt på oled

Inlägg av Wedge »

Det finns även en färdig funktion för omvandlingen:
https://www.arduino.cc/reference/en/lan ... /math/map/
SeniorLemuren
Inlägg: 7804
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Hjälp med kod Arduino - visa volt på oled

Inlägg av SeniorLemuren »

Det verkar ju som om han vill ha talet med decimaler. Map funkar väl bara för heltal.
Användarvisningsbild
Wedge
Inlägg: 1026
Blev medlem: 8 juli 2012, 17:33:33

Re: Hjälp med kod Arduino - visa volt på oled

Inlägg av Wedge »

Hmm, det har du nog rätt i SeniorLemuren.
Men å andra sidan, källkoden till map() är publicerad och det är enkelt att byta argument- och returtyp till float och skapa en egen funktion:

Kod: Markera allt

long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
Skriv svar