PWM zeitverzögert ausgeben

 TCCR2A= _BV(WGM21) | _BV(WGM20) | _BV(COM2A1) | _BV(COM2B1)| _BV(COM2A0)| _BV(COM2B0);

Beide Signale invertiert.

ja jetzt klpppt es , habe den fehler :)

könntest du mir ein tip geben wie ich die tasten entrprellen kann? mit der entrpellung die ich versucht habe funkioniert es nicht. ich muss die taste gedrückt halten damit es augelöst wird.

Hallo, das mit den tasten hat jetzt geklappt, ich hab jetzt ein problem mit der zählerschleife

for (Zeit = 0; Zeit >= 20; Zeit++) { if (taster2status == HIGH) {

Zeit++; } else if (taster3status == HIGH) {

Zeit--; } else if (taster5status == HIGH) {

Zeit; break; } break;

ich will die zeit mit der taste 5 bestätigen und damit soll dann ein neues Signal ausgegeben werden wie mache ich das am besten? der speichert mir die zeit nicht ab und gibt auch nicht den neuen signal aus. was kann ich machen?

hat keiner ein tipp für mich wie ich das machen kann? :(

Bitte benutze die Code-Tags </>.

Deine Logik zur Tastenabfrage ist mir schleierhaft, wozu die for Schleife? Schmeiß die erst mal raus.

Dann dürfte Zeit immer noch beim Drücken von Taste 2 oder 3 gleich an den Anschlag laufen, weil loop() viel zu schnell und oft abläuft. Wenn so eine Taste erkannt wurde (Flag tasterXstatus gesetzt), dann nach dem Ändern von Zeit das Flag zurücksetzen. Vor dem nächsten Setzen bzw. Abfragen eine Pause einlegen, oder die Entprellzeit auf 500-1000ms hochsetzen.

Wenn die neue Zeit erst mit Taste 5 aktiviert werden soll, brauchst Du dafür zwei Variablen. Eine für den Code, der die Ausgabe macht, und eine die mit den Tasten geändert wird. Dann mit Taste 5 den geänderten Wert in die Variable für die Ausgabe schreiben.

"ich hab ein problem mit der zählerschleife "

dass ich nicht verstehe, was sie soll ausser dass zeit=0 gesetzt wird.
Selbst wenn du die PrüfBedingung auf …;zeit<=20;… änderst, macht sie Unsinn und ist sowieso unsinnig, weil es keinen Grund gibt, das in was sie tut, in einer Schleife zu tun.

Willst du, während ein Taster gedrückt ist, langsam den Wert von zeit zwischen 0 und 20 verstellen?
Dafür musst du erstmal langsam werden, und z.B. alle 100 mszeitum 1 verändern, falls dann der Taster noch gedrückt und der Anschlag noch nicht erreicht ist.
In der Zeit kannst du ein paar Millionen mal loop komplett durchlaufen haben ( ohne eigene for Schleife ).
Deine (bzw. combies) Timer Geschichte läuft sowieso weiter, bis du die Werte anpasst. Was du aber, (wenn Taster5 gedrückt ist) auch nur einmal machen solltest, bis oder wenn der Taster wieder losgelassen wurde …

ja ich habe den fehler entdeckt, danke.

ich hab versucht ein I2C display zu programmieren, alles ist ok er wird auch erkannt. Habe nur das Problem wenn ich die Tasten 2-5 betätige, das da nichts mehr passiert,woran kann das liegen? die anweisung von taste1 funkioniert aber noch.

const int Taster1 = 2;     
const int Taster2 = 4;      
const int Taster3 = 7;      
const int Taster4 = 8;      
const int Taster5 = 12;     
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

das hat sich erledigt habe den fehler entdeckt und behoben :)

Hallo,

ich hänge immer noch daran das ich eine variable an einem LCD wieder gebe, mit den befehl lcd.print() funktioniert das nicht. ich will die variable die ich mit der taste xy bestimme auf meine lcd wiedergeben, wie soll das funkitoniere?
mit den befehl lcd.print("…") passiert nur die … das will ich aber net so haben .
Könnt ihr mir Bitte helfen?

danke

lcd.print("...") passiert nur die ... das will ich aber net so haben

;D ;D

Dann darfst du es auch nicht so programmieren.

Als ernsthafter Tip: das print ist das gleiche wie bei Serial und sonstwo. Damit kann man sehr elegant auch Werte von Variablen ausgeben...

könntest du mir ein beispiel zeigen? ich hab gerade gar keine idee wie ich das machen könnte

Hä?

   int wert;  // Variablendefinition
   wert = 123;  // Wertzuweisung
   lcd.print(wert);  // Verwendung in print

ich hab das so versucht, hat bei mir nicht geklappt , ich versuch das nochmal. vlt hat er etws nicht richtig erkannt.

danke dir