diff options
| author | Abdellah El Morabit <nsrddyn@gmail.com> | 2024-11-05 09:24:48 +0100 |
|---|---|---|
| committer | Abdellah El Morabit <nsrddyn@gmail.com> | 2024-11-05 09:24:48 +0100 |
| commit | 5466f96bd75f602f5b5fd44a7ccee745f2abfca0 (patch) | |
| tree | 52370ece205756f31dce32ddd607d1884ad1e2a0 | |
| parent | 6198d0333d432b4e0dad7e8da2c2395473a12995 (diff) | |
no clue what i did here
| -rw-r--r-- | .DS_Store | bin | 0 -> 6148 bytes | |||
| -rw-r--r-- | .idea/.gitignore | 3 | ||||
| -rw-r--r-- | .idea/inspectionProfiles/profiles_settings.xml | 6 | ||||
| -rw-r--r-- | .idea/misc.xml | 7 | ||||
| -rw-r--r-- | .idea/modules.xml | 8 | ||||
| -rw-r--r-- | .idea/security.iml | 8 | ||||
| -rw-r--r-- | .idea/vcs.xml | 6 | ||||
| -rw-r--r-- | recourses/ .pdf | bin | 0 -> 9311241 bytes | |||
| -rw-r--r-- | recourses/.DS_Store | bin | 0 -> 6148 bytes | |||
| -rw-r--r-- | recourses/.idea/.gitignore | 3 | ||||
| -rw-r--r-- | recourses/.idea/SecuritySystem.iml | 8 | ||||
| -rw-r--r-- | recourses/.idea/inspectionProfiles/profiles_settings.xml | 6 | ||||
| -rw-r--r-- | recourses/.idea/misc.xml | 7 | ||||
| -rw-r--r-- | recourses/.idea/modules.xml | 8 | ||||
| -rw-r--r-- | recourses/Buzzer.py | 56 | ||||
| -rw-r--r-- | recourses/Keypad.py | 202 | ||||
| -rw-r--r-- | recourses/Membrane_Switch_Module.py | 27 | ||||
| -rw-r--r-- | recourses/rpi.pdf | bin | 0 -> 19405814 bytes | |||
| -rw-r--r-- | sec.py | 2 |
19 files changed, 355 insertions, 2 deletions
diff --git a/.DS_Store b/.DS_Store Binary files differnew file mode 100644 index 0000000..0f8dc76 --- /dev/null +++ b/.DS_Store diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ +<component name="InspectionProjectProfileManager"> + <settings> + <option name="USE_PROJECT_PROFILE" value="false" /> + <version value="1.0" /> + </settings> +</component>
\ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..1d3ce46 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Black"> + <option name="sdkName" value="Python 3.13" /> + </component> + <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.13" project-jdk-type="Python SDK" /> +</project>
\ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..20d6502 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/.idea/security.iml" filepath="$PROJECT_DIR$/.idea/security.iml" /> + </modules> + </component> +</project>
\ No newline at end of file diff --git a/.idea/security.iml b/.idea/security.iml new file mode 100644 index 0000000..d0876a7 --- /dev/null +++ b/.idea/security.iml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="PYTHON_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$" /> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module>
\ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="" vcs="Git" /> + </component> +</project>
\ No newline at end of file diff --git a/recourses/ .pdf b/recourses/ .pdf Binary files differnew file mode 100644 index 0000000..9735753 --- /dev/null +++ b/recourses/ .pdf diff --git a/recourses/.DS_Store b/recourses/.DS_Store Binary files differnew file mode 100644 index 0000000..0815a5f --- /dev/null +++ b/recourses/.DS_Store diff --git a/recourses/.idea/.gitignore b/recourses/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/recourses/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/recourses/.idea/SecuritySystem.iml b/recourses/.idea/SecuritySystem.iml new file mode 100644 index 0000000..d0876a7 --- /dev/null +++ b/recourses/.idea/SecuritySystem.iml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="PYTHON_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$" /> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module>
\ No newline at end of file diff --git a/recourses/.idea/inspectionProfiles/profiles_settings.xml b/recourses/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/recourses/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ +<component name="InspectionProjectProfileManager"> + <settings> + <option name="USE_PROJECT_PROFILE" value="false" /> + <version value="1.0" /> + </settings> +</component>
\ No newline at end of file diff --git a/recourses/.idea/misc.xml b/recourses/.idea/misc.xml new file mode 100644 index 0000000..1d3ce46 --- /dev/null +++ b/recourses/.idea/misc.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Black"> + <option name="sdkName" value="Python 3.13" /> + </component> + <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.13" project-jdk-type="Python SDK" /> +</project>
\ No newline at end of file diff --git a/recourses/.idea/modules.xml b/recourses/.idea/modules.xml new file mode 100644 index 0000000..080d960 --- /dev/null +++ b/recourses/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/.idea/SecuritySystem.iml" filepath="$PROJECT_DIR$/.idea/SecuritySystem.iml" /> + </modules> + </component> +</project>
\ No newline at end of file diff --git a/recourses/Buzzer.py b/recourses/Buzzer.py new file mode 100644 index 0000000..8555184 --- /dev/null +++ b/recourses/Buzzer.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python
+
+import RPi.GPIO as GPIO
+import time
+
+# Set #17 as buzzer pin
+BeepPin = 17
+
+def print_message():
+ print("========================================")
+ print ("| Beep |")
+ print ("| ------------------------------ |")
+ print ("| Buzzer connect to GPIO0 |")
+ print ("| |")
+ print ("| Make Buzzer beep |")
+ print ("| |")
+ print ("| |")
+ print ("========================================\n")
+ print 'Program is running...'
+ print 'Please press Ctrl+C to end the program...'
+ raw_input ("Press Enter to begin\n")
+
+def setup():
+ # Set the GPIO modes to BCM Numbering
+ GPIO.setmode(GPIO.BCM)
+ # Set LedPin's mode to output,
+ # and initial level to High(3.3v)
+ GPIO.setup(BeepPin, GPIO.OUT, initial=GPIO.HIGH)
+
+def main():
+ print_message()
+ while True:
+ # Buzzer on (Beep)
+ print 'Buzzer On'
+ GPIO.output(BeepPin, GPIO.LOW)
+ time.sleep(0.1)
+ # Buzzer off
+ print 'Buzzer Off'
+ GPIO.output(BeepPin, GPIO.HIGH)
+ time.sleep(0.1)
+
+def destroy():
+ # Turn off buzzer
+ GPIO.output(BeepPin, GPIO.HIGH)
+ # Release resource
+ GPIO.cleanup()
+
+# If run this script directly, do:
+if __name__ == '__main__':
+ setup()
+ try:
+ main()
+ # When 'Ctrl+C' is pressed, the child program
+ # destroy() will be executed.
+ except KeyboardInterrupt:
+ destroy()
\ No newline at end of file diff --git a/recourses/Keypad.py b/recourses/Keypad.py new file mode 100644 index 0000000..f762b4b --- /dev/null +++ b/recourses/Keypad.py @@ -0,0 +1,202 @@ +#!/usr/bin/env python3 + +import RPi.GPIO as GPIO +import time +#class Key:Define some of the properties of Key +class Key(object): + NO_KEY = '\0' + #Defines the four states of Key + IDLE = 0 + PRESSED = 1 + HOLD = 2 + RELEASED = 3 + #define OPEN and CLOSED + OPEN = 0 + CLOSED =1 + #constructor + def __init__(self): + self.kchar = self.NO_KEY + self.kstate = self.IDLE + self.kcode = -1 + self.stateChanged = False + +class Keypad(object): + NULL = '\0' + LIST_MAX = 10 #Max number of keys on the active list. + MAPSIZE = 10 #MAPSIZE is the number of rows (times 16 columns) + bitMap = [0]*MAPSIZE + key = [Key()]*LIST_MAX + holdTime = 500 #key hold time + holdTimer = 0 + startTime = 0 + #Allows custom keymap, pin configuration, and keypad sizes. + def __init__(self,usrKeyMap,row_Pins,col_Pins,num_Rows,num_Cols): + GPIO.setmode(GPIO.BOARD) + self.rowPins = row_Pins + self.colPins = col_Pins + self.numRows = num_Rows + self.numCols = num_Cols + + self.keymap = usrKeyMap + self.setDebounceTime(10) + #Returns a single key only. Retained for backwards compatibility. + def getKey(self): + single_key = True + if(self.getKeys() and self.key[0].stateChanged and (self.key[0].kstate == self.key[0].PRESSED)): + return self.key[0].kchar + single_key = False + return self.key[0].NO_KEY + #Populate the key list. + def getKeys(self): + keyActivity = False + #Limit how often the keypad is scanned. + if((time.time() - self.startTime) > self.debounceTime*0.001): + self.scanKeys() + keyActivity = self.updateList() + self.startTime = time.time() + return keyActivity + #Hardware scan ,the result store in bitMap + def scanKeys(self): + #Re-intialize the row pins. Allows sharing these pins with other hardware. + for pin_r in self.rowPins: + GPIO.setup(pin_r,GPIO.IN,pull_up_down = GPIO.PUD_UP) + #bitMap stores ALL the keys that are being pressed. + for pin_c in self.colPins: + GPIO.setup(pin_c,GPIO.OUT) + GPIO.output(pin_c,GPIO.LOW) + for r in self.rowPins: #keypress is active low so invert to high. + self.bitMap[self.rowPins.index(r)] = self.bitWrite(self.bitMap[self.rowPins.index(r)],self.colPins.index(pin_c),not GPIO.input(r)) + #Set pin to high impedance input. Effectively ends column pulse. + GPIO.output(pin_c,GPIO.HIGH) + GPIO.setup(pin_c,GPIO.IN) + #Manage the list without rearranging the keys. Returns true if any keys on the list changed state. + def updateList(self): + anyActivity = False + kk = Key() + #Delete any IDLE keys + for i in range(self.LIST_MAX): + if(self.key[i].kstate == kk.IDLE): + self.key[i].kchar = kk.NO_KEY + self.key[i].kcode = -1 + self.key[i].stateChanged = False + # Add new keys to empty slots in the key list. + for r in range(self.numRows): + for c in range(self.numCols): + button = self.bitRead(self.bitMap[r],c) + keyChar = self.keymap[r * self.numCols +c] + keyCode = r * self.numCols +c + idx = self.findInList(keyCode) + #Key is already on the list so set its next state. + if(idx > -1): + self.nextKeyState(idx,button) + #Key is NOT on the list so add it. + if((idx == -1) and button): + for i in range(self.LIST_MAX): + if(self.key[i].kchar == kk.NO_KEY): #Find an empty slot or don't add key to list. + self.key[i].kchar = keyChar + self.key[i].kcode = keyCode + self.key[i].kstate = kk.IDLE #Keys NOT on the list have an initial state of IDLE. + self.nextKeyState(i,button) + break #Don't fill all the empty slots with the same key. + #Report if the user changed the state of any key. + for i in range(self.LIST_MAX): + if(self.key[i].stateChanged): + anyActivity = True + return anyActivity + #This function is a state machine but is also used for debouncing the keys. + def nextKeyState(self,idx, button): + self.key[idx].stateChanged = False + kk = Key() + if(self.key[idx].kstate == kk.IDLE): + if(button == kk.CLOSED): + self.transitionTo(idx,kk.PRESSED) + self.holdTimer = time.time() #Get ready for next HOLD state. + elif(self.key[idx].kstate == kk.PRESSED): + if((time.time() - self.holdTimer) > self.holdTime*0.001): #Waiting for a key HOLD... + self.transitionTo(idx,kk.HOLD) + elif(button == kk.OPEN): # or for a key to be RELEASED. + self.transitionTo(idx,kk.RELEASED) + elif(self.key[idx].kstate == kk.HOLD): + if(button == kk.OPEN): + self.transitionTo(idx,kk.RELEASED) + elif(self.key[idx].kstate == kk.RELEASED): + self.transitionTo(idx,kk.IDLE) + + def transitionTo(self,idx,nextState): + self.key[idx].kstate = nextState + self.key[idx].stateChanged = True + #Search by code for a key in the list of active keys. + #Returns -1 if not found or the index into the list of active keys. + def findInList(self,keyCode): + for i in range(self.LIST_MAX): + if(self.key[i].kcode == keyCode): + return i + return -1 + #set Debounce Time, The default is 50ms + def setDebounceTime(self,ms): + self.debounceTime = ms + #set HoldTime,The default is 500ms + def setHoldTime(self,ms): + self.holdTime = ms + # + def isPressed(keyChar): + for i in range(self.LIST_MAX): + if(self.key[i].kchar == keyChar): + if(self.key[i].kstate == self.self.key[i].PRESSED and self.key[i].stateChanged): + return True + return False + # + def waitForKey(): + kk = Key() + waitKey = kk.NO_KEY + while(waitKey == kk.NO_KEY): + waitKey = getKey() + return waitKey + + def getState(): + return self.key[0].kstate + # + def keyStateChanged(): + return self.key[0].stateChanged + + def bitWrite(self,x,n,b): + if(b): + x |= (1<<n) + else: + x &=(~(1<<n)) + return x + def bitRead(self,x,n): + if((x>>n)&1 == 1): + return True + else: + return False + +ROWS = 4 +COLS = 4 +keys = [ '1','2','3','A', + '4','5','6','B', + '7','8','9','C', + '*','0','#','D' ] +rowsPins = [12,16,18,22] +colsPins = [19,15,13,11] + +def loop(): + keypad = Keypad(keys,rowsPins,colsPins,ROWS,COLS) + keypad.setDebounceTime(50) + while(True): + key = keypad.getKey() + if(key != keypad.NULL): + print ("You Pressed Key : %c "%(key) ) + +if __name__ == '__main__': # Program start from here + print ("Program is starting ... ") + try: + loop() + except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the child program destroy() will be executed. + pass + GPIO.cleanup() + + + + + diff --git a/recourses/Membrane_Switch_Module.py b/recourses/Membrane_Switch_Module.py new file mode 100644 index 0000000..168bcf9 --- /dev/null +++ b/recourses/Membrane_Switch_Module.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 + +import RPi.GPIO as GPIO +import Keypad #import module Keypad +ROWS = 4 # number of rows of the Keypad +COLS = 4 #number of columns of the Keypad +keys = [ '1','2','3','A', #key code + '4','5','6','B', + '7','8','9','C', + '*','0','#','D' ] +rowsPins = [12,16,18,22] #connect to the row pinouts of the keypad +colsPins = [19,15,13,11] #connect to the column pinouts of the keypad + +def loop(): + keypad = Keypad.Keypad(keys,rowsPins,colsPins,ROWS,COLS) #creat Keypad object + keypad.setDebounceTime(50) #set the debounce time + while(True): + key = keypad.getKey() #obtain the state of keys + if(key != keypad.NULL): #if there is key pressed, print its key code. + print ("You Pressed Key : %c "%(key)) + +if __name__ == '__main__': #Program start from here + print ("Program is starting ... ") + try: + loop() + except KeyboardInterrupt: #When 'Ctrl+C' is pressed, exit the program. + GPIO.cleanup() diff --git a/recourses/rpi.pdf b/recourses/rpi.pdf Binary files differnew file mode 100644 index 0000000..a4a9d10 --- /dev/null +++ b/recourses/rpi.pdf @@ -19,7 +19,6 @@ def stream(): # starting the motion live stream os.system('motion') - # Listening to the user's voice and putting it into a variable def listen_voice(): global audio @@ -82,4 +81,3 @@ if __name__ == '__main__': main() except KeyboardInterrupt: destroy() - |
