Go Down

Topic: Zählen  (Read 972 times) previous topic - next topic

Rudispiess

Ich will Strom sparen. Die Spannung kommt von einem Akku. Ich benötige den Zähler nur ca. 2 mal pro Stunde für ca 15 sec.
Also schalte ich nur ein wenn ich es brauche.

agmue

Ich weiß ich bin nicht der beste im erklären, aber ich versuche mein Bestes. 
Eine gute Erklärung bringt Dich näher an die Lösung.

Es sollte nicht linear zu den Tastenbetätigungen der Wert erhöht werden.
Der Impuls kommt von einem art Reedkontakt
und der Ausgabewert soll laut einer von mir vogegebenen Skala hochgezählt werden.
Die Skala kann auch 0.4 - 1.1 - 1.8 - 2 - 2.5 - 3.2 - 4.6 - 5 sein. Nicht linear.
Da hilft Dir eine Tabelle in einem Feld, wobei Du die Tabellenwerte über einen Index ansprichst. Probiere mal dies:

Code: [Select]
#include <Bounce2.h>
Bounce tasterVor = Bounce();

const byte tasterPin = 2, ausPin = 9;
// 0.4 - 1.1 - 1.8 - 2 - 2.5 - 3.2 - 4.6 - 5
const byte werte[] = {0, 20, 56, 92, 102, 128, 163, 235, 255};
const byte anzWerte = sizeof(werte);
void setup(void)
{
  Serial.begin(115200);
  Serial.println("Anfang");
  pinMode(tasterPin, INPUT_PULLUP);
  tasterVor.attach(tasterPin);
  tasterVor.interval(50);
}

void loop(void)
{
  tasterVor.update();
  static byte index = 0;
  if ( tasterVor.fell() )
  {
    index = (index + 1) % anzWerte;
    analogWrite(ausPin, werte[index]);
    Serial.println(werte[index]);
  }
}
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Rentner

Hallo,

du bist vieleicht ein Spassvogel , erst gibst Du eine Zahlenreihe an bei der man von einem linearen Zusammenhang ausgehen kann und der nach jedem 4. Tastendruck geändert werden soll, und jetzt schreibst Du was von einer freien Tabelle die du haben willst, und die mit jedem Druck geändert werden soll. Es sind jetzt 30 Beiträge zu dem Thema geschrieben worden und anscheined bist Du keinen mm weitergekommen. Ein bischen Eigenleistung kann man schon erwarten. Zeig doch mal was Du bis jetzt so gemacht hast, und wo das klemmt bzw. was nicht geht.

Freie Tabelle :dann schau Dir Arrays an da kannst Du mit einem Zähler über den Index den Wert eines Elements ausgeben. Überleg Dir wie viele Elenemte (Schritte) du haben willst.




Schlaf aber erst noch mal drüber vieleicht willst Du ja doch ganz was anderes.  

Heinz

postmaster-ino

Hi

Verstanden habe ich Das Ziel nicht wirklich - ABER: Ein Reed-Kontakt prellt wie Sau - eine Entprellung ist Pflicht, sonst zählt das Ding 'sonst was'.

MfG

Mahimus

@Rudispiess: Fang halt mal an mit dem coden. Erstmal nur Taster erkennen, dann Variable hochzählen, dann mit Arrays umgehen. Dann alles zusammen. Das Internet ist voll von Erklärungen für die Teilprobleme.

@augme: Hälst du es wirklich für sinnvoll jemandem einen kompletten Code zu schreiben, der noch nichts vorgelegt hat? Der Lerneffekt ist 0 und mittlerweile kommen ja schon Leute und fordern so etwas ein.


Gruß Max

combie

Quote
mittlerweile kommen ja schon Leute und fordern so etwas ein.
Och....
Das ist ja mal ganz was neues!

Es ist offensichtlich, dass uns die Umstände alleine nicht glücklich oder unglücklich machen.
Es ist die Art unserer Reaktion darauf, die unsere Gefühle bestimmt.

agmue

@augme: Hälst du es wirklich für sinnvoll jemandem einen kompletten Code zu schreiben, der noch nichts vorgelegt hat? Der Lerneffekt ist 0 und mittlerweile kommen ja schon Leute und fordern so etwas ein.
Das ist eine gute Frage.

Jener, dessen Geburt wir gerade mit einem Konsumfest gefeiert haben, hat solche Fragen auch thematisiert. Seine Antworten waren teilweise irritierend, was ich als Aufforderung verstehe, immer wieder neu darüber nachzudenken. Das tue ich auch bei Antworten hier im Forum. Manchmal treffe ich ins Schwarze, meist liege ich daneben, das ist halt so. Mir ist die Vielfalt des Forums wichtig, mal aus der einen, dann aus der anderen Perspektive beleuchtet.

Also ja, ich halte es in diesem Fall für sinnvoll, auch wenn ich nicht sicher bin, ob es auch wirklich sinnvoill ist.
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Rudispiess

Code: [Select]

int messPin = 3;  // PWM Out
int pwrPin =2;    //Versogungsspannung Messgerät
int tasterPin=5;  //Taster für Zähler

void setup(){
pinMode(tasterPin,INPUT);
pinMode(pwrPin,OUTPUT);
  digitalWrite(pwrPin, HIGH);
}

void loop(){
  if (digitalRead(tasterPin)==HIGH)
    analogWrite(messPin,28);
}
   





Hier das was ich bisher gemacht habe, wie gesagt ich bin Anfänger.
Ich verlange keinen fertigen Code.
Meine Idee wäre jetzt mit digitalRed einen Zähler hochzählen zu lassen.
anschließend mit " if zähler xx
                          analogWrite xx

                           if zähler xx
                          analogWrite xx   
                                 
                              usw.

Keine Ahnung ob das so funktioniert oder ob ich diese Idee verwefen soll.



combie

Quote
anschließend mit " if zähler xx
                          analogWrite xx

                           if zähler xx
                          analogWrite xx   
                                 
                              usw.
Nenne ich "if Kaskade".
Stufe ich als "böse" ein, wenn es Alternativen gibt.


Dann doch lieber Ranges in switch/case, oder eine LUT
Es ist offensichtlich, dass uns die Umstände alleine nicht glücklich oder unglücklich machen.
Es ist die Art unserer Reaktion darauf, die unsere Gefühle bestimmt.

harryberlin

" if zähler xx
                          analogWrite xx

                           if zähler xx
                          analogWrite xx   
                                 
                              usw.
"
und das compiliert bei dir? :O
krass

Mahimus

Code: [Select]

int pwrPin =2;    //Versogungsspannung Messgerät
   

Nimm lieber den 5V Pin als Versorgung, der kann mehr Strom ab.



Code: [Select]

  if (digitalRead(tasterPin)==HIGH){
    analogWrite(messPin,28);
}
   

1. Klammern vergessen fürs if, als Anfänger lieber zwei mal in die Doku schauen. Habs korrigiert.

2. Einen Zähler kannst du so noch nicht bauen, der würde ja hochzählen solang du gedrückt hälst, und nicht nur genau 1 Mal. Du musst den Wechsel erkennen von Taster offen zu Taster geschlossen. Stichwort Flankenerkennung.

Die if-Kaskade kannst du finde ich schon machen, funktionieren würde das. Die Werte in einem Array zu speichern würde den Code kürzer machen.


Gruß und Frohes Neues allen!

Go Up