Hi Folks,
currently I'm trying adapt this touch switch code which I found in code examples (http://www.picbasic.co.uk/forum/showthread.php?t=2671)
The code is works fine as is, but I need to modify it to respond only to one input pin GPIO.0 I don't need three inputs.
Here is my modified code (not working):
Code:
' Few cents touch sensor
' ======================
' Using : PIC12F683
'
' Circuit is quite simple. One pin(GP4) is used as a signal generator.
' This pin send signal to all "virtual push button" (GPIO<2:0>)
' via 3 X 22K resistor. The touch sensor could be almost everything
' conductive.
'
' Once a sensor is touched, the program will blink a LED as follow
' GPIO.0 => 1 Blink
' GPIO.1 => 2 Blink
' GPIO.2 => 3 Blink
' PIC config and programming mode
' ===============================
#CONFIG
cfg = _INTOSCIO
cfg&= _WDT_OFF
cfg&= _PWRTE_OFF
cfg&= _MCLRE_OFF
cfg&= _CP_OFF
cfg&= _CPD_OFF
cfg&= _BOD_OFF
cfg&= _IESO_OFF
cfg&= _FCMEN_OFF
__CONFIG cfg
#ENDCONFIG
DEFINE OSC 4 ; Use a 4 MHZ internal clock
ANSEL = 0
CMCON0 = 7
TRISIO = %000001 ;gpio0 input rest output
' I/O Alias definition
' ====================
'
LED VAR GPIO.5
Generator var GPIO.4
' Hardware definition
' ===================
'
' Variable definition
' ===================
'
Sensor var byte
Looop var byte
' EEPROM assignement
' ==================
'
data @3,3,0,2,1 ' table to convert 'Sensor' variable result to according
' LED blink. See Result list bellow
' Software/hardware initialisation
' ================================
'
led = 0
generator = 0
Start:
' Short explanation of the whole thing.
' 1. Send a high level to all sensor input => GPIO<2:0>
' 2. Read GPIO port
' 3. Send a low level to all sensor input
' 4. Keep only GPIO<2:0> bits
' 5. Test result
'
' If no sensor has been touched, the result will be 7 => 0000 0111, case
' else, the body capacitance will introduce sufficient delay between
' step 1 and 2 wich will keep the according bit to 0.
'
' Results will be as follow
' NoSensor => 0000 0111 => 7
' GPIO.0 => 0000 0110 => 6
' GPIO.1 => 0000 0101 => 5
' GPIO.2 => 0000 0011 => 3
'
repeat
Generator = 1 ' enable sensor power
Sensor = GPIO ' read sensor
Generator = 0 ' disable sensor power
Sensor = Sensor & %000001 ' keep only Sensor bits HERE I CHANGE VALUE FROM 7 (0111) TO 1 (0001)
until Sensor != %000001 ' redo the test untill one sensor is touch HERE I CHANGE VALUE FROM 7 (0111) TO 1 (0001)
'
' Now we will flash an LED to confirm wich sensor has been touch
' GPIO.0 => 1 Blink
' GPIO.1 => 2 Blink
' GPIO.2 => 3 Blink
'
read sensor,looop ' convert result to blink
repeat
LED = 1
PAUSE 200
lED = 0
PAUSE 200
looop = looop - 1
until looop = 0
goto start ' do it again...
What I overlooked in the code? Can someone point me when I'm wrong? Thanks.
Bookmarks