Noob question :)
Moderators: Chuckt, Garth, bitfogav
- odessa
- I practically live here!
- Posts: 102
- Joined: Thu Sep 09, 2010 6:06 am
- Location: London [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable
Noob question :)
Hi all,
Right .... I'm using Swordfish ( and Proton as well ) to brush up my Basic programming skills..
What I would like to know is how do I get my program to watch for a button press continually ?
I can add lines in code to see if a button is pressed or not but its not an effecient way to do it as its all dependant on where that line is.
Is there a way I can use code to constantly be looking for a button press no matter where my code is at ?
Thanks
Jay
Right .... I'm using Swordfish ( and Proton as well ) to brush up my Basic programming skills..
What I would like to know is how do I get my program to watch for a button press continually ?
I can add lines in code to see if a button is pressed or not but its not an effecient way to do it as its all dependant on where that line is.
Is there a way I can use code to constantly be looking for a button press no matter where my code is at ?
Thanks
Jay
(\_/)
(='.')
(")-(")
This is a bunny, copy bunny into your signature to help him achieve world domination.
(='.')
(")-(")
This is a bunny, copy bunny into your signature to help him achieve world domination.
Re: Noob question :)
Hi Jay
Sounds to me like you might need to look at using an Interrupt maybe?, this could be used to continually call a subroutine which checks your button, it depends on your programming structure. feel free to post your code so we can see what you are trying to achieve, but you could take a look at this website which has plenty of code examples and lots of information..
http://www.digital-diy.com
Sounds to me like you might need to look at using an Interrupt maybe?, this could be used to continually call a subroutine which checks your button, it depends on your programming structure. feel free to post your code so we can see what you are trying to achieve, but you could take a look at this website which has plenty of code examples and lots of information..
http://www.digital-diy.com
- brad
- Site Admin
- Posts: 2578
- Joined: Fri Mar 26, 2010 10:30 pm [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable
Re: Noob question :)
Interrupts are certainly the way to go if you want it to always be checking. However, I have had no problems with just calling a routine. This is because, it calls the routine and checks the buttons and a much faster rate than I could ever press and release a button.
What were you planning on using it for?
What were you planning on using it for?
- odessa
- I practically live here!
- Posts: 102
- Joined: Thu Sep 09, 2010 6:06 am
- Location: London [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable
Re: Noob question :)
Cheers Guys,
All I'm doing at the moment is making leds chase in patterns, strobe, using a PWM code etc etc ... just messing about really. I found out how to use the button commands within Proton which is amazingly easy compared to asm when it comes to debouncing etc.
I'm using a button to switch between routines which works fine except when a delay is used in a routine, especially in the PWM code as while it delays its not checking for a button press. I kind of guessed I would need to look at interupts, and the Digital-DIy site covers that I see
I'm not building anything solid at the moment, just having fun learning
I must say ..... using basic is AMAZING !!!!!!!!!!
After about an hour reading the Digital DIY guides I can now connect an LCD to my pic and display anything I want on it ... in Text or Dec... WOW
I made a times table calculator and a simple thermometer using a themistor ( and some ifffy guess conversion code lol ) but WOW .... It really is amazing
It really has opened up some amazing possibilties after using assembly
Jay
All I'm doing at the moment is making leds chase in patterns, strobe, using a PWM code etc etc ... just messing about really. I found out how to use the button commands within Proton which is amazingly easy compared to asm when it comes to debouncing etc.
I'm using a button to switch between routines which works fine except when a delay is used in a routine, especially in the PWM code as while it delays its not checking for a button press. I kind of guessed I would need to look at interupts, and the Digital-DIy site covers that I see
I'm not building anything solid at the moment, just having fun learning
I must say ..... using basic is AMAZING !!!!!!!!!!
After about an hour reading the Digital DIY guides I can now connect an LCD to my pic and display anything I want on it ... in Text or Dec... WOW
I made a times table calculator and a simple thermometer using a themistor ( and some ifffy guess conversion code lol ) but WOW .... It really is amazing
It really has opened up some amazing possibilties after using assembly
Jay
(\_/)
(='.')
(")-(")
This is a bunny, copy bunny into your signature to help him achieve world domination.
(='.')
(")-(")
This is a bunny, copy bunny into your signature to help him achieve world domination.
- brad
- Site Admin
- Posts: 2578
- Joined: Fri Mar 26, 2010 10:30 pm [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable
Re: Noob question :)
It is a fantastic language and certainly a breath of fresh air compared to working with assembly
Now as for your buttons, What is the delay for? Is the delay there to debounce the buttons? If so, this is the way I go about debouncing buttons:
I have taken just a small snippet of code from one of my games and cut out the fat. But when it calls the button routine it first checks to see if a button is pressed (in my case it's looking for a logic 0 because that's how I have wired up my hardware) If the button IS pressed AND the button delay is zero then it will accept the press and do accordingly.
Each time the button is pressed, it loads up the button_delay variable which will then prevent the button press from being accepted for a pre-determined period of time. However it does not stop the rest of the program running like calling a delay would.
Now as for your buttons, What is the delay for? Is the delay there to debounce the buttons? If so, this is the way I go about debouncing buttons:
Code: Select all
Sub check_buttons()
If left = 0 And button_delay = 0 Then
inc(moved_spaces)
button_delay = 15
EndIf
If button_delay <> 0 Then
Dec(button_delay)
EndIf
End Sub
Each time the button is pressed, it loads up the button_delay variable which will then prevent the button press from being accepted for a pre-determined period of time. However it does not stop the rest of the program running like calling a delay would.
- odessa
- I practically live here!
- Posts: 102
- Joined: Thu Sep 09, 2010 6:06 am
- Location: London [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable
Re: Noob question :)
Hi Brad
What I mean is if my program has a delay to run an led sequence ie: led1=1 delayms 500, then for 500ms i cant monitor what my button is doing.
The debounce is all built in on Proton with the button command:
Its a bit like the btfss and btfsc in assembler, the variables are for repeat ( 255 = none ) 250 for count etc etc ...
which makes things very easy
What I mean is if my program has a delay to run an led sequence ie: led1=1 delayms 500, then for 500ms i cant monitor what my button is doing.
The debounce is all built in on Proton with the button command:
Code: Select all
buttonloop:
Button PORTB.3,0,255,250,btnvar,0,NoPress
GoTo flash
NoPress:
GoTo buttonloop
which makes things very easy
(\_/)
(='.')
(")-(")
This is a bunny, copy bunny into your signature to help him achieve world domination.
(='.')
(")-(")
This is a bunny, copy bunny into your signature to help him achieve world domination.
- brad
- Site Admin
- Posts: 2578
- Joined: Fri Mar 26, 2010 10:30 pm [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable
Re: Noob question :)
Yes I see now!
You're absolutely correct, if you have a delay like that then nothing else can be happening (including checking for a switch press)
Just as has been said, interrupts are certainly the way to go, no matter what was happening in your project, if it sensed an interrupt (via the switch) then it would stop whatever it was doing, service the interrupt and then go back to whatever it was doing.
Digital-diy.com has loads of great code examples, I am sure they would be in the know about this task.
The only other way I could think of at the moment would be something like this:
this piece of code doesn't actually use a delay where everything actually has to stop. it has a led_delay variable that is always counting down from 2000 (i just picked a number off the top of my head...) it then checks to see if the number is greater than or less than 1000. one way or the other the led will be either on or off. it then checks to the button and performs whatever functions there.
So you effectively get the same result, without using interrupts and with great accuracy as to the detection of a button press.
You're absolutely correct, if you have a delay like that then nothing else can be happening (including checking for a switch press)
Just as has been said, interrupts are certainly the way to go, no matter what was happening in your project, if it sensed an interrupt (via the switch) then it would stop whatever it was doing, service the interrupt and then go back to whatever it was doing.
Digital-diy.com has loads of great code examples, I am sure they would be in the know about this task.
The only other way I could think of at the moment would be something like this:
Code: Select all
while true
if led_delay > 1000 then
led = 1
elseif led_delay < 1000 then
led = 0
endif
dec(led_delay)
if led_delay = 0 then
led_delay = 2000
endif
if button = 1 then
do whatever...
endif
wend
this piece of code doesn't actually use a delay where everything actually has to stop. it has a led_delay variable that is always counting down from 2000 (i just picked a number off the top of my head...) it then checks to see if the number is greater than or less than 1000. one way or the other the led will be either on or off. it then checks to the button and performs whatever functions there.
So you effectively get the same result, without using interrupts and with great accuracy as to the detection of a button press.
- odessa
- I practically live here!
- Posts: 102
- Joined: Thu Sep 09, 2010 6:06 am
- Location: London [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable
Re: Noob question :)
Thats a clever way of doing it !
I can see I'll need to look at interupts though, I have been reading loads on the Digital DIY site .... Its excellent, and very friendly for noobs too
Its really great seeing different ways of coding and improving the code too
Basic is def the the way forward for I think... I'm playing with both Proton and Swordfish which are similar enough not to be too confusing. I chose Proton as well as Swordfish as it supports lots
of my smaller chips which are great for smaller projetcs
I'm finding so much dropping into place now its great, Thanks for your help
I can see I'll need to look at interupts though, I have been reading loads on the Digital DIY site .... Its excellent, and very friendly for noobs too
Its really great seeing different ways of coding and improving the code too
Basic is def the the way forward for I think... I'm playing with both Proton and Swordfish which are similar enough not to be too confusing. I chose Proton as well as Swordfish as it supports lots
of my smaller chips which are great for smaller projetcs
I'm finding so much dropping into place now its great, Thanks for your help
(\_/)
(='.')
(")-(")
This is a bunny, copy bunny into your signature to help him achieve world domination.
(='.')
(")-(")
This is a bunny, copy bunny into your signature to help him achieve world domination.
Re: Noob question :)
Ive done the same as you Jay, Ive got proton and swordfish, they work almost similar, its just some of the syntax that are different eg:odessa wrote: Basic is def the the way forward for I think... I'm playing with both Proton and Swordfish which are similar enough not to be too confusing. I chose Proton as well as Swordfish as it supports lots
of my smaller chips which are great for smaller projetcs
Code: Select all
while 1=1
Code: Select all
while true
Who is online
Users browsing this forum: No registered users and 3 guests