PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arduino mega + keypatshield + lcd display,counter zählt bis 32 und dann zurück zu 0.



hasendorf
06.04.2013, 17:33
hasendorf
am 03.04.2013 um 14:32 (27 Hits)

Hallo Freunde, das ist derAuszug aus dem Sketch zur Pelletverbrauchsberechnung. Folgendes Problem: Der counter0 zählt die Umdehung der Stokerschnecke und counter1 berechnet den Pelletverbrauch, das klappt auch alles prima, aber bei ca. 32 kg Anzeige erscheint vor der Summe ein Minuszeichen und die Verbrauchsanzeige zählt rückwärts bis 0. Vielleicht kann mir einer der Experten helfen, bin nicht mehr ganz jung (73) und erst seit 6 Mon. begeisterer Arduinofan, somit etwas unerfahren. Meine Suche im Netz zum Problem war bisher erfolglos.
Würde mich über Hilfe freuen.

void irq_Svc0() // Entprellung, Zähler, Verbrauchsberechnung
{
if (inputpin2==HIGH)
if(debounce(inputpin2))
digitalWrite(inputpin2,HIGH);
long unsigned act_IRQ0; // Umdrehungen der Stokerschnecke zählen,
act_IRQ0=millis();
{
counter0++; // Zähler für Stokerschnecke,
counter1=counter0*1/10; // Zähler durch 10 teilen zur LCD Anzeige,
if(counter1>20000)counter1=0; // Zähler: gültiger Zustandswechsel, bei 4140 kg reset,
last_IRQ0 = act_IRQ0;
long unsigned act_counter1;
var=counter1 *207/1000; // Pelletverbrauch berechnen, 1 Umdr.= 20,725 gr. Pellets,
if (Serial.read()== ';') // Pelletverbrauch an LCD ausgeben,
Serial.println( var);
Serial.print( var);
}
{
val=digitalRead(inputpin2); // LED - Umdrehungsanzeige Stokerschnecke,
if(val==LOW)
digitalWrite(led13,HIGH); // LED Pin 13
delay(2000),
digitalWrite(led13,LOW);
}
}

Hubert.G
06.04.2013, 20:25
Wo ist counter0 definiert?
Sieht so aus als wäre counter0 signed

hasendorf
07.04.2013, 08:48
Wo ist counter0 definiert?
Sieht so aus als wäre counter0 signed

Hallo, danke für die schnelle Reaktion, Ausschnitt aus dem Sketch.

PCF8583 rtc (0xA0); // Instanz fürRTC:
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Instanz für LCD + Tastatur:
OneWire ds(3); // Instanz für 1Wire Bus(PIN3):
//-------------------------------------------------------------------------
int lcd_key = 0; // Definieren von Werten der LCD-Anzeige mit den Tasten:
int lcd_key_prv = 0;
int adc_key_in = 0;
int number_screen = 1; // erstes Bild aufrufen
int Pellet = 0;
int var = 0;
int led13 = 13;
int inputpin2 = 2; // Zählimpuls Pin 2
int val = 0;
int lcd_bl = 1; // Bild Nr..., zur Anzeige:
int debounceDelay = 1000; // Entprellverzögerung 1 sek
int counter1 = 0;
char degree_sign = 0xDF; // Grad Celsius Zeichen auf LCD:
#define btnRIGHT 0 // Tasten Nr...
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5

Hubert.G
07.04.2013, 10:32
Ich verwende Arduino nur als Hardware und programmiere in C. Von daher habe ich darauf geschlossen das counter0 signed sein muss.
Mit der Arduino Software habe ich mich nie so richtig beschäftigt.
In deiner Auflistung steht int counter1 = 0; Man müsst da mal nachsehen wie bei Arduino int definiert ist, oder schreib da mal hin unsigned int.
counter0 ist da gar nicht dabei.

hasendorf
09.04.2013, 11:41
Ich verwende Arduino nur als Hardware und programmiere in C. Von daher habe ich darauf geschlossen das counter0 signed sein muss.
Mit der Arduino Software habe ich mich nie so richtig beschäftigt.
In deiner Auflistung steht int counter1 = 0; Man müsst da mal nachsehen wie bei Arduino int definiert ist, oder schreib da mal hin unsigned int.
counter0 ist da gar nicht dabei.

Danke an alle, werde alles mal probieren, z.Z. habe ich andere sehr dingende Dinge zu tun.