Ergebnis einer Rechnung auf LCD Arduino

OP (Firma: Trafo AG) #6339995
Lesenswert?

Guten Tag Zusammmen
Es liegt ein Problem vor bei meinem Arduino Code vor.
Ich möchte den Strom mit Hilfe eines Shunts Widerstand den Strom 
berechnen und auf einem LCD anzeigen lassen, doch ich weiß nicht wie ich 
die Lösung anzeigen kann. Im Internet habe ich Beispiele gefunden mit 
serial.Print, was ja theoretisch das gleiche Prinzip wäre wie lcd.Print 
doch es funktioniert leider nicht und es taucht ein Fehlercode auf.
Fehlercode:"`VShunt`" was not declared in this scope"
Würde mich sehr freuen, wenn ihr mir weiterhelfen könnten!
1
#include <LiquidCrystal.h>
2

3

4
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
5
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
6
int LED = 9;
7
int Shunt = A0;
8

9
void setup() {
10

11
  pinMode(LED,OUTPUT);
12

13
}
14

15
void loop() {
16
    
17
  lcd.begin(16, 1);
18

19
  lcd.print ((VShunt / 202)/ 200);
20
  lcd.print ("mA");
21
  pinMode(LED,OUTPUT);
22
    digitalWrite(LED, HIGH);
23
    int VShunt = analogRead(Shunt); // wird von 1-1023 angezeigt!
24
  
25
}
Fehlercode
#6340063
Lesenswert?

Elektro F. schrieb:
> Vielen Dank hat geklappt, aber jetzt zeigt es einfach 0mA an wisst Ihr
> an was das liegen könnte?

Also ich würde das alles erstmal besser strukturieren und mir ein C/C++
Buch zur Seite nehmen...das mit der Variable war ein echt unnötiger 
Fehler.

Ich weis zwar nicht was du mit der LED machen möchtest,
aber ansich fang doch ganz am Anfang an und versuch dann den Wert 
umzurechnen:
1
#include <LiquidCrystal.h>
2

3
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
4
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
5
int LED = 9;
6
int Shunt = A0;
7

8
void setup() {
9
  pinMode(LED,OUTPUT);
10
}
11

12
void loop() {
13
    int VShunt;
14
    
15
    // Wertebereich: 0-1023
16
    VShunt = analogRead(Shunt);
17
    
18
    lcd.begin(16, 1);
19
    
20
    lcd.print ("AD-Value:");
21
    lcd.print (VShunt);
22

23
    // Nun AD-Value in mA umrechnen
24
    // ...
25
}
Gast #6340380
Lesenswert?

Elektro F. schrieb:
> Vielen Dank für die Antwort, doch das Problem ist ich weiss nicht wie
> ich es in Volt umwandle. Da es irgendwie keine Kommastellen gibt.

Du kannst in dem Programm "sagen", dass ein Wert eine Kommazahl "ist".

Das nennt man auf Deutsch "deklarieren" und auf Englisch "to declare". 
Das Wort "declared" aus der Fehlermeldung ist die Form des Wortes, die 
angibt, dass etwas deklariert wurde, - "declarED", - die 
Vergangenheitsform.

Die Zeile
1
int Shunt;
ist eine solche Deklaration.

Die Zeile
1
float Voltage;
ist die Deklaration einer "Kommazahl". "Float" bedeutet 
"Fliesskommazahl"; dass ist das selbe wie eine Kommazahl.
#6340412
Lesenswert?

1
void loop()
2
{
3
    int ad_value;
4
    int mV;
5
    int mA;
6
    
7
    // Wertebereich: 0-1023
8
    ad_value = analogRead(Shunt);
9
    
10
    /**
11
    * AD-Value nach mV normieren, falls Vmax = 5V ist.
12
    *    0 = 0,000 V
13
    * 1023 = 5,000 V
14
    *
15
    * Falls du kein float nutzen willst:
16
    * Erst in µV rechnen: (5 * 1000000)
17
    * dann zu mV:         / 1000
18
    *
19
    * Nun hast es in mV vorliegen.
20
    */
21
    mV = (5 * 1000000) / 1023 * ad_value / 1000;
22
    Serial.println(mV, DEC);
23
    
24
    /**
25
    * Annahme, Rshunt = 0,1 Ohm
26
    *
27
    * Eigentlich:     mA = mV / 0.1f;
28
    * Aber wir möchten ja kein float.
29
    */
30
    mA = mV * 10;
31
    Serial.println(mA, DEC);
32
    
33
    // Ausgabe auf dem LCD könntest du dann so machen:
34
    lcd.print("I = ");
35
    lcd.print(mA / 1000);
36
    lcd.print(",");
37
    lcd.print(mA % 1000);
38
    lcd.print("A");
39

40
    delay(1000);
41
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren