Concept device voor studie

Hi allemaal,

Ik ben voor mijn studie bezig met een prototype maken van een om de pols gedragen ‘device’. Het device heeft een led die tussen groen en rood wisselt, een vibrating motor en 2 buttons. Ik ben niet heel erg handig met arduino dus ik hoop dat iemand misschien een oplossing weet. Ik programmeer een Seeeduino Lotus met Groove componenten

Wat er moet gebeuren:

  • Led moet op groen blijven staan en na een aantal seconde gaan trillen
  • Dan kan er gekozen worden om het trillen te ‘snoozen’ en de led blijft groen, waarna het weer naar het begin stadium begint: een groen led en na een tijdje weer trillen
  • Of er kan gekozen worden om het trillen te stoppen en het led wordt rood, daarna zal het ook weer naar het begin statium terug gaan.

Nu is het probleem dat een interrupt middenin mijn loop stop (dus midden in het trillen) en dan daarna daar weer verder gaat. Ik wil juist graag de de hele interrupt wordt gedaan en dat daarna het programma weer begint bij het het begin van de loop.

De code:

#include <ChainableLED.h>

int button1 = 3;
int button2 = 2;
int ledpin1 = 4;
int ledpin2 = 5;
int vibratingmotor = 6;
int numLeds = 1;

ChainableLED leds(ledpin1, ledpin2, numLeds);

void setup()
{
//leds.init();
pinMode(button1,INPUT);
pinMode(button2,INPUT);
pinMode(vibratingmotor,OUTPUT);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
attachInterrupt(digitalPinToInterrupt(3),InterruptFunction1, HIGH);
attachInterrupt(digitalPinToInterrupt(2),InterruptFunction2, HIGH);
}

void loop()
{
leds.setColorRGB(0, 0, 255, 0);
delay (10000);
digitalWrite(vibratingmotor, HIGH);
delay (500);
digitalWrite(vibratingmotor, LOW);
delay (250);
digitalWrite(vibratingmotor, HIGH);
delay (500);
digitalWrite(vibratingmotor, LOW);
delay (250);
digitalWrite(vibratingmotor, HIGH);
delay (500);
digitalWrite(vibratingmotor, LOW);
delay (250);
digitalWrite(vibratingmotor, HIGH);
delay (500);
digitalWrite(vibratingmotor, LOW);
delay (250);
digitalWrite(vibratingmotor, HIGH);
delay (500);
digitalWrite(vibratingmotor, LOW);
delay (250);
digitalWrite(vibratingmotor, HIGH);
delay (500);
digitalWrite(vibratingmotor, LOW);
delay (250);
digitalWrite(vibratingmotor, HIGH);
delay (500);
digitalWrite(vibratingmotor, LOW);
delay (250);
digitalWrite(vibratingmotor, HIGH);
delay (500);
digitalWrite(vibratingmotor, LOW);
}

void InterruptFunction1 (){
digitalWrite(vibratingmotor, LOW);
leds.setColorRGB(0, 255, 0, 0);
delay(10000);

}

void InterruptFunction2 (){

digitalWrite(vibratingmotor, LOW);
leds.setColorRGB(0, 0, 255, 0);
delay (10000);
}

Hallo,

Wat is het nut van die LED en trilmotor? Als ik u was zou ik eens kijken naar een ESP32 of ESP8266. Die zijn kleiner en kunnen toch geprogrammeerd worden via de Arduino IDE. ikzelf heb gisteren een deauth horloge ontvangen, en het werkt zeer goed, en het is heel compact. Nu snap ik ook wel dat je klein moet beginnen, maar sommige dingen werken inspirerend.

Veel succes,

Mike

Hoi jobdieben, welkom.

Schijnbaar duurde het te lang voor er een antwoord kwam hier in het Nederlandstalige deel, dus moest dezelfde vraag na 20 minuten opnieuw in het Engelstalige deel gesteld worden (klik !)
Daar staat al een antwoord op je vragen waar voldoende uitgelegd is wat er mis gaat, en dat je absoluut geen interrupts nodig hebt voor wat je wil doen.
En dan weet degene die je vraag beantwoord, net als ik, helemaal niet wat je wil doen want das nog geheim.

Ik kan je nog aanraden eerst eens een hele hoop te lezen hier op het forum, dan pas verder te gaan met het uitwerken van je code.
Kijk onderaan welk van mijn berichten ook, en hier in het NL deel naar de berichten die bovenaan vastgezet zijn met een punaise, das alvast een begin.

een inetrupt moet bijvoorbeeld een vlagje bevattendat de knop is bediend, en verder niets, en verder in de loop kun je dan iets doen met die vlag zoals een motor aan of uitzetten.
haal alle delays eruit, want daarop stopt je programma en los dat op met timers, zoals beschreven in blink without delay.