Beste mensen,

Ik ben pas begonnen met het leren programmeren van microcontrollers.

Nu ben ik voor mezelf bezig met het uitzoeken van het jal programma en verschillende simpele programmatjes maken.

Nu ben ik dus al enkele dagen bezig om uit te zoeken hoe ik via 1 schakelaar verschillende loops te starten, alleen kom ik hier helaas nog niet uit en zou ik jullie willen vragen wie mij er mee kan helpen.

dus wat ik bedoel.
1 x drukken is de eerste loop starten.
loop start zich.
nu druk ik vervolgens nog een x en de 2de loop start, enz.

Alvast erg bedankt voor de moeite!

Dan moet je er een tellertje in proggen ;) (ben niet bekend met jal, maar zal wel ongeveer hetzelfde zijn als basic :) )


forever loop
if (button == high) then
  forever loop
   programma
   if (button == high) then
     exit loop
   end if
  end loop
  forver loop
   programma 2
   if (button == high) then
      ...
end if
end loop

Snel in mekaar gebokst, ik weet niet zeker of het zal werken.
Ik ben zelf ook aan het proberen om met JAL te programmeren...
Laat me iets weten of het werkt, maar het concept is redelijk eenvoudig.
Je zou ook met interrupts kunnen werken, maar daar ben ik nog lang niet aan toe!

Na het gebruik van de knop wel controleren of de knop eerst weer uit is geweest en daarop eventueel wachten ivm kontaktdender. Anders schiet hij in bovenstaand voorbeeld direkt door in het programma naar via de exit naar deel 2.

voorbeeld;
while button==1 loop
end loop
delay_1ms(1)

Hey bedankt heren tot zover, ik ga er morgen gelijk mee stoeien. Ik laat wel even weten of het gelukt is.

tokesnugert, succes verder met het uitvogelen met JAL.

groeten

Contactdender kan je ook wegwerken door een klein tantaaltje toe te voegen aan de schakeling.
En anders gewoon in elke


if (button==high) then
delay_1ms(5)
Programma
...

Zo geef je de code 5ms de tijd om (hopelijk) voorbij de contactdender te geraken
En zoek ook even uit of je switch Active High of Active Low geschakeld is...

[Bericht gewijzigd door Phalox op (12%)]

Beste tokesnugert,

Ik heb het programmatje nu gemaakt zoals je voorschreef alleen wil het nog niet werken. Hieronder heb ik het programmatje gezet. zou jij er mischien uit kunnen komen. de compiler geeft aan dat hij exit loop en dan met name exit niet kent. het kan ook zijn dat ik ergens anders mischien iets fout heb zitten in het programma.

alvast bedankt!

-- define pins
pin_a3_direction = output
pin_d1_direction = input

var bit led is pin_a3
var bit button is pin_d3

forever loop

if (button == high) then

forever loop

led = on
delay_1s(2)
led = off
delay_1s(2)
led = on
delay_1s(2)
led = off
delay_1s(2)
led = on
delay_1s(2)
led = off

if (button == high) then
exit loop

end if
end loop

forever loop

led = on
delay_1s(4)
led = off
delay_1s(4)

if (button == high) then
exit loop
end if
end loop

Mijn excuses, dat was een typfout van mij... het is "end loop" in plaats van "exit loop".
Welke libraries gebruik jij trouwens ?

Heb je het boek pic microcontrollers aangeschaft ? Dan zal je waarschijnlijk ook de bijhorende libraries gebruiken.

Hey ja dat klopt heb inderdaat het het boek aangeschaft.
Zitten leuke projecten in die erg leuk zijn voor de beginneling. en de libaries zijn voor de 16f877.

dit volgende stukje software werkt wel mede dankzij jou en wat gepuzzel. Alleen op een of het andere manier krijg ik als ik de opstelling gemaakt heb alleen na 1 x drukken wel het eerste programma maar weiger hij het 2de programma te starten. heeft dat iets te maken omdat er nog iets niet helemaal logies staat of omdat de microcontrolller zijn standaart ding doet maar niet reageert op de butten terwijl programma 1 loopt want ook als ik heb even ingedrukt hou wil hij niet naar programma 2 gaan.

pin_c1_direction = output
pin_d2_direction = input

var bit led is pin_c1
var bit button is pin_d2

forever loop

if (button == high) then
delay_1ms(5)

forever loop

led = on
delay_1s(1)
led = off
delay_1s(1)
led = on
delay_1s(1)
led = off
delay_1s(1)
led = on
delay_1s(1)
led = off

end loop
end if
end loop

if (button == high) then
delay_1ms(5)

forever loop

led = off

end loop
end if

Even jouw code een beetje stylen!
Probeer tijdens het programmeren dit zeker ook te doen (inspringen enzo, dat maakt het debuggen veel eenvoudiger!)


pin_c1_direction = output
pin_d2_direction = input

var bit led is pin_c1
var bit button is pin_d2

forever loop

if (button == high) then
  delay_1ms(5)

  forever loop

    led = on
    delay_1s(1)
    led = off
    delay_1s(1)
    led = on
    delay_1s(1)
    led = off
    delay_1s(1)
    led = on
    delay_1s(1)
    led = off


  end loop
end if

end loop    -----> Hier houdt je programma op, en gaat terug naar boven. Deze mag dus enkel helemaal op het einde komen


if (button == high) then
  delay_1ms(5)

  forever loop

    led = off

  end loop
end if

Ik weet niet zeker of "Exit loop" werkt, maar dan zou je iets krijgen als dit:


pin_c1_direction = output
pin_d2_direction = input

var bit led is pin_c1
var bit button is pin_d2

forever loop

if (button == high) then
  delay_1ms(5)

  forever loop

    led = on
    delay_1s(1)
    led = off
    delay_1s(1)
    led = on
    delay_1s(1)
    led = off
    delay_1s(1)
    led = on
    delay_1s(1)
    led = off
    if (button == high) then
      delay_1ms(5)
      exit loop
    end if
  end loop
end if

forever loop

  led = off
  delay_1s(1)
  led = on
  if (button == high) then
    delay_1ms(5)
    exit loop
  end if
end loop

Hierbij gaat hij dus eerst controlleren of er een knop wordt ingedrukt, en dan start hij het eerste programma. Maar als er geen knop ingedrukt is, dan gaat hij gewoon verder in de code, en komt hij het tweede programma tegen, zonder dat het eerste uitgevoerd werd. Daarom kan het best nog iets anders:


pin_c1_direction = output
pin_d2_direction = input

var bit led is pin_c1
var bit button is pin_d2

forever loop

while (button == low) loop -- houdt de code vast in deze loop
  delay_1ms(5)
end loop

forever loop -- programma 1
  led = on
  delay_1s(1)
  led = off
  delay_1s(1)
  led = on
  delay_1s(1)
  led = off
  delay_1s(1)
  led = on
  delay_1s(1)
  led = off
  if (button == high) then -- doet de pic uit deze loop stappen
    delay_1ms(5)
    exit loop
  end if
end loop

forever loop -- programma 2
  led = off
  delay_1s(1)
  led = on
  if (button == high) then -- doet de pic uit deze loop stappen
    delay_1ms(5)
    exit loop
  end if
end loop
end loop

Waarom gebruik je in het eerste programma verschillende keren led = on, led = off ?
Het tweede programma zal net hetzelfde doen, maar met minder code.

Ik hoop dat het werkt, ik ga het nu eens proberen compilen :)

Edit: nog een paar foutjes weggewerkt.. code typen zonder kleurtjes is toch niet zo gemakkelijk :)

Edit2: omdat ik met JALv2 werk zijn de libraries wel sterk verschillend. Ook het declareren van de gebruikte µC is anders :) dus bij mij gaf hij nog enkele error's

Edit3: die 'exit loop' lijkt me te werken. ik heb hem net even getest in de code van mijn led kubus waar ik wat mee bezig ben.
Zie: http://www.youtube.com/watch?v=YAndHNG8HgE

Hey bedankt dat je wil helpen uitzoeken. ik zal het vanavond gelijk gaan proberen te complimeren.
Je hebt gelijk over de 2de loop ik bedoelde eigenlijk led off maar dat is een foutje van mij. Ik wil uit eindelijk pwm met led loops gaan maken met verschillende soorten loopjes. snel langazaam. alleen rood dimmen etc. maar vondt het zo makkelijk om uit te zoeken hoe je de met behulp van de switch de loops kan starten.

Die kubus project is ook erg gaaf daar wil ik me ook een x mee bezig gaan houden alleen heb nog geen kaas gegeten van registers maar ja stapje voor stapje.

hey bedankt! je hoordt nog van me of het gelukt is.

Nou het wil echt niet lukken. De exit regel herkent hij niet. en heb zelf egt weer van alles zitten proberen maar het wil niet lukken.

Iemand in deze discussie rade mij ook aan om er een tellertje in mee te proggen maar ook daar kom ik niet egt mee uit.

Nou ik ga nog wat dingen proberen mocht er iemand nog wat tips voor me hebben hoor ik het graag.

Het probleem is dat jij en ik een verschillende library gebruiken. Ik weet niet juist hoe 'exit loop' vertaald wordt in de compiler, maar het kan zijn dat deze in de eerste versie nog niet opgenomen is, of dat deze afhankelijk is van een andere library.

Het beste dat je kan doen is de libraries doorspitten, en eventueel documentatie zoeken van de compiler voor JAL V2

Als noodoplossing kan je ook nog Bert van dam contacteren... de libraries zijn door hem geschreven, hij weet dus ook wat mogelijk is, en wat niet.

Kan je eens zien welke compiler jij hebt ? vanaf 2.4b zou 'exit loop' beschikbaar moeten zijn...

Hey tokesnugerd,
Dat was een hele goede van je heb nu de laatste versie met de nieuwe libs en heb het programmatje even getest op mijn werk en het gaf dit x 0 erros aan , en hij herkende dus exit loop.

kan niet wachten tot ik vanacht thuis ben om het even op de hardware te zetten om te kijken of het werkt.

tanxs man! laat wel even weten of het gelukt is.

Super dat ik kon helpen! Laat zeker ook nog weten wat je nog allemaal van plan bent! Hierdoor leer ik zelf ook heel wat bij :-)

Ikzelf ben aan het uitzoeken hoe ik het beste coordinaten kan toekennen aan de leds in mijn kubus.

Ik ben zelf ook nog op zoek (of zelf iets in mekaar boksen) om nieuwelingen in het JAL gebeuren, zoals jij en ik, samen te brengen in één community!
Jal is niet de eenvoudigste taal, maar je leert zo echt wel werken met een PIC microcontroller!