Arduino - long Variable nimmt nur Höchstwert einer int an!

OP #4605507
Hallo,
ich habe ein total simples Programm das nicht so macht wie ich mir das 
vorstelle:

void setup() {
    Serial.begin(115200);
    }

void loop () {
    int Poti = 0;
    long verzoegerung;
    int Potiwert;
    Potiwert = analogRead(Poti);
    verzoegerung = Potiwert*1000;
    Serial.print("Poti: "); Serial.println(Potiwert);
    Serial.print("Verzoegerung: "); Serial.println(verzoegerung);
    delay (verzoegerung);
    }

Ich benutze: Arduino Mega 2560 V3 und Arduino IDE 1.0.5-r2


Das Problem ist dass die Variable "verzoegerung" die ich als long-Typ 
deklariert habe keinen Wert über 32768 annehmen möchte!

Also wenn ich das Poti einstelle dass "Potiwert" = 32 ist dann habe ich 
als "verzoegerung" = 32000 auf dem Serial-Monitor stehen und delay macht 
dann auch 32 Sekunden.
Wenn ich aber "Potiwert" = 33 einstelle dann ist "verzoegerung" = -32536
und bei "Potiwert" = 34 ist "verzoegerung" = -31536 ! Es wirkt so als 
wäre
"verzoegerung" immer noch eine int-Variable.

Ich hatte diesen Programmteil eigentlich in einer selber geschriebenen 
Library verwendet und dachte es liegt an einer fehlerhaften Deklaration 
aber als ich den Programmteil nochmal separat als neuer Sketch probiert 
habe fiel ich aus allen Wolken - das Problem ist immer noch vorhanden!

Das ist bestimmt nur ein Leichtsinnsfehler von mir aber ich mache jetzt 
schon einen kompletten Tag daran rum und komme einfach nicht auf die 
Lösung!
Gast
Potiwert ist ein int und 1000 ist auch ein int. Wenn man die beiden 
multipliziert, kommt erstmal ein int heraus, der natürlich überläuft. 
Danach erst wird das Ergebnis in Verzoegerung gespeichert.
Gast
> int Potiwert;
> verzoegerung = Potiwert*1000;

Potiwert ist ein Integer.
1000 ist auch ein Integer (gilt für alle Zahlen, die nicht zu groß 
sind).

Integer * Integer ergibt einen Integer, weil ein Algorithmus verwendet 
wird, der nur Integer kann.

Du musst einen der beiden Operanden als Long Integer kennzeichnen. Am 
Einfachsten so:

verzoegerung = Potiwert * 1000L;

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.