Delay ersetzen und mehreren Tasten Funktionen zuweisen


hi alle,

ich versuche mich gedanklich gerade in den arduino zu bohren.
leider verzweifle ich hier bald, ich steige gerade einfach nicht durch und habe auch nach stundenlangem googeln keinen anderen weg gefunden als mich hier bei euch zu melden.

folgende herausforderung (für mich zumindest  :) ):

- 6 taster
- 1 led
- 6 abläufe

auf jeden taster soll ein ablauf gebracht werden, welcher durch tastendruck einer beliebig anderen taste gewechselt werden soll. als beispiel:

taste 1
  led für 200ms
  led aus für 2000ms

  led für 200ms
  led aus für 2000ms

  led für 200ms
  led aus dauerhaft

taste 2
  led für 200ms
  led aus für 500ms
  led für 200ms
  led aus für 2000ms

  led für 200ms
  led aus für 500ms
  led für 200ms
  led aus für 2000ms

  led für 200ms
  led aus für 500ms
  led für 200ms
  led aus dauerhaft

usw.

wenn ich das mit delay() realisiere ist das zwar funktionstüchtig, jedoch kann ich den ablauf nicht mit tastendruck einer beliebig anderen taste stoppen um dann das andere programm durchlaufen zu lassen.
natürlich habe ich versucht mich mit switch case und blink without delay zu befassen, jedoch steige ich nicht durch.

vielen dank vorab :-)

der code dafür, welchen ich gerade verwende:
code: [select]
const int ledpin = 3;
#include "button.h"
#include "arduino.h"

#define button_pin1 5
#define button_pin2 6
#define button_pin3 7
#define button_pin4 8

#define pullup true        
#define invert true        
#define debounce_ms 20

button mybtn1(button_pin1, pullup, invert, debounce_ms);
button mybtn2(button_pin2, pullup, invert, debounce_ms);
button mybtn3(button_pin3, pullup, invert, debounce_ms);
button mybtn4(button_pin4, pullup, invert, debounce_ms);

void setup()
{
 pinmode(ledpin, output);
}


void loop()
{
   mybtn1.read();
   mybtn2.read();
   mybtn3.read();
   mybtn4.read();
   
   if (mybtn1.wasreleased()) {  
   pulse1();  
 }                    
   if (mybtn2.wasreleased()) {      
   pulse2();  
   }                
   if (mybtn3.wasreleased()) {      
   pulse3();
   }                        
   if (mybtn4.wasreleased()) {    
   pulse4();  
}
}



void pulse1()
{
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);  

 delay(2000);

digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);

 delay(2000);

digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
}

void pulse2()
{
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay(400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
 
 delay(2000);

digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay(400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
 
 delay(2000);

digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay(400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
}

void pulse3()
{
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay(400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay (400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);

 delay(2000);

digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay(400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay (400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);

 delay(2000);

digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay(400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay (400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
}

void pulse4()
{
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay(400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay (400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay (400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);

 delay(2000);

digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay(400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay (400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay (400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);

 delay(2000);

digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay(400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay (400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
delay (400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
}

void pulse5()
{
digitalwrite(ledpin, high);
delay(600);
digitalwrite(ledpin, low);
 
 delay(2000);

digitalwrite(ledpin, high);
delay(600);
digitalwrite(ledpin, low);
 
 delay(2000);

digitalwrite(ledpin, high);
delay(600);
digitalwrite(ledpin, low);
}

void pulse6()
{
digitalwrite(ledpin, high);
delay(600);
digitalwrite(ledpin, low);
delay (400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
 
 delay(2000);

digitalwrite(ledpin, high);
delay(600);
digitalwrite(ledpin, low);
delay (400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
 
 delay(2000);

digitalwrite(ledpin, high);
delay(600);
digitalwrite(ledpin, low);
delay (400);
digitalwrite(ledpin, high);
delay(200);
digitalwrite(ledpin, low);
}

wir sehen deinen sketch (code-tags verwenden) nicht.
wie sollen wir helfen ?


Arduino Forum > International > Deutsch (Moderator: uwefed) > Delay ersetzen und mehreren Tasten Funktionen zuweisen


arduino

Comments

Popular posts from this blog

Error compiling for board Arduino/Genuino Uno.

Installation database is corrupt

esp8266 (nodemcu 0.9) client.write très lent ???