Gordons Projects

--> Projects Top-Level GIT

Removed some old files
[pibrella] / wire.c
1 /*
2  * wire.c:
3  *      Guide a loop along a wire without touching it.
4  *      Copyright (c) Gordon Henderson, 2014
5  ***********************************************************************
6  *    This is free software: you can redistribute it and/or modify
7  *    it under the terms of the GNU Lesser General Public License as published by
8  *    the Free Software Foundation, either version 3 of the License, or
9  *    (at your option) any later version.
10  *
11  *    This is distributed in the hope that it will be useful,
12  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *    GNU Lesser General Public License for more details.
15  *
16  *    You should have received a copy of the GNU Lesser General Public License
17  *    along with This.  If not, see <http://www.gnu.org/licenses/>.
18  ***********************************************************************
19  */
20
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <unistd.h>
24 #include <math.h>
25
26 #include <wiringPi.h>
27
28 #include "pibrella.h"
29
30
31 static void debounce (int pin)
32 {
33   for (;;)
34   {
35     while (digitalRead (pin) == 1)
36       delay (1) ;
37
38     delay (20) ;
39
40     if (digitalRead (pin) == 0) // Clear
41       break ;
42   }
43 }
44
45 /*
46  * main:
47  ***********************************************************************
48  */
49
50 int main (void)
51 {
52   int touches ;
53
54   wiringPiSetup () ;
55   pibrellaSetup () ;
56
57 // We start with all LEDs off and ready to go. The button on the Pibrella
58 //      acts as the reset button
59
60   for (;;)
61   {
62     touches = 0 ;
63     digitalWrite (PIBRELLA_GREEN,  0) ;
64     digitalWrite (PIBRELLA_YELLOW, 0) ;
65     digitalWrite (PIBRELLA_RED,    0) ;
66     playTone (0) ;
67
68 // Wait for the wire to be clear
69
70     printf ("Waiting for the wire to be clear...\n") ;
71
72     if (digitalRead (PIBRELLA_IN_A) == 1)
73     {
74       digitalWrite (PIBRELLA_RED, 1) ;
75       debounce (PIBRELLA_IN_A) ;
76     }
77     digitalWrite (PIBRELLA_RED, 0) ;
78
79 // OK. Ready to roll
80
81     printf ("OK. Ready to play!\n") ;
82
83     for (;;)
84     {
85       if (digitalRead (PIBRELLA_BUTTON) == 1)   // Big Red Reset Button
86         break ;
87
88       if (digitalRead (PIBRELLA_IN_A) == 1)     // Touched
89       {
90         ++touches ;
91         printf ("Touched! Touch number: %d\n", touches) ;
92
93         playTone (1000) ;
94
95         if (touches == 1)
96           digitalWrite (PIBRELLA_GREEN, 1) ;    //      First life gone
97
98         if (touches == 2)
99           digitalWrite (PIBRELLA_YELLOW, 1) ;   //      Second life gone
100
101         if (touches == 3)
102           digitalWrite (PIBRELLA_RED, 1) ;      //      Third life gone
103
104         if (touches == 4)
105         {
106           delay (100) ;
107           playTone (250) ;
108           break ;
109         }
110
111         delay (100) ;
112         playTone (0) ;
113
114         debounce (PIBRELLA_IN_A) ;
115       }
116     }
117
118 // Broken out - game over or we've hit the reset button
119
120     if (digitalRead (PIBRELLA_BUTTON) == 1)     // Big Red Reset Button
121     {
122       playTone (0) ;
123       debounce (PIBRELLA_BUTTON) ;
124       continue ;
125     }
126
127 // Game over
128
129     for (;;)
130     {
131       playTone (1000) ;
132       delay (100) ;
133       if (digitalRead (PIBRELLA_BUTTON) == 1)   // Big Red Reset Button
134         break ;
135
136       playTone (500) ;
137       delay (100) ;
138       if (digitalRead (PIBRELLA_BUTTON) == 1)   // Big Red Reset Button
139         break ;
140     }
141
142     playTone (0) ;
143   }
144
145   return 0 ;
146 }