we interrupt this program without an interrupt

algemene C code
Berichten: 133
Geregistreerd: 10 Jan 2016, 16:39

we interrupt this program without an interrupt

Berichtdoor Nightmystic » 19 Feb 2016, 09:55

Ik gebruik de ClickButton library.

Terwijl de code afgedraaid wordt in de for loop werkt de knop niet.

Een interrupt voor zover ik er van weet en gezien heb, kan altijd onderbreken maar keert daarna naar de plaatst in de code terug die de arduino aan het afdraaien was.

Nu had ik de code van de knop in de for loop geplaatst die ik wil kunnen stoppen om naar een andere case te gaan, maar dat werkt niet.

cpp code
for(int led = 0; led<=15; led++) // Er zijn zestien leds, laat ze oplopend aan gaan
{
for(int z=0;z<255;z++) // Bij 255 is een kleur het meest aanwezig
{
knop1.Update(); // check of de knop ingdrukt wordt

if(knop1.clicks == 1)
{
LEDS = LEDS + 1; // Ga 1 programma verder
break;
}
delay(ledSpeed/100); // Snelheid waarmee de led maximaal paars wordt.
ShiftPWM.SetRGB(led,z,z,z);// RGB kleur instellen, nummer van de led, R, G, B
}
}


Is er een manier om dit toch voor elkaar te krijgen?

Advertisement

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: we interrupt this program without an interrupt

Berichtdoor shooter » 19 Feb 2016, 10:42

die break geldt uiteraard maar voor 1 loop, en jij hebt er twee, dus hetzelfde stukje nog een keer VOOR de laatste } zou genoeg moeten zijn.

als je dit soort bijdenksels doet, prima, maar realiseer je wel dat je dan snel in problemen komt.
ik doe het altijd even proberen buiten mijn programma in een andere ide (en zelfs op een andere uno,

opdracht:
herschrijf het programma zodat de loop telkens een stapje doet ipv dat je nu dus 15*255 door deze loop moet voordat je iets anders kunt doen.
ofwel gebruik 2 tellers en doe dan in je loop telkens een call naar deze functie.
voor de toekomst zorgen dat de loop heel vaak wordt gedaan. dan kun je dus allerlei processen bijna parallel draaien.
paul deelen
shooter@home.nl

Berichten: 133
Geregistreerd: 10 Jan 2016, 16:39

Re: we interrupt this program without an interrupt

Berichtdoor Nightmystic » 19 Feb 2016, 20:52

Is dit wat je bedoeld? Nu kan ik makkelijk op de knop drukken en het programma onderbreken.

cpp code
int ledfelheidX = 0;
int ledfelheidY = 0;
int ledUp = 0;

ShiftPWM.SetHSV(ledUp, 240, ledfelheidX, ledfelheidY);
ledfelheidXup();
ledfelheidYup();

if ((ledfelheidX > 255) && (ledfelheidY > 255))
{
volgendeLed();
ledfelheidX = 0;
ledfelheidY = 0;
}

if (ledUp > 15)
{
ledUp = 0;
}

void ledfelheidXup()
{
ledfelheidX = ledfelheidX + 1;
}

void ledfelheidYup()
{
ledfelheidY = ledfelheidY + 1;
}

void volgendeLed()
{
ledUp = ledUp + 1;
}

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: we interrupt this program without an interrupt

Berichtdoor shooter » 20 Feb 2016, 11:31

ja zo bedoelde ik het,
echter de testen zou ik in de up zetten dus testen of deze > zo ja dan terug naar 0 anders +1
en deze blijft dus doorlopen, dus een test als je aan het einde ben is nodig, ofwel die eerste if uitbreiden met de ledup
paul deelen
shooter@home.nl

Berichten: 133
Geregistreerd: 10 Jan 2016, 16:39

Re: we interrupt this program without an interrupt

Berichtdoor Nightmystic » 20 Feb 2016, 12:39

Fijn! :D
Thanks Paul!

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten