Make: Electronics by Charles Platt (classic books to read TXT) 📗
- Author: Charles Platt
Book online «Make: Electronics by Charles Platt (classic books to read TXT) 📗». Author Charles Platt
Button number
Range
9
600
71–83
6
700
84–96
3
800
97–108
0
900
109–121
8
1000
122–134
5
1100
135–147
2
1200
148–160
7
1300
161–172
4
1400
173–185
1
1500
191–198
Suppose you attach the common pin of your keypad to ADC Logic Pin 2 of the PICAXE. You can now use the Program Editor to write a program that looks like this:
getkey:
readadc 2,b0
let b1 = 3
if b0 < 115 then finish
readadc 2,b0
let b1 = 6
if b0 < 127 then finish
readadc 2,b0
let b1 = 9
if b0 < 138 then finish
readadc 2,b0
let b1 = 2
if b0 < 149 then finish
readadc 2,b0
let b1 = 5
if b0 < 159 then finish
readadc 2,b0
let b1 = 8
if b0 < 169 then finish
readadc 2,b0
let b1 = 0
if b0 < 179 then finish
readadc 2,b0
let b1 = 1
if b0 < 188 then finish
readadc 2,b0
let b1 = 4
if b0 < 197 then finish
readadc 2,b0
let b1 = 7
if b0 < 210 then finish
goto getkey
finish:
readadc 2,b0
if b0 < 250 then finish
return
What does the word “return” mean at the end? I’ll get to that in a second. I want to explain the rest of the routine first.
b0 receives the value supplied by the analog-digital converter when it looks at the keypad. After storing the number in b0, the routine has to figure out which keypad key it matches. The key identity (0 through 9) will be stored in another variable, b1.
The program starts by assigning value 9 to b1. Then it checks to see whether b0 < 84. This means “if b0 is less than 84.” If it is, then the routine tells the PICAXE to “finish,” which means “jump to the finish: label.” But if b0 is not less than 84, by default the PICAXE continues on to the next line, which makes a second attempt at guessing which key has been pressed. It assigns number 6 to b1. Now there’s another if-then test—and so on. This process of reassigning values to b1 stops only when it gets to the point where b0 is greater than a number in the table.
If you’re familiar with other dialects of BASIC, this may seem a bit laborious to you. You may wonder why we can’t use a statement such as this:
if b0 > 70 and b0 < 84 then b1 = 9
The answer is that PICAXE BASIC isn’t sufficiently sophisticated to allow this. An if-then statement has to result in a jump to another section of the program. That’s the only permitted outcome.
If you don’t have any prior programming experience, the routine may still seem laborious to you, and perhaps a bit puzzling, too. This is understandable, because you’re getting a crash course in software design without any formal preparation. Still, the PICAXE Programming Editor can be a big help, because it has its simulation feature. Before you can use this, though, you have to precede the routine that I just supplied with a control routine that you must type above it. The screenshot in Figure 5-148 shows you how it should look.
Figure 5-147. A quick and simple way of attaching a keypad to provide numeric input to the PICAXE uses a chain of resistors totalling 2,000Ω. When a button is pressed, it connects the ADC input pin to a point in the chain. The resistance detected by the input pin can then be converted by the program in the chip to determine which key has been pressed.
I have chosen an arbitrary combination of 7-4-1 for our combination lock. Using these numbers, the main section of the program looks like this:
main:
low 1
gosub getkey
if b1<>7 then main
gosub getkey
if b1<>4 then main
gosub getkey
if b1<>1 then main
high 1
end
I should explain that the <> pair of symbols mean “is not equal to.” So the fourth line of the program means, “if b1 is not equal to 7.”
The value of b1 is supposed to be 7 if the user is putting in the correct combination. So if it’s not 7, the user has entered the wrong value, and the if-then statement sends the PICAXE back to the beginning. In fact anytime the user inputs a number that is not in the correct 7-4-1 sequence, the program sends the PICAXE back to the beginning. This is the way the pure-hardware version of this experiment was set up.
But what is this word “gosub”? It means “go to a subroutine.” A subroutine is any sequence of program statements that ends with the instruction to “return.” So “gosub getkey” tells the PICAXE to mark its current place in the program while it skips to the getkey: section of code, which it obeys, until it finds the word “return,” which returns it to the place from where it came.
The PICAXE continues in this fashion until it reaches the word “end.” I had to insert the word “end” because otherwise the PICAXE will continue executing the program and will fall into the subroutine. “End” stops it from doing so. Figure 5-148 shows a screenshot of the complete listing.
So—is that all? Yes, that’s it. If you enter the code into the Programming Editor exactly as I have supplied it, you should be able to run it in simulation mode, and in the simulation window, click the right-arrow beside Logical Pin A2 to increase its value in steps. Each time you pass one of the values in the getkey: subroutine, you
Comments (0)