| @@ -0,0 +1,293 @@ | |||
| #include <Arduino.h> | |||
| #include <Wire.h> | |||
| #include <Servo.h> | |||
| double _ABVAR_1_i = 0.0 ; | |||
| int a = 0; | |||
| int b = 0; | |||
| Servo servo_pin_4; | |||
| //TCS230连接设置 | |||
| const int s0 = A0; | |||
| const int s1 = A1; | |||
| const int s2 = A4; | |||
| const int s3 = A5; | |||
| const int out = 8; //10 | |||
| const int led = 7; | |||
| // Variables | |||
| int red = 0; | |||
| int green = 0; | |||
| int blue = 0; | |||
| void trunleft(); | |||
| void trunright(); | |||
| void forward(); | |||
| void forward1(); | |||
| void forward2();//20 | |||
| void stop1(); | |||
| void color() ; | |||
| int color_see(); | |||
| void zha_qi_qiu(); | |||
| const int zuo=3; | |||
| const int you=17; | |||
| int c=0; | |||
| int _ABVAR_2_a = 0; | |||
| int _ABVAR_3_b = 0; | |||
| void setup() | |||
| { | |||
| pinMode( zuo, INPUT); | |||
| pinMode( you, INPUT); | |||
| pinMode( 16, INPUT); | |||
| pinMode( 14, INPUT); | |||
| pinMode( 10, OUTPUT); | |||
| pinMode( 6, OUTPUT); | |||
| pinMode( 5, OUTPUT); | |||
| pinMode( 9, OUTPUT); | |||
| _ABVAR_1_i = 0.0 ; | |||
| servo_pin_4.attach(4); | |||
| pinMode(s0, OUTPUT); | |||
| pinMode(s1, OUTPUT); | |||
| pinMode(s2, OUTPUT); | |||
| pinMode(s3, OUTPUT); | |||
| pinMode(out, INPUT); | |||
| pinMode(led, OUTPUT); | |||
| digitalWrite(s0, HIGH); | |||
| digitalWrite(s1, HIGH); | |||
| } | |||
| void loop() | |||
| { | |||
| /* if(!(digitalRead(16))) | |||
| { | |||
| forward(); | |||
| } | |||
| else*/ | |||
| {if (( digitalRead(you) && digitalRead(zuo) )) | |||
| { | |||
| forward(); | |||
| } | |||
| else | |||
| { | |||
| if (( !( digitalRead(you) ) && digitalRead(zuo) )) | |||
| { | |||
| trunright(); | |||
| } | |||
| else | |||
| { | |||
| if (( digitalRead(you) && !( digitalRead(zuo) ) )) | |||
| { | |||
| trunleft(); | |||
| } | |||
| else | |||
| { | |||
| if (( !( digitalRead(you) ) && !( digitalRead(zuo) ) )) | |||
| { | |||
| _ABVAR_1_i = ( _ABVAR_1_i + 1 ) ; | |||
| if (( ( _ABVAR_1_i ) == ( 1 ) )) | |||
| { | |||
| forward1(); | |||
| delay( 3500 ); | |||
| } | |||
| else | |||
| { | |||
| if (( ( _ABVAR_1_i ) == ( 2 ) )) | |||
| { | |||
| forward1_1(); | |||
| delay( 3700 ); | |||
| } | |||
| else | |||
| { | |||
| if (( ( _ABVAR_1_i ) == ( 3 ) )) | |||
| { | |||
| stop1(); | |||
| digitalWrite(led, HIGH); | |||
| delay(500); | |||
| color(); | |||
| digitalWrite(led, LOW); | |||
| if (red < blue && red < green) | |||
| { | |||
| _ABVAR_2_a = 1; | |||
| //LcdDisplay(" - (Red Color)"); | |||
| } | |||
| else if (blue < red && blue < green) | |||
| { | |||
| _ABVAR_2_a = 2; | |||
| // LcdDisplay(" - (Blue Color)"); | |||
| } | |||
| else if (green < red && green < blue) | |||
| { | |||
| _ABVAR_2_a = 3; | |||
| // LcdDisplay(" - (Green Color)"); | |||
| } | |||
| while(((_ABVAR_2_a)!= (_ABVAR_3_b))) | |||
| { | |||
| pan_duan_yan_se(); | |||
| } | |||
| duo_ji(); | |||
| /*int j; | |||
| stop1(); | |||
| a =( color_see()); | |||
| for( j=1;j<=3;j++) | |||
| { | |||
| forward2(); | |||
| delay( 1000 ); | |||
| stop1(); | |||
| b = color_see(); | |||
| if(a==b) | |||
| { zha_qi_qiu() ; | |||
| forward(); | |||
| delay(4000); | |||
| stop1(); | |||
| delay(4000);} | |||
| } | |||
| //zha wan qi qiu */ | |||
| } | |||
| }//three time | |||
| }//two time | |||
| }// one time | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| void forward() | |||
| { | |||
| analogWrite(9 , 180); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 193); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void trunleft() | |||
| { | |||
| analogWrite(9 , 0); | |||
| analogWrite(10 , 120); | |||
| analogWrite(5 , 120); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void forward2() | |||
| { | |||
| analogWrite(9 , 100); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 110); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void stop1() | |||
| { | |||
| analogWrite(9 , 0); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 0); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void forward1() | |||
| { | |||
| analogWrite(9 , 200); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 200); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void forward1_1() | |||
| { | |||
| analogWrite(9 , 250); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 250); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void trunright() | |||
| { | |||
| analogWrite(9 , 120); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 0); | |||
| analogWrite(6 , 120); | |||
| } | |||
| /*int color_see() | |||
| { | |||
| delay(150); | |||
| digitalWrite(led, HIGH); | |||
| delay(150); | |||
| color(); | |||
| if (red < blue && red < green) | |||
| { | |||
| return 1; | |||
| } | |||
| else if (blue < red && blue < green) | |||
| { | |||
| return 2; | |||
| } | |||
| else if (green < red && green < blue) | |||
| { | |||
| return 3; | |||
| } | |||
| } | |||
| */ | |||
| void color() | |||
| { | |||
| digitalWrite(s2, LOW); | |||
| digitalWrite(s3, LOW); | |||
| red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| digitalWrite(s3, HIGH); | |||
| blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| digitalWrite(s2, HIGH); | |||
| green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| } | |||
| void duo_ji() | |||
| { | |||
| for(int i=0;i<3;i++) | |||
| { | |||
| servo_pin_4.write( 90 ); | |||
| delay( 300 ); | |||
| servo_pin_4.write( 180 ); | |||
| delay( 600 ); | |||
| servo_pin_4.write( 90 ); | |||
| delay( 300 ); | |||
| } | |||
| } | |||
| void pan_duan_yan_se() | |||
| { | |||
| forward(); | |||
| delay(600); | |||
| stop1(); | |||
| digitalWrite(led, HIGH); | |||
| delay(500); | |||
| color(); | |||
| digitalWrite(led, LOW); | |||
| if (red < blue && red < green) | |||
| { | |||
| _ABVAR_3_b = 1; | |||
| // LcdDisplay(" - (Red Color)"); | |||
| } | |||
| else if (blue < red && blue < green) | |||
| { | |||
| _ABVAR_3_b = 2; | |||
| // LcdDisplay(" - (Blue Color)"); | |||
| } | |||
| else if (green < red && green < blue) | |||
| { | |||
| _ABVAR_3_b = 3; | |||
| // LcdDisplay(" - (Green Color)"); | |||
| } | |||
| } | |||
| /*void zha_qi_qiu() | |||
| { | |||
| for(int i=0;i<3;i++) | |||
| { | |||
| servo_pin_4.write(90); | |||
| delay(1000); | |||
| servo_pin_4.write(150); | |||
| delay(1000); | |||
| servo_pin_4.write(90); | |||
| delay(1000); | |||
| } | |||
| }*/ | |||
| @@ -0,0 +1,142 @@ | |||
| Skip to content | |||
| Search or jump to… | |||
| Pull requests | |||
| Issues | |||
| Marketplace | |||
| Explore | |||
| @aigy0828 | |||
| v-thiennp12 | |||
| / | |||
| palt-tilt-cam | |||
| Public | |||
| 3 | |||
| 64 | |||
| Code | |||
| Issues | |||
| Pull requests | |||
| Actions | |||
| Projects | |||
| Wiki | |||
| Security | |||
| Insights | |||
| palt-tilt-cam/PCA9685.py / | |||
| @v-thiennp12 | |||
| v-thiennp12 Add files via upload | |||
| Latest commit 99c7114 on 10 Aug 2020 | |||
| History | |||
| 1 contributor | |||
| 99 lines (84 sloc) 3.24 KB | |||
| #!/usr/bin/python | |||
| import time | |||
| import math | |||
| import smbus | |||
| # ============================================================================ | |||
| # Raspi PCA9685 16-Channel PWM Servo Driver | |||
| # ============================================================================ | |||
| class PCA9685: | |||
| # Registers/etc. | |||
| __SUBADR1 = 0x02 | |||
| __SUBADR2 = 0x03 | |||
| __SUBADR3 = 0x04 | |||
| __MODE1 = 0x00 | |||
| __MODE2 = 0x01 | |||
| __PRESCALE = 0xFE | |||
| __LED0_ON_L = 0x06 | |||
| __LED0_ON_H = 0x07 | |||
| __LED0_OFF_L = 0x08 | |||
| __LED0_OFF_H = 0x09 | |||
| __ALLLED_ON_L = 0xFA | |||
| __ALLLED_ON_H = 0xFB | |||
| __ALLLED_OFF_L = 0xFC | |||
| __ALLLED_OFF_H = 0xFD | |||
| def __init__(self, address=0x40, debug=False): | |||
| self.bus = smbus.SMBus(1) | |||
| self.address = address | |||
| self.debug = debug | |||
| if (self.debug): | |||
| print("Reseting PCA9685") | |||
| self.write(self.__MODE1, 0x00) | |||
| def write(self, reg, value): | |||
| "Writes an 8-bit value to the specified register/address" | |||
| self.bus.write_byte_data(self.address, reg, value) | |||
| if (self.debug): | |||
| print("I2C: Write 0x%02X to register 0x%02X" % (value, reg)) | |||
| def read(self, reg): | |||
| "Read an unsigned byte from the I2C device" | |||
| result = self.bus.read_byte_data(self.address, reg) | |||
| if (self.debug): | |||
| print("I2C: Device 0x%02X returned 0x%02X from reg 0x%02X" % (self.address, result & 0xFF, reg)) | |||
| return result | |||
| def setPWMFreq(self, freq): | |||
| "Sets the PWM frequency" | |||
| prescaleval = 25000000.0 # 25MHz | |||
| prescaleval /= 4096.0 # 12-bit | |||
| prescaleval /= float(freq) | |||
| prescaleval -= 1.0 | |||
| if (self.debug): | |||
| print("Setting PWM frequency to %d Hz" % freq) | |||
| print("Estimated pre-scale: %d" % prescaleval) | |||
| prescale = math.floor(prescaleval + 0.5) | |||
| if (self.debug): | |||
| print("Final pre-scale: %d" % prescale) | |||
| oldmode = self.read(self.__MODE1); | |||
| newmode = (oldmode & 0x7F) | 0x10 # sleep | |||
| self.write(self.__MODE1, newmode) # go to sleep | |||
| self.write(self.__PRESCALE, int(math.floor(prescale))) | |||
| self.write(self.__MODE1, oldmode) | |||
| time.sleep(0.005) | |||
| self.write(self.__MODE1, oldmode | 0x80) | |||
| self.write(self.__MODE2, 0x04) | |||
| def setPWM(self, channel, on, off): | |||
| "Sets a single PWM channel" | |||
| self.write(self.__LED0_ON_L+4*channel, on & 0xFF) | |||
| self.write(self.__LED0_ON_H+4*channel, on >> 8) | |||
| self.write(self.__LED0_OFF_L+4*channel, off & 0xFF) | |||
| self.write(self.__LED0_OFF_H+4*channel, off >> 8) | |||
| if (self.debug): | |||
| print("channel: %d LED_ON: %d LED_OFF: %d" % (channel,on,off)) | |||
| def setServoPulse(self, channel, pulse): | |||
| "Sets the Servo Pulse,The PWM frequency must be 50HZ" | |||
| pulse = pulse*4096/20000 #PWM frequency is 50HZ,the period is 20000us | |||
| self.setPWM(channel, 0, int(pulse)) | |||
| def setRotationAngle(self, channel, Angle): | |||
| if(Angle >= 0 and Angle <= 180): | |||
| temp = Angle * (2000 / 180) + 501 | |||
| self.setServoPulse(channel, temp) | |||
| else: | |||
| print("Angle out of range") | |||
| def start_PCA9685(self): | |||
| self.write(self.__MODE2, 0x04) | |||
| #Just restore the stopped state that should be set for exit_PCA9685 | |||
| def exit_PCA9685(self): | |||
| self.write(self.__MODE2, 0x00)#Please use initialization or __MODE2 =0x04 | |||
| © 2021 GitHub, Inc. | |||
| Terms | |||
| Privacy | |||
| Security | |||
| Status | |||
| Docs | |||
| Contact GitHub | |||
| Pricing | |||
| API | |||
| Training | |||
| Blog | |||
| About | |||
| Loading complete | |||
| @@ -0,0 +1,10 @@ | |||
| import numpy | |||
| class bonjour: | |||
| def __init__(self): | |||
| self.bonjour_text = ['bonjour x_x', 'salut !!!', 'ça va ?', 'vas-y ^^', 'chica', 'on your mark', 'hallo', 'another day in paradise !'] | |||
| def saysomething(self): | |||
| x = numpy.random.randint(len(self.bonjour_text)) | |||
| bonjour_rand = self.bonjour_text[x] | |||
| return bonjour_rand | |||
| @@ -0,0 +1,10 @@ | |||
| import numpy | |||
| class cachecache: | |||
| def __init__(self): | |||
| self.alltext = ['je suis fatigué là ..', 'je me cache', '', 'approches-toi', 'bella ciao', 'allez, je décolle', 'j"ai faim', 'on fait une pause ?'] | |||
| def saysomething(self): | |||
| x = numpy.random.randint(len(self.alltext)) | |||
| text_rand = self.alltext[x] | |||
| return text_rand | |||
| @@ -0,0 +1,267 @@ | |||
| import numpy | |||
| import cv2 | |||
| import os | |||
| import curses | |||
| import time | |||
| from PCA9685 import PCA9685 | |||
| from bonjour import bonjour | |||
| from missing import missing | |||
| from cachecache import cachecache | |||
| # Load the cascade | |||
| # ======================================================================== | |||
| # faceCascade = cv2.CascadeClassifier('data/haarcascade_frontalface_default.xml') | |||
| # faceCascade.load('data/haarcascade_frontalface_default.xml') | |||
| cascPath=os.path.dirname(cv2.__file__)+"/data/haarcascade_frontalface_default.xml" | |||
| #cascPath=os.path.dirname(cv2.__file__)+"/data/haarcascade_eye_tree_eyeglasses.xml" | |||
| faceCascade = cv2.CascadeClassifier(cascPath) | |||
| # Read the input image | |||
| print(cascPath) | |||
| # Start video capture | |||
| video_capture = cv2.VideoCapture(0) | |||
| # font | |||
| font = cv2.FONT_HERSHEY_SIMPLEX | |||
| # org | |||
| org = (50, 50) | |||
| # fontScale | |||
| fontScale = 1 | |||
| # Blue color in BGR | |||
| color = (255, 0, 0) | |||
| # Line thickness of 2 px | |||
| thickness = 2 | |||
| # ======================================================================== | |||
| sync_freq = 0 | |||
| # ======================================================================== | |||
| # get the curses screen window | |||
| # screen = curses.initscr() | |||
| # # turn off input echoing | |||
| # curses.noecho() | |||
| # # respond to keys immediately (don't wait for enter) | |||
| # curses.cbreak() | |||
| # # map arrow keys to special values | |||
| # screen.keypad(True) | |||
| #setting start up serrvo positions | |||
| # ======================================================================== | |||
| pwm = PCA9685() | |||
| pwm.setPWMFreq(50) | |||
| max_PAN = 180 | |||
| max_TILT = 145 | |||
| min_PAN = 0 | |||
| min_TILT = 0 | |||
| max_rate_TILT = 3 | |||
| max_rate_PAN = 3 | |||
| step_PAN = 1 | |||
| step_TILT = 1 | |||
| current_PAN = 90 | |||
| current_TILT = 60 | |||
| pwm.setRotationAngle(1, current_PAN) #PAN | |||
| pwm.setRotationAngle(0, current_TILT) #TILT | |||
| # pseudo-PID control | |||
| k_PAN = 0.015 | |||
| k_TILT = -0.015 | |||
| kd_PAN = 0.095 | |||
| kd_TILT = -0.095 | |||
| error_acceptance = 15 | |||
| # ======================================================================== | |||
| previous_x = 0 | |||
| previous_y = 0 | |||
| previous_h = 0 | |||
| previous_w = 0 | |||
| delta_x = 0 | |||
| delta_y = 0 | |||
| previous_delta_x = 0 | |||
| previous_delta_y = 0 | |||
| delta_x_dot = 0 | |||
| delta_y_dot = 0 | |||
| rectangle_found = 0 | |||
| # make some fun | |||
| bonjour = bonjour() | |||
| missing = missing() | |||
| cachecache = cachecache() | |||
| bonjour_ind = 0 | |||
| missing_ind = 0 | |||
| cachecache_ind = 0 | |||
| # | |||
| # main loop | |||
| # ======================================================================== | |||
| # https://techvidvan.com/tutorials/face-recognition-project-python-opencv/ | |||
| try: | |||
| while True: | |||
| # Try to reduce lagging issues | |||
| if sync_freq == 0: | |||
| # Capture frame-by-frame | |||
| ret, frame = video_capture.read() | |||
| gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) | |||
| faces = faceCascade.detectMultiScale(gray,scaleFactor=1.2, minNeighbors=4, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE) | |||
| if sync_freq < 0: | |||
| sync_freq += 1 | |||
| # stopping blinking rectangle | |||
| # if rectangle_found > 0: | |||
| # cv2.rectangle(frame, (previous_x, previous_y), (x+previous_w, y+previous_h), (0, 255, 0), 2) | |||
| # | |||
| else: | |||
| sync_freq = 0 | |||
| rectangle_found = 0 | |||
| for (x, y, w, h) in faces: | |||
| cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) | |||
| rectangle_found += 1 | |||
| if rectangle_found == 1: | |||
| print(' x y previous ', previous_x, previous_y) | |||
| # ======================================================================================== | |||
| # stay away from me ! | |||
| # delta_x = previous_x - x | |||
| # delta_y = previous_y - y | |||
| # get in touch ! | |||
| delta_x = 300 - x | |||
| delta_y = 200 - y | |||
| delta_x_dot = delta_x - previous_delta_x | |||
| delta_y_dot = delta_y - previous_delta_y | |||
| # ======================================================================================== | |||
| # ignoring small error | |||
| if abs(delta_x) < error_acceptance: | |||
| delta_x = 0 | |||
| delta_x_dot = 0 | |||
| if abs(delta_y) < error_acceptance: | |||
| delta_y = 0 | |||
| delta_y_dot = 0 | |||
| # ======================================================================================== | |||
| print(' x y new ', x, y) | |||
| previous_x = x | |||
| previous_y = y | |||
| previous_h = h | |||
| previous_w = w | |||
| previous_delta_x = delta_x | |||
| previous_delta_y = delta_y | |||
| cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) | |||
| cv2.putText(frame, str(x) + " " + str(y), (x, y), font, fontScale, (75, 75, 0), thickness, cv2.LINE_AA) | |||
| # wait for keypress | |||
| # =========================================================== | |||
| char = cv2.waitKey(20) | |||
| #print('key pressed', char) | |||
| if char == ord('q'): | |||
| break | |||
| if char == ord('p'): | |||
| #if p is pressed take a photo! | |||
| # camera.capture('image%s.jpg' % pic) | |||
| # pic = pic +1 | |||
| # screen.addstr(0, 0, 'picture taken! ') | |||
| cv2.putText(frame, 'another day in paradise !', (50,50) , font, fontScale, color, thickness, cv2.LINE_AA) | |||
| elif char == 83: | |||
| current_PAN = max(min_PAN, current_PAN - step_PAN) | |||
| pwm.setRotationAngle(1, current_PAN) #PAN | |||
| #time.sleep(0.001) | |||
| cv2.putText(frame, 'right ', (20, 20), font, fontScale, (0, 255, 0), thickness, cv2.LINE_AA) | |||
| elif char == 81: | |||
| current_PAN = min(max_PAN, current_PAN + step_PAN) | |||
| pwm.setRotationAngle(1, current_PAN) #PAN | |||
| #time.sleep(0.001) | |||
| cv2.putText(frame, 'left ', (20, 20), font, fontScale, (0, 255, 0), thickness, cv2.LINE_AA) | |||
| elif char == 82: | |||
| current_TILT = max(min_TILT, current_TILT - step_TILT) | |||
| pwm.setRotationAngle(0, current_TILT) #TILT | |||
| #time.sleep(0.001) | |||
| cv2.putText(frame, 'up ', (20, 20), font, fontScale, (0, 255, 0), thickness, cv2.LINE_AA) | |||
| elif char == 84: | |||
| current_TILT = min(max_TILT, current_TILT + step_TILT) | |||
| pwm.setRotationAngle(0, current_TILT) #TILT | |||
| #time.sleep(0.001) | |||
| cv2.putText(frame, 'down ', (20, 20), font, fontScale, (0, 255, 0), thickness, cv2.LINE_AA) | |||
| elif rectangle_found > 0 and (abs(delta_x) < 500 and abs(delta_y) < 500) and char == -1: | |||
| # stay away | |||
| # k_PAN = -0.01 | |||
| # k_TILT = +0.01 | |||
| # get in touch | |||
| print('pan tilt -- current ', current_PAN, current_TILT) | |||
| # pseu-do PID | |||
| delta_TILT = k_TILT * delta_y + kd_TILT * delta_y_dot | |||
| # rate-limiter | |||
| delta_TILT = min(abs(delta_TILT), max_rate_TILT)*numpy.sign(delta_TILT) | |||
| # noise exclude | |||
| if abs(delta_TILT) < step_TILT: | |||
| delta_TILT = 0 | |||
| # here we go | |||
| current_TILT = current_TILT + delta_TILT | |||
| if current_TILT > max_TILT: | |||
| current_TILT = max_TILT | |||
| if current_TILT < min_TILT: | |||
| current_TILT = min_TILT | |||
| print('delta tilt ', delta_TILT) | |||
| # pseu-do PID | |||
| delta_PAN = k_PAN * delta_x + kd_PAN * delta_x_dot | |||
| # rate-limiter | |||
| delta_PAN = min(abs(delta_PAN), max_rate_PAN)*numpy.sign(delta_PAN) | |||
| # noise exclude | |||
| if abs(delta_PAN) < step_PAN: | |||
| delta_PAN = 0 | |||
| # here we go | |||
| current_PAN = current_PAN + delta_PAN | |||
| if current_PAN > max_PAN: | |||
| current_PAN = max_PAN | |||
| if current_PAN < min_PAN: | |||
| current_PAN = min_PAN | |||
| print('delta PAN ', delta_PAN) | |||
| print('delta_x delta_y ', delta_x, delta_y) | |||
| print('pan tilt -- new ', current_PAN, current_TILT) | |||
| pwm.setRotationAngle(1, current_PAN) | |||
| pwm.setRotationAngle(0, current_TILT) | |||
| elif char == -1: | |||
| cv2.putText(frame, 'on air !', (20, 20), font, fontScale, (0, 255, 0), thickness, cv2.LINE_AA) | |||
| #print('on air !') | |||
| # Display the resulting frame | |||
| cv2.imshow('face_tracking', frame) | |||
| # | |||
| finally: | |||
| # shut down cleanly | |||
| pwm.exit_PCA9685() | |||
| video_capture.release() | |||
| cv2.destroyAllWindows() | |||
| @@ -0,0 +1,89 @@ | |||
| import curses | |||
| import os | |||
| import time | |||
| import picamera | |||
| #!/usr/bin/python | |||
| import RPi.GPIO as GPIO | |||
| from PCA9685 import PCA9685 | |||
| #setting up camera | |||
| camera = picamera.PiCamera() | |||
| camera.resolution = (512, 384) | |||
| camera.start_preview() | |||
| #flipping the camera for so its not upside down | |||
| # camera.vflip = True | |||
| # camera.hflip = True | |||
| # get the curses screen window | |||
| screen = curses.initscr() | |||
| # turn off input echoing | |||
| curses.noecho() | |||
| # respond to keys immediately (don't wait for enter) | |||
| curses.cbreak() | |||
| # map arrow keys to special values | |||
| screen.keypad(True) | |||
| #setting start up serrvo positions | |||
| pwm = PCA9685() | |||
| pwm.setPWMFreq(50) | |||
| max_PAN = 180 | |||
| max_TILT = 145 | |||
| min_PAN = 0 | |||
| min_TILT = 0 | |||
| step_PAN = 10 | |||
| step_TILT = 10 | |||
| current_PAN = 90 | |||
| current_TILT = 90 | |||
| pwm.setRotationAngle(1, current_PAN) #PAN | |||
| pwm.setRotationAngle(0, current_TILT) #TILT | |||
| # print doesn't work with curses, use addstr instead | |||
| pic = 1 | |||
| try: | |||
| while True: | |||
| char = screen.getch() | |||
| if char == ord('q'): | |||
| #if q is pressed quit | |||
| break | |||
| if char == ord('p'): | |||
| #if p is pressed take a photo! | |||
| camera.capture('image%s.jpg' % pic) | |||
| pic = pic +1 | |||
| screen.addstr(0, 0, 'picture taken! ') | |||
| elif char == curses.KEY_RIGHT: | |||
| screen.addstr(0, 0, 'right ') | |||
| current_PAN = max(min_PAN, current_PAN - step_PAN) | |||
| pwm.setRotationAngle(1, current_PAN) #PAN | |||
| time.sleep(0.001) | |||
| elif char == curses.KEY_LEFT: | |||
| screen.addstr(0, 0, 'left ') | |||
| current_PAN = min(max_PAN, current_PAN + step_PAN) | |||
| pwm.setRotationAngle(1, current_PAN) #PAN | |||
| time.sleep(0.001) | |||
| elif char == curses.KEY_UP: | |||
| screen.addstr(0, 0, 'up ') | |||
| current_TILT = max(min_TILT, current_TILT - step_TILT) | |||
| pwm.setRotationAngle(0, current_TILT) #TILT | |||
| time.sleep(0.001) | |||
| elif char == curses.KEY_DOWN: | |||
| screen.addstr(0, 0, 'up ') | |||
| current_TILT = min(max_TILT, current_TILT + step_TILT) | |||
| pwm.setRotationAngle(0, current_TILT) #TILT | |||
| time.sleep(0.001) | |||
| finally: | |||
| # shut down cleanly | |||
| pwm.exit_PCA9685() | |||
| curses.nocbreak(); screen.keypad(0); curses.echo() | |||
| curses.endwin() | |||
| @@ -0,0 +1,10 @@ | |||
| import numpy | |||
| class missing: | |||
| def __init__(self): | |||
| self.alltext = ['ne pars pas', 'what do you mean ?', 'on est en agile là !', 'approches-toi ^ ^', 'un café ?', 'qu"est-ce qu"il fait beau aujourd"hui !', 'il est trop froid ?'] | |||
| def saysomething(self): | |||
| x = numpy.random.randint(len(self.alltext)) | |||
| text_rand = self.alltext[x] | |||
| return text_rand | |||
| @@ -0,0 +1,16 @@ | |||
| import time | |||
| import Adafruit_PCA9685 # 调用PCA9685模块 | |||
| pwm = Adafruit_PCA9685.PCA9685() | |||
| # 设置最大最小脉冲长度 | |||
| servo_min = 90 # 4096的最小脉冲长度 | |||
| servo_max = 640 # 4096的最大脉冲长度 | |||
| servo_mid = 365 # 4096的中间脉冲长度 | |||
| # 设置频率为60 | |||
| pwm.set_pwm_freq(60) | |||
| print('Moving servo on, press Ctrl-C to quit...') | |||
| while True: | |||
| pwm.set_pwm(0, 0, servo_min) | |||
| time.sleep(1) | |||
| pwm.set_pwm(0, 0, servo_max) | |||
| time.sleep(1) | |||
| @@ -0,0 +1,302 @@ | |||
| #include <Servo.h> | |||
| #include"LedControl.h" | |||
| LedControl lc=LedControl(12,11,13,1); | |||
| double _ABVAR_1_i = 0 ; | |||
| Servo servo_pin_4; | |||
| const int s0 = A3; | |||
| const int s1 = A4; | |||
| const int s2 = A1; | |||
| const int s3 = A5; | |||
| const int out = 8; | |||
| const int led = 7; | |||
| int red = 0; | |||
| int green = 0; | |||
| int blue = 0; | |||
| int _ABVAR_2_a = 0; | |||
| int _ABVAR_3_b = 0; | |||
| void trunright(); | |||
| void trunleft(); | |||
| void stop(); | |||
| void duo_ji(); | |||
| void forwoard_drop(); | |||
| void forwoard_rise(); | |||
| void back(); | |||
| void forwoard(); | |||
| void color(); | |||
| void pan_duan_yan_se(); | |||
| void led_left(); | |||
| void led_right(); | |||
| void led_forword(); | |||
| void setup() | |||
| { | |||
| pinMode(16 , INPUT); | |||
| pinMode(14, INPUT); | |||
| pinMode( 9 , OUTPUT); | |||
| pinMode( 10 , OUTPUT); | |||
| pinMode( 5 , OUTPUT); | |||
| pinMode( 6 , OUTPUT); | |||
| servo_pin_4.attach(4); | |||
| _ABVAR_1_i = 0 ; | |||
| pinMode(s0, OUTPUT); | |||
| pinMode(s1, OUTPUT); | |||
| pinMode(s2, OUTPUT); | |||
| pinMode(s3, OUTPUT); | |||
| pinMode(out, INPUT); | |||
| pinMode(led, OUTPUT); | |||
| digitalWrite(s0, HIGH); | |||
| digitalWrite(s1, HIGH); | |||
| lc.shutdown(0,false); | |||
| lc.setIntensity(0,8); | |||
| lc.clearDisplay(0); | |||
| lc.setRow(0,0,0xff); | |||
| lc.setRow(0,1,0xff); | |||
| lc.setRow(0,2,0xff); | |||
| lc.setRow(0,3,0xff); | |||
| lc.setRow(0,4,0xff); | |||
| lc.setRow(0,5,0xff); | |||
| lc.setRow(0,6,0xff); | |||
| lc.setRow(0,7,0xff); | |||
| } | |||
| void loop() | |||
| { | |||
| if (( digitalRead(14) && digitalRead(16) )) | |||
| { | |||
| forwoard(); | |||
| } | |||
| else | |||
| { | |||
| if (( !( digitalRead(14) ) && digitalRead(16) )) | |||
| { | |||
| trunright(); | |||
| } | |||
| else | |||
| { | |||
| if (( digitalRead(14) && !( digitalRead(16) ) )) | |||
| { | |||
| trunleft(); | |||
| } | |||
| else | |||
| { | |||
| if (( !( digitalRead(14) ) && !( digitalRead(16) ) )) | |||
| { | |||
| _ABVAR_1_i = ( _ABVAR_1_i + 1 ) ; | |||
| if (( ( _ABVAR_1_i ) == ( 1 ) )) | |||
| { | |||
| forwoard_rise(); | |||
| delay( 3000 ); | |||
| forwoard(); | |||
| delay( 1700 ); | |||
| } | |||
| else | |||
| { | |||
| if (( ( _ABVAR_1_i ) == ( 2 ) )) | |||
| { | |||
| forwoard_rise(); | |||
| delay(3000); | |||
| forwoard(); | |||
| delay( 500 ); | |||
| } | |||
| if (( ( _ABVAR_1_i ) == ( 3 ) )) | |||
| { | |||
| stop(); | |||
| digitalWrite(led, HIGH); | |||
| delay(500); | |||
| color(); | |||
| digitalWrite(led, LOW); | |||
| if (red < blue && red < green) | |||
| { | |||
| _ABVAR_2_a = 1; | |||
| //LcdDisplay(" - (Red Color)"); | |||
| } | |||
| else if (blue < red && blue < green) | |||
| { | |||
| _ABVAR_2_a = 2; | |||
| // LcdDisplay(" - (Blue Color)"); | |||
| } | |||
| else if (green < red && green < blue) | |||
| { | |||
| _ABVAR_2_a = 3; | |||
| // LcdDisplay(" - (Green Color)"); | |||
| } | |||
| while(((_ABVAR_2_a)!= (_ABVAR_3_b))) | |||
| { | |||
| pan_duan_yan_se(); | |||
| } | |||
| duo_ji(); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| void trunright() | |||
| { | |||
| led_right(); | |||
| analogWrite(9 , 200); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 0); | |||
| analogWrite(6 , 200); | |||
| } | |||
| void stop() | |||
| { | |||
| digitalWrite( 9 , LOW ); | |||
| digitalWrite( 10 , LOW ); | |||
| digitalWrite( 5 , LOW ); | |||
| digitalWrite( 6 , LOW ); | |||
| } | |||
| void forwoard_drop() | |||
| { | |||
| analogWrite(9 , 100); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 100); | |||
| analogWrite(6 , 0); | |||
| led_forword(); | |||
| } | |||
| void duo_ji() | |||
| { | |||
| servo_pin_4.write( 90 ); | |||
| delay( 300 ); | |||
| servo_pin_4.write(360 ); | |||
| delay( 600 ); | |||
| servo_pin_4.write( 0 ); | |||
| delay( 300 ); | |||
| } | |||
| void trunleft() | |||
| { | |||
| analogWrite(9 , 0); | |||
| analogWrite(10 , 200); | |||
| analogWrite(5 , 200); | |||
| analogWrite(6 , 0); | |||
| led_left(); | |||
| } | |||
| void forwoard() | |||
| { | |||
| analogWrite(9 , 200); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 200); | |||
| analogWrite(6 , 0); | |||
| led_forword(); | |||
| } | |||
| void back() | |||
| { | |||
| analogWrite(9 , 0); | |||
| analogWrite(10 , 120); | |||
| analogWrite(5 , 0); | |||
| analogWrite(6 , 120); | |||
| } | |||
| void forwoard_rise() | |||
| { | |||
| analogWrite(9 , 255); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 255); | |||
| analogWrite(6 , 0); | |||
| led_forword(); | |||
| } | |||
| void forwoard_rise1() | |||
| { | |||
| analogWrite(9 , 210); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 255); | |||
| analogWrite(6 , 0); | |||
| led_forword(); | |||
| } | |||
| void color() | |||
| { | |||
| digitalWrite(s2, LOW); | |||
| digitalWrite(s3, LOW); | |||
| //count OUT, pRed, RED | |||
| red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| digitalWrite(s3, HIGH); | |||
| //count OUT, pBLUE, BLUE | |||
| blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| digitalWrite(s2, HIGH); | |||
| //count OUT, pGreen, GREEN | |||
| green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| } | |||
| void pan_duan_yan_se() | |||
| { | |||
| forwoard(); | |||
| delay(600); | |||
| stop(); | |||
| digitalWrite(led, HIGH); | |||
| delay(500); | |||
| color(); | |||
| digitalWrite(led, LOW); | |||
| if (red < blue && red < green) | |||
| { | |||
| _ABVAR_3_b = 1; | |||
| // LcdDisplay(" - (Red Color)"); | |||
| } | |||
| else if (blue < red && blue < green) | |||
| { | |||
| _ABVAR_3_b = 2; | |||
| // LcdDisplay(" - (Blue Color)"); | |||
| } | |||
| else if (green < red && green < blue) | |||
| { | |||
| _ABVAR_3_b = 3; | |||
| // LcdDisplay(" - (Green Color)"); | |||
| } | |||
| } | |||
| void led_right() | |||
| { | |||
| lc.setRow(0,0,0x00); | |||
| lc.setRow(0,1,0x08); | |||
| lc.setRow(0,2,0x04); | |||
| lc.setRow(0,3,0x02); | |||
| lc.setRow(0,4,0x8f); | |||
| lc.setRow(0,5,0x02); | |||
| lc.setRow(0,6,0x04); | |||
| lc.setRow(0,7,0x08); | |||
| } | |||
| void led_left() | |||
| { | |||
| lc.setRow(0,0,0x00); | |||
| lc.setRow(0,1,0x10); | |||
| lc.setRow(0,2,0x20); | |||
| lc.setRow(0,3,0x40); | |||
| lc.setRow(0,4,0xfe); | |||
| lc.setRow(0,5,0x40); | |||
| lc.setRow(0,6,0x20); | |||
| lc.setRow(0,7,0x10); | |||
| } | |||
| void led_forword() | |||
| { | |||
| lc.setRow(0,0,0x08); | |||
| lc.setRow(0,1,0x1c); | |||
| lc.setRow(0,2,0x2a); | |||
| lc.setRow(0,3,0x49); | |||
| lc.setRow(0,4,0x08); | |||
| lc.setRow(0,5,0x08); | |||
| lc.setRow(0,6,0x08); | |||
| lc.setRow(0,7,0x08); | |||
| } | |||
| @@ -0,0 +1,259 @@ | |||
| #include <Servo.h> | |||
| int _ABVAR_1_i = 0 ; | |||
| Servo servo_pin_4; | |||
| const int s0 = A3; | |||
| const int s1 = A4; | |||
| const int s2 = A1; | |||
| const int s3 = A5; | |||
| const int out = 8; | |||
| const int led = 7; | |||
| const int xun_ji1 = A2; | |||
| const int xun_ji2 = 3; | |||
| const int xun_ji3 = A0; | |||
| int red = 0; | |||
| int green = 0; | |||
| int blue = 0; | |||
| int _ABVAR_2_a = 0; | |||
| int _ABVAR_3_b = 0; | |||
| void trunright(); | |||
| void trunleft(); | |||
| void stop(); | |||
| void duo_ji(); | |||
| void forwoard_drop(); | |||
| void forwoard_rise(); | |||
| void back(); | |||
| void forwoard(); | |||
| void color(); | |||
| void pan_duan_yan_se(); | |||
| void setup() | |||
| { | |||
| pinMode(xun_ji1 , INPUT); | |||
| pinMode( xun_ji2, INPUT); | |||
| pinMode( xun_ji3, INPUT); | |||
| pinMode( 10, OUTPUT); | |||
| pinMode( 6, OUTPUT); | |||
| pinMode( 5, OUTPUT); | |||
| pinMode( 9, OUTPUT); | |||
| pinMode( 9 , OUTPUT); | |||
| pinMode( 10 , OUTPUT); | |||
| pinMode( 5 , OUTPUT); | |||
| pinMode( 6 , OUTPUT); | |||
| servo_pin_4.attach(4); | |||
| _ABVAR_1_i = 0 ; | |||
| pinMode(s0, OUTPUT); | |||
| pinMode(s1, OUTPUT); | |||
| pinMode(s2, OUTPUT); | |||
| pinMode(s3, OUTPUT); | |||
| pinMode(out, INPUT); | |||
| pinMode(led, OUTPUT); | |||
| digitalWrite(s0, HIGH); | |||
| digitalWrite(s1, HIGH); | |||
| } | |||
| void loop() | |||
| { | |||
| if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && digitalRead(xun_ji2) )) | |||
| { | |||
| back(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) )) | |||
| { | |||
| trunleft(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && !( digitalRead(xun_ji2) ) )) | |||
| { | |||
| forwoard(); | |||
| } | |||
| else | |||
| { | |||
| if (( digitalRead(xun_ji3) && ( !( digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) ) )) | |||
| { | |||
| trunleft(); | |||
| } | |||
| else | |||
| { | |||
| if (( !( digitalRead(xun_ji3) ) && ( digitalRead(xun_ji2) && digitalRead(xun_ji1) ) )) | |||
| { | |||
| trunright(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( !( digitalRead(xun_ji3) ) && !( digitalRead(xun_ji2) ) ) && digitalRead(xun_ji1) )) | |||
| { | |||
| trunright(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( !( digitalRead(xun_ji3) ) && !( digitalRead(xun_ji2) ) ) && !( digitalRead(xun_ji1) ) )) | |||
| { | |||
| _ABVAR_1_i = ( _ABVAR_1_i + 1 ) ; | |||
| if (( ( _ABVAR_1_i ) == ( 1 ) )) | |||
| { | |||
| forwoard(); | |||
| delay( 7000 ); | |||
| } | |||
| else | |||
| { | |||
| if (( ( _ABVAR_1_i ) == ( 2 ) )) | |||
| { | |||
| forwoard_rise(); | |||
| delay( 3000 ); | |||
| forwoard(); | |||
| delay( 500 ); | |||
| } | |||
| else | |||
| { | |||
| if (( ( _ABVAR_1_i ) == ( 3 ) )) | |||
| { | |||
| stop(); | |||
| digitalWrite(led, HIGH); | |||
| delay(500); | |||
| color(); | |||
| digitalWrite(led, LOW); | |||
| if (red < blue && red < green) | |||
| { | |||
| _ABVAR_2_a = 1; | |||
| //LcdDisplay(" - (Red Color)"); | |||
| } | |||
| else if (blue < red && blue < green) | |||
| { | |||
| _ABVAR_2_a = 2; | |||
| // LcdDisplay(" - (Blue Color)"); | |||
| } | |||
| else if (green < red && green < blue) | |||
| { | |||
| _ABVAR_2_a = 3; | |||
| // LcdDisplay(" - (Green Color)"); | |||
| } | |||
| while(((_ABVAR_2_a)!= (_ABVAR_3_b))) | |||
| { | |||
| pan_duan_yan_se(); | |||
| } | |||
| duo_ji(); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| void trunright() | |||
| { | |||
| analogWrite(9 , 180); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 0); | |||
| analogWrite(6 , 180); | |||
| } | |||
| void stop() | |||
| { | |||
| digitalWrite( 9 , LOW ); | |||
| digitalWrite( 10 , LOW ); | |||
| digitalWrite( 5 , LOW ); | |||
| digitalWrite( 6 , LOW ); | |||
| } | |||
| void forwoard_drop() | |||
| { | |||
| analogWrite(9 , 80); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 80); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void duo_ji() | |||
| { | |||
| servo_pin_4.write( 90 ); | |||
| delay( 300 ); | |||
| servo_pin_4.write( 180 ); | |||
| delay( 600 ); | |||
| servo_pin_4.write( 90 ); | |||
| delay( 300 ); | |||
| } | |||
| void trunleft() | |||
| { | |||
| analogWrite(9 , 0); | |||
| analogWrite(10 , 180); | |||
| analogWrite(5 , 180); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void forwoard() | |||
| { | |||
| analogWrite(9 , 200); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 200); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void back() | |||
| { | |||
| analogWrite(9 , 0); | |||
| analogWrite(10 , 120); | |||
| analogWrite(5 , 0); | |||
| analogWrite(6 , 120); | |||
| } | |||
| void forwoard_rise() | |||
| { | |||
| analogWrite(9 , 255); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 255); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void color() | |||
| { | |||
| digitalWrite(s2, LOW); | |||
| digitalWrite(s3, LOW); | |||
| //count OUT, pRed, RED | |||
| red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| digitalWrite(s3, HIGH); | |||
| //count OUT, pBLUE, BLUE | |||
| blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| digitalWrite(s2, HIGH); | |||
| //count OUT, pGreen, GREEN | |||
| green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| } | |||
| void pan_duan_yan_se() | |||
| { | |||
| forwoard(); | |||
| delay(600); | |||
| stop(); | |||
| digitalWrite(led, HIGH); | |||
| delay(500); | |||
| color(); | |||
| digitalWrite(led, LOW); | |||
| if (red < blue && red < green) | |||
| { | |||
| _ABVAR_3_b = 1; | |||
| // LcdDisplay(" - (Red Color)"); | |||
| } | |||
| else if (blue < red && blue < green) | |||
| { | |||
| _ABVAR_3_b = 2; | |||
| // LcdDisplay(" - (Blue Color)"); | |||
| } | |||
| else if (green < red && green < blue) | |||
| { | |||
| _ABVAR_3_b = 3; | |||
| // LcdDisplay(" - (Green Color)"); | |||
| } | |||
| } | |||
| @@ -0,0 +1 @@ | |||
| Subproject commit e935b759bff26425b8485dde0faa74697b65f951 | |||
| @@ -0,0 +1,15 @@ | |||
| country=CN | |||
| ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev | |||
| update_config=1 | |||
| network={ | |||
| ssid="CMCC-vEuN" | |||
| psk="Wa2YUnYS" | |||
| priority=2 | |||
| } | |||
| network={ | |||
| ssid="HONOR20PRO" | |||
| psk="123456789" | |||
| priority=1 | |||
| } | |||
| @@ -0,0 +1,50 @@ | |||
| #capture{ | |||
| position: absolute; | |||
| right: 190px; | |||
| bottom: -40px; | |||
| } | |||
| #video{ | |||
| position: absolute; | |||
| right: 0; | |||
| top: 0; | |||
| width: 480px; | |||
| height: 320px; | |||
| autoplay:ture; | |||
| } | |||
| #img{ | |||
| position: absolute; | |||
| left: 0; | |||
| top: 0; | |||
| width: 480px; | |||
| height: 320px; | |||
| } | |||
| .auto{ | |||
| position: absolute; | |||
| left: 50%; | |||
| top: 50%; | |||
| height: 320px; | |||
| margin-top: -160px; | |||
| } | |||
| #sure{ | |||
| position: absolute; | |||
| left: 210px; | |||
| bottom: -40px; | |||
| } | |||
| button{ | |||
| cursor: pointer; | |||
| margin: 0 auto; | |||
| border: 1px solid #f0f0f0; | |||
| background: #5CACEE; | |||
| color: #FFF; | |||
| width: 100px; | |||
| height: 36px; | |||
| line-height: 36px; | |||
| border-radius: 8px; | |||
| text-align: center; | |||
| } | |||
| @@ -0,0 +1,39 @@ | |||
| # 导入必要的库 | |||
| import cv2 | |||
| import paddlehub as hub | |||
| # 加载Paddlehub人脸检测模型 | |||
| mask_detector = hub.Module(name="pyramidbox_lite_mobile_mask") | |||
| face_detector = hub.Module(name="pyramidbox_lite_mobile") | |||
| cap = cv2.VideoCapture(0,cv2.CAP_DSHOW) | |||
| while True: | |||
| # 从摄像头读取图片 | |||
| sucess, img = cap.read() | |||
| # os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2,3" | |||
| result_1 = mask_detector.face_detection(images=[img]) | |||
| result_2 = face_detector.face_detection(images=[img]) | |||
| print(result_1) | |||
| # 遍历结果并绘制矩形框 | |||
| if result_2[0]['data'] != [] and result_1[0]['data'][0]['label'] == 'MASK': | |||
| for face_1 in result_1[0]['data']: | |||
| # 将Dict形式的key-value对转换成变量形式 | |||
| locals().update(face_1) | |||
| print('bbox:', [left, top, right, bottom]) | |||
| cv2.rectangle(img, tuple([left, top]), tuple([right, bottom]), (0, 255, 127), 2) | |||
| else: | |||
| for face_2 in result_2[0]['data']: | |||
| locals().update(face_2) | |||
| cv2.rectangle(img, tuple([left, top]), tuple([right, bottom]), (0, 0,205), 2) | |||
| # 显示图像 | |||
| cv2.imshow("img", img) | |||
| # 保持画面的持续。 | |||
| k = cv2.waitKey(1) | |||
| if k == 27: | |||
| # 通过esc键退出摄像 | |||
| cv2.destroyAllWindows() | |||
| break | |||
| # 关闭摄像头 | |||
| cap.release() | |||
| @@ -0,0 +1,89 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="en"> | |||
| <head> | |||
| <meta charset="UTF-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="ie=edge"> | |||
| <title>网页调取摄像头</title> | |||
| <link rel="stylesheet" href="video%20pro.css"> | |||
| </head> | |||
| <body> | |||
| <div class="auto"> | |||
| <video id="video" autoplay></video> | |||
| <canvas id="canvas" width="480" height="320" style="display: none;"></canvas> | |||
| <img src="./body_default.png" id="img" style="margin-left: 20px;"> | |||
| <div> | |||
| <button id="capture" title="点击进行拍照">拍照</button> | |||
| </div> | |||
| <div> | |||
| <button id="sure" title="是否用这张图片进行验证">确认</button> | |||
| </div> | |||
| </div> | |||
| <script> | |||
| var file ,stream; | |||
| //访问用户媒体设备的兼容方法 | |||
| function getUserMedia(constraints, success, error) { | |||
| if (navigator.mediaDevices.getUserMedia) { | |||
| //最新的标准API | |||
| navigator.mediaDevices.getUserMedia(constraints).then(success).catch(error); | |||
| } else if (navigator.getUserMedia) { | |||
| //旧版API | |||
| navigator.getUserMedia(constraints, success, error); | |||
| } | |||
| } | |||
| let video = document.getElementById('video'); | |||
| let canvas = document.getElementById('canvas'); | |||
| let context = canvas.getContext('2d'); | |||
| function success(stream) { | |||
| //兼容webkit核心浏览器 | |||
| let CompatibleURL = window.URL || window.webkitURL; | |||
| //将视频流设置为video元素的源 | |||
| console.log(stream); | |||
| stream = stream; | |||
| //video.src = CompatibleURL.createObjectURL(stream); | |||
| video.srcObject = stream; | |||
| video.play(); | |||
| } | |||
| function error(error) { | |||
| console.log(`访问用户媒体设备失败${error.name}, ${error.message}`); | |||
| } | |||
| if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia) { | |||
| //调用用户媒体设备, 访问摄像头 | |||
| getUserMedia({video : {width: 480, height: 320}}, success, error); | |||
| } else { | |||
| alert('不支持访问用户媒体'); | |||
| } | |||
| // base64转文件 | |||
| document.getElementById('capture').addEventListener('click', function () { | |||
| context.drawImage(video, 0, 0, 480, 320); | |||
| // 获取图片base64链接 | |||
| var image = canvas.toDataURL('image/png'); | |||
| // 定义一个img | |||
| var img = document.getElementById("img"); | |||
| //设置属性和src | |||
| //img.id = "imgBoxxx"; | |||
| img.src = image; | |||
| //将图片添加到页面中 | |||
| //document.body.appendChild(img); | |||
| function dataURLtoFile(dataurl, filename) { | |||
| var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], | |||
| bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); | |||
| while (n--) { | |||
| u8arr[n] = bstr.charCodeAt(n); | |||
| } | |||
| file = new File([u8arr], filename, {type: mime}); | |||
| return new File([u8arr], filename, {type: mime}); | |||
| } | |||
| console.log(dataURLtoFile(image, 'aa.png')); | |||
| }) | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,89 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="en"> | |||
| <head> | |||
| <meta charset="UTF-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="ie=edge"> | |||
| <title>网页调取摄像头</title> | |||
| <link rel="stylesheet" href="video%20pro.css"> | |||
| </head> | |||
| <body> | |||
| <div class="auto"> | |||
| <video id="video" autoplay></video> | |||
| <canvas id="canvas" width="480" height="320" style="display: none;"></canvas> | |||
| <img src="./body_default.png" id="img" style="margin-left: 20px;"> | |||
| <div> | |||
| <button id="capture" title="点击进行拍照">拍照</button> | |||
| </div> | |||
| <div> | |||
| <button id="sure" title="是否用这张图片进行验证">确认</button> | |||
| </div> | |||
| </div> | |||
| <script> | |||
| var file ,stream; | |||
| //访问用户媒体设备的兼容方法 | |||
| function getUserMedia(constraints, success, error) { | |||
| if (navigator.mediaDevices.getUserMedia) { | |||
| //最新的标准API | |||
| navigator.mediaDevices.getUserMedia(constraints).then(success).catch(error); | |||
| } else if (navigator.getUserMedia) { | |||
| //旧版API | |||
| navigator.getUserMedia(constraints, success, error); | |||
| } | |||
| } | |||
| let video = document.getElementById('video'); | |||
| let canvas = document.getElementById('canvas'); | |||
| let context = canvas.getContext('2d'); | |||
| function success(stream) { | |||
| //兼容webkit核心浏览器 | |||
| let CompatibleURL = window.URL || window.webkitURL; | |||
| //将视频流设置为video元素的源 | |||
| console.log(stream); | |||
| stream = stream; | |||
| //video.src = CompatibleURL.createObjectURL(stream); | |||
| video.srcObject = stream; | |||
| video.play(); | |||
| } | |||
| function error(error) { | |||
| console.log(`访问用户媒体设备失败${error.name}, ${error.message}`); | |||
| } | |||
| if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia) { | |||
| //调用用户媒体设备, 访问摄像头 | |||
| getUserMedia({video : {width: 480, height: 320}}, success, error); | |||
| } else { | |||
| alert('不支持访问用户媒体'); | |||
| } | |||
| // base64转文件 | |||
| document.getElementById('capture').addEventListener('click', function () { | |||
| context.drawImage(video, 0, 0, 480, 320); | |||
| // 获取图片base64链接 | |||
| var image = canvas.toDataURL('image/png'); | |||
| // 定义一个img | |||
| var img = document.getElementById("img"); | |||
| //设置属性和src | |||
| //img.id = "imgBoxxx"; | |||
| img.src = image; | |||
| //将图片添加到页面中 | |||
| //document.body.appendChild(img); | |||
| function dataURLtoFile(dataurl, filename) { | |||
| var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], | |||
| bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); | |||
| while (n--) { | |||
| u8arr[n] = bstr.charCodeAt(n); | |||
| } | |||
| file = new File([u8arr], filename, {type: mime}); | |||
| return new File([u8arr], filename, {type: mime}); | |||
| } | |||
| console.log(dataURLtoFile(image, 'aa.png')); | |||
| }) | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,302 @@ | |||
| #include <Servo.h> | |||
| #include"LedControl.h" | |||
| LedControl lc=LedControl(12,11,13,1); | |||
| double _ABVAR_1_i = 0 ; | |||
| Servo servo_pin_4; | |||
| const int s0 = A3; | |||
| const int s1 = A4; | |||
| const int s2 = A1; | |||
| const int s3 = A5; | |||
| const int out = 8; | |||
| const int led = 7; | |||
| int red = 0; | |||
| int green = 0; | |||
| int blue = 0; | |||
| int _ABVAR_2_a = 0; | |||
| int _ABVAR_3_b = 0; | |||
| void trunright(); | |||
| void trunleft(); | |||
| void stop(); | |||
| void duo_ji(); | |||
| void forwoard_drop(); | |||
| void forwoard_rise(); | |||
| void back(); | |||
| void forwoard(); | |||
| void color(); | |||
| void pan_duan_yan_se(); | |||
| void led_left(); | |||
| void led_right(); | |||
| void led_forword(); | |||
| void setup() | |||
| { | |||
| pinMode(16 , INPUT); | |||
| pinMode(14, INPUT); | |||
| pinMode( 9 , OUTPUT); | |||
| pinMode( 10 , OUTPUT); | |||
| pinMode( 5 , OUTPUT); | |||
| pinMode( 6 , OUTPUT); | |||
| servo_pin_4.attach(4); | |||
| _ABVAR_1_i = 0 ; | |||
| pinMode(s0, OUTPUT); | |||
| pinMode(s1, OUTPUT); | |||
| pinMode(s2, OUTPUT); | |||
| pinMode(s3, OUTPUT); | |||
| pinMode(out, INPUT); | |||
| pinMode(led, OUTPUT); | |||
| digitalWrite(s0, HIGH); | |||
| digitalWrite(s1, HIGH); | |||
| lc.shutdown(0,false); | |||
| lc.setIntensity(0,8); | |||
| lc.clearDisplay(0); | |||
| lc.setRow(0,0,0xff); | |||
| lc.setRow(0,1,0xff); | |||
| lc.setRow(0,2,0xff); | |||
| lc.setRow(0,3,0xff); | |||
| lc.setRow(0,4,0xff); | |||
| lc.setRow(0,5,0xff); | |||
| lc.setRow(0,6,0xff); | |||
| lc.setRow(0,7,0xff); | |||
| } | |||
| void loop() | |||
| { | |||
| if (( digitalRead(14) && digitalRead(16) )) | |||
| { | |||
| forwoard(); | |||
| } | |||
| else | |||
| { | |||
| if (( !( digitalRead(14) ) && digitalRead(16) )) | |||
| { | |||
| trunright(); | |||
| } | |||
| else | |||
| { | |||
| if (( digitalRead(14) && !( digitalRead(16) ) )) | |||
| { | |||
| trunleft(); | |||
| } | |||
| else | |||
| { | |||
| if (( !( digitalRead(14) ) && !( digitalRead(16) ) )) | |||
| { | |||
| _ABVAR_1_i = ( _ABVAR_1_i + 1 ) ; | |||
| if (( ( _ABVAR_1_i ) == ( 1 ) )) | |||
| { | |||
| forwoard_rise(); | |||
| delay( 3000 ); | |||
| forwoard(); | |||
| delay( 1700 ); | |||
| } | |||
| else | |||
| { | |||
| if (( ( _ABVAR_1_i ) == ( 2 ) )) | |||
| { | |||
| forwoard_rise(); | |||
| delay(3000); | |||
| forwoard(); | |||
| delay( 500 ); | |||
| } | |||
| if (( ( _ABVAR_1_i ) == ( 3 ) )) | |||
| { | |||
| stop(); | |||
| digitalWrite(led, HIGH); | |||
| delay(500); | |||
| color(); | |||
| digitalWrite(led, LOW); | |||
| if (red < blue && red < green) | |||
| { | |||
| _ABVAR_2_a = 1; | |||
| //LcdDisplay(" - (Red Color)"); | |||
| } | |||
| else if (blue < red && blue < green) | |||
| { | |||
| _ABVAR_2_a = 2; | |||
| // LcdDisplay(" - (Blue Color)"); | |||
| } | |||
| else if (green < red && green < blue) | |||
| { | |||
| _ABVAR_2_a = 3; | |||
| // LcdDisplay(" - (Green Color)"); | |||
| } | |||
| while(((_ABVAR_2_a)!= (_ABVAR_3_b))) | |||
| { | |||
| pan_duan_yan_se(); | |||
| } | |||
| duo_ji(); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| void trunright() | |||
| { | |||
| led_right(); | |||
| analogWrite(9 , 200); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 0); | |||
| analogWrite(6 , 200); | |||
| } | |||
| void stop() | |||
| { | |||
| digitalWrite( 9 , LOW ); | |||
| digitalWrite( 10 , LOW ); | |||
| digitalWrite( 5 , LOW ); | |||
| digitalWrite( 6 , LOW ); | |||
| } | |||
| void forwoard_drop() | |||
| { | |||
| analogWrite(9 , 100); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 100); | |||
| analogWrite(6 , 0); | |||
| led_forword(); | |||
| } | |||
| void duo_ji() | |||
| { | |||
| servo_pin_4.write( 90 ); | |||
| delay( 300 ); | |||
| servo_pin_4.write(360 ); | |||
| delay( 600 ); | |||
| servo_pin_4.write( 0 ); | |||
| delay( 300 ); | |||
| } | |||
| void trunleft() | |||
| { | |||
| analogWrite(9 , 0); | |||
| analogWrite(10 , 200); | |||
| analogWrite(5 , 200); | |||
| analogWrite(6 , 0); | |||
| led_left(); | |||
| } | |||
| void forwoard() | |||
| { | |||
| analogWrite(9 , 200); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 200); | |||
| analogWrite(6 , 0); | |||
| led_forword(); | |||
| } | |||
| void back() | |||
| { | |||
| analogWrite(9 , 0); | |||
| analogWrite(10 , 120); | |||
| analogWrite(5 , 0); | |||
| analogWrite(6 , 120); | |||
| } | |||
| void forwoard_rise() | |||
| { | |||
| analogWrite(9 , 255); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 255); | |||
| analogWrite(6 , 0); | |||
| led_forword(); | |||
| } | |||
| void forwoard_rise1() | |||
| { | |||
| analogWrite(9 , 210); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 255); | |||
| analogWrite(6 , 0); | |||
| led_forword(); | |||
| } | |||
| void color() | |||
| { | |||
| digitalWrite(s2, LOW); | |||
| digitalWrite(s3, LOW); | |||
| //count OUT, pRed, RED | |||
| red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| digitalWrite(s3, HIGH); | |||
| //count OUT, pBLUE, BLUE | |||
| blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| digitalWrite(s2, HIGH); | |||
| //count OUT, pGreen, GREEN | |||
| green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| } | |||
| void pan_duan_yan_se() | |||
| { | |||
| forwoard(); | |||
| delay(600); | |||
| stop(); | |||
| digitalWrite(led, HIGH); | |||
| delay(500); | |||
| color(); | |||
| digitalWrite(led, LOW); | |||
| if (red < blue && red < green) | |||
| { | |||
| _ABVAR_3_b = 1; | |||
| // LcdDisplay(" - (Red Color)"); | |||
| } | |||
| else if (blue < red && blue < green) | |||
| { | |||
| _ABVAR_3_b = 2; | |||
| // LcdDisplay(" - (Blue Color)"); | |||
| } | |||
| else if (green < red && green < blue) | |||
| { | |||
| _ABVAR_3_b = 3; | |||
| // LcdDisplay(" - (Green Color)"); | |||
| } | |||
| } | |||
| void led_right() | |||
| { | |||
| lc.setRow(0,0,0x00); | |||
| lc.setRow(0,1,0x08); | |||
| lc.setRow(0,2,0x04); | |||
| lc.setRow(0,3,0x02); | |||
| lc.setRow(0,4,0x8f); | |||
| lc.setRow(0,5,0x02); | |||
| lc.setRow(0,6,0x04); | |||
| lc.setRow(0,7,0x08); | |||
| } | |||
| void led_left() | |||
| { | |||
| lc.setRow(0,0,0x00); | |||
| lc.setRow(0,1,0x10); | |||
| lc.setRow(0,2,0x20); | |||
| lc.setRow(0,3,0x40); | |||
| lc.setRow(0,4,0xfe); | |||
| lc.setRow(0,5,0x40); | |||
| lc.setRow(0,6,0x20); | |||
| lc.setRow(0,7,0x10); | |||
| } | |||
| void led_forword() | |||
| { | |||
| lc.setRow(0,0,0x08); | |||
| lc.setRow(0,1,0x1c); | |||
| lc.setRow(0,2,0x2a); | |||
| lc.setRow(0,3,0x49); | |||
| lc.setRow(0,4,0x08); | |||
| lc.setRow(0,5,0x08); | |||
| lc.setRow(0,6,0x08); | |||
| lc.setRow(0,7,0x08); | |||
| } | |||
| @@ -0,0 +1,223 @@ | |||
| #include <Servo.h> | |||
| int _ABVAR_1_i = 0 ; | |||
| Servo servo_pin_4; | |||
| const int s0 = A0; | |||
| const int s1 = A1; | |||
| const int s2 = A4; | |||
| const int s3 = A5; | |||
| const int out = 8; | |||
| const int led = 7; | |||
| const int xun_ji1 = 3; | |||
| const int xun_ji2 = A3; | |||
| const int xun_ji3 = A2; | |||
| int red = 0; | |||
| int green = 0; | |||
| int blue = 0; | |||
| int _ABVAR_2_a = 0; | |||
| int _ABVAR_3_b = 0; | |||
| void trunright(); | |||
| void trunleft(); | |||
| void stop(); | |||
| void duo_ji(); | |||
| void forwoard_drop(); | |||
| void forwoard_rise(); | |||
| void back(); | |||
| void forwoard(); | |||
| void color(); | |||
| void pan_duan_yan_se(); | |||
| void setup() | |||
| { | |||
| pinMode(xun_ji1 , INPUT); | |||
| pinMode( xun_ji2, INPUT); | |||
| pinMode( xun_ji3, INPUT); | |||
| pinMode( 10, OUTPUT); | |||
| pinMode( 6, OUTPUT); | |||
| pinMode( 5, OUTPUT); | |||
| pinMode( 9, OUTPUT); | |||
| pinMode( 9 , OUTPUT); | |||
| pinMode( 10 , OUTPUT); | |||
| pinMode( 5 , OUTPUT); | |||
| pinMode( 6 , OUTPUT); | |||
| servo_pin_4.attach(4); | |||
| _ABVAR_1_i = 0 ; | |||
| pinMode(s0, OUTPUT); | |||
| pinMode(s1, OUTPUT); | |||
| pinMode(s2, OUTPUT); | |||
| pinMode(s3, OUTPUT); | |||
| pinMode(out, INPUT); | |||
| pinMode(led, OUTPUT); | |||
| digitalWrite(s0, HIGH); | |||
| digitalWrite(s1, HIGH); | |||
| } | |||
| void loop() | |||
| { | |||
| if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && digitalRead(xun_ji2) )) | |||
| { | |||
| back(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) )) | |||
| { | |||
| trunright(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && !( digitalRead(xun_ji2) ) )) | |||
| { | |||
| forwoard(); | |||
| } | |||
| else | |||
| { | |||
| if (( digitalRead(xun_ji3) && ( !( digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) ) )) | |||
| { | |||
| trunright(); | |||
| } | |||
| else | |||
| { | |||
| if (( !( digitalRead(xun_ji3) ) && ( digitalRead(xun_ji2) && digitalRead(xun_ji1) ) )) | |||
| { | |||
| trunleft(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( !( digitalRead(xun_ji3) ) && !( digitalRead(xun_ji2) ) ) && digitalRead(xun_ji1) )) | |||
| { | |||
| trunleft(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( _ABVAR_1_i ) == ( 1 ) ))//小车开始识别色牌 | |||
| { | |||
| stop(); | |||
| digitalWrite(led, HIGH); | |||
| delay(500); | |||
| color(); | |||
| digitalWrite(led, LOW); | |||
| if (red < blue && red < green) | |||
| { | |||
| _ABVAR_2_a = 1; | |||
| //LcdDisplay(" - (Red Color)"); | |||
| } | |||
| else if (blue < red && blue < green) | |||
| { | |||
| _ABVAR_2_a = 2; | |||
| // LcdDisplay(" - (Blue Color)"); | |||
| } | |||
| else if (green < red && green < blue) | |||
| { | |||
| _ABVAR_2_a = 3; | |||
| // LcdDisplay(" - (Green Color)"); | |||
| } | |||
| while(((_ABVAR_2_a)!= (_ABVAR_3_b))) | |||
| { | |||
| pan_duan_yan_se(); | |||
| } | |||
| stop(); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| void trunright() | |||
| { | |||
| analogWrite(9 , 180); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 0); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void stop() | |||
| { | |||
| digitalWrite( 9 , LOW ); | |||
| digitalWrite( 10 , LOW ); | |||
| digitalWrite( 5 , LOW ); | |||
| digitalWrite( 6 , LOW ); | |||
| } | |||
| void forwoard_drop() | |||
| { | |||
| analogWrite(9 , 80); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 80); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void trunleft() | |||
| { | |||
| analogWrite(9 , 0); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 180); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void forwoard() | |||
| { | |||
| analogWrite(9 , 180); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 180); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void back() | |||
| { | |||
| analogWrite(9 , 0); | |||
| analogWrite(10 , 120); | |||
| analogWrite(5 , 0); | |||
| analogWrite(6 , 120); | |||
| } | |||
| void forwoard_rise() | |||
| { | |||
| analogWrite(9 , 255); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 255); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void color() | |||
| { | |||
| digitalWrite(s2, LOW); | |||
| digitalWrite(s3, LOW); | |||
| //count OUT, pRed, RED | |||
| red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| digitalWrite(s3, HIGH); | |||
| //count OUT, pBLUE, BLUE | |||
| blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| digitalWrite(s2, HIGH); | |||
| //count OUT, pGreen, GREEN | |||
| green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| } | |||
| void pan_duan_yan_se() | |||
| { | |||
| forwoard(); | |||
| delay(600); | |||
| stop(); | |||
| digitalWrite(led, HIGH); | |||
| delay(500); | |||
| color(); | |||
| digitalWrite(led, LOW); | |||
| if (red < blue && red < green) | |||
| { | |||
| _ABVAR_3_b = 1; | |||
| // LcdDisplay(" - (Red Color)"); | |||
| } | |||
| else if (blue < red && blue < green) | |||
| { | |||
| _ABVAR_3_b = 2; | |||
| // LcdDisplay(" - (Blue Color)"); | |||
| } | |||
| else if (green < red && green < blue) | |||
| { | |||
| _ABVAR_3_b = 3; | |||
| // LcdDisplay(" - (Green Color)"); | |||
| } | |||
| } | |||
| @@ -0,0 +1,12 @@ | |||
| 项目进展情况: | |||
| 1.通过查找获取了两套数据集: | |||
| (1)武汉大学开源的口罩遮挡人脸数据集:Real-World Masked Face Dataset,简称 RMFD。 | |||
| (2)亚洲人脸数据集 | |||
| 该两套数据集都提供了人脸图片集和对应带口罩的数据集,与该项目的训练所需的数据相关。 | |||
| 2.选用百度飞桨开源的PaddlePaddle深度学习框架进行模型搭建,PaddlePaddle 是一个易用、高效、灵活、可扩展的深度学习框架。并且有很多成熟的预训练模型。 | |||
| 3.通过走访人员聚集场所,结合当下疫情形式, | |||
| @@ -0,0 +1,261 @@ | |||
| #include <Servo.h> | |||
| int _ABVAR_1_i = 0 ; | |||
| Servo servo_pin_4; | |||
| const int s0 = A3; | |||
| const int s1 = A4; | |||
| const int s2 = A1; | |||
| const int s3 = A5; | |||
| const int out = 8; | |||
| const int led = 7; | |||
| const int xun_ji1 = A2; | |||
| const int xun_ji2 = 3; | |||
| const int xun_ji3 = A0; | |||
| int red = 0; | |||
| int green = 0; | |||
| int blue = 0; | |||
| int _ABVAR_2_a = 0; | |||
| int _ABVAR_3_b = 0; | |||
| void trunright(); | |||
| void trunleft(); | |||
| void stop(); | |||
| void duo_ji(); | |||
| void forwoard_drop(); | |||
| void forwoard_rise(); | |||
| void back(); | |||
| void forwoard(); | |||
| void color(); | |||
| void pan_duan_yan_se(); | |||
| void setup() | |||
| { | |||
| pinMode(xun_ji1 , INPUT); | |||
| pinMode( xun_ji2, INPUT); | |||
| pinMode( xun_ji3, INPUT); | |||
| pinMode( 10, OUTPUT); | |||
| pinMode( 6, OUTPUT); | |||
| pinMode( 5, OUTPUT); | |||
| pinMode( 9, OUTPUT); | |||
| pinMode( 9 , OUTPUT); | |||
| pinMode( 10 , OUTPUT); | |||
| pinMode( 5 , OUTPUT); | |||
| pinMode( 6 , OUTPUT); | |||
| servo_pin_4.attach(4); | |||
| _ABVAR_1_i = 0 ; | |||
| pinMode(s0, OUTPUT); | |||
| pinMode(s1, OUTPUT); | |||
| pinMode(s2, OUTPUT); | |||
| pinMode(s3, OUTPUT); | |||
| pinMode(out, INPUT); | |||
| pinMode(led, OUTPUT); | |||
| digitalWrite(s0, HIGH); | |||
| digitalWrite(s1, HIGH); | |||
| } | |||
| void loop() | |||
| { | |||
| if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && digitalRead(xun_ji2) )) | |||
| { | |||
| back(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) )) | |||
| { | |||
| trunleft(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && !( digitalRead(xun_ji2) ) )) | |||
| { | |||
| forwoard(); | |||
| } | |||
| else | |||
| { | |||
| if (( digitalRead(xun_ji3) && ( !( digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) ) )) | |||
| { | |||
| trunleft(); | |||
| } | |||
| else | |||
| { | |||
| if (( !( digitalRead(xun_ji3) ) && ( digitalRead(xun_ji2) && digitalRead(xun_ji1) ) )) | |||
| { | |||
| trunright(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( !( digitalRead(xun_ji3) ) && !( digitalRead(xun_ji2) ) ) && digitalRead(xun_ji1) )) | |||
| { | |||
| trunright(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( !( digitalRead(xun_ji3) ) && !( digitalRead(xun_ji2) ) ) && !( digitalRead(xun_ji1) ) )) | |||
| { | |||
| _ABVAR_1_i = ( _ABVAR_1_i + 1 ) ; | |||
| if (( ( _ABVAR_1_i ) == ( 1 ) )) | |||
| { | |||
| forwoard_rise(); | |||
| delay( 1500 ); | |||
| forwoard(); | |||
| delay( 5000 ); | |||
| } | |||
| else | |||
| { | |||
| if (( ( _ABVAR_1_i ) == ( 2 ) )) | |||
| { | |||
| forwoard_rise(); | |||
| delay( 3000 ); | |||
| forwoard(); | |||
| delay( 500 ); | |||
| } | |||
| else | |||
| { | |||
| if (( ( _ABVAR_1_i ) == ( 3 ) )) | |||
| { | |||
| stop(); | |||
| digitalWrite(led, HIGH); | |||
| delay(500); | |||
| color(); | |||
| digitalWrite(led, LOW); | |||
| if (red < blue && red < green) | |||
| { | |||
| _ABVAR_2_a = 1; | |||
| //LcdDisplay(" - (Red Color)"); | |||
| } | |||
| else if (blue < red && blue < green) | |||
| { | |||
| _ABVAR_2_a = 2; | |||
| // LcdDisplay(" - (Blue Color)"); | |||
| } | |||
| else if (green < red && green < blue) | |||
| { | |||
| _ABVAR_2_a = 3; | |||
| // LcdDisplay(" - (Green Color)"); | |||
| } | |||
| while(((_ABVAR_2_a)!= (_ABVAR_3_b))) | |||
| { | |||
| pan_duan_yan_se(); | |||
| } | |||
| duo_ji(); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| void trunright() | |||
| { | |||
| analogWrite(9 , 180); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 0); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void stop() | |||
| { | |||
| digitalWrite( 9 , LOW ); | |||
| digitalWrite( 10 , LOW ); | |||
| digitalWrite( 5 , LOW ); | |||
| digitalWrite( 6 , LOW ); | |||
| } | |||
| void forwoard_drop() | |||
| { | |||
| analogWrite(9 , 80); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 80); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void duo_ji() | |||
| { | |||
| servo_pin_4.write( 90 ); | |||
| delay( 300 ); | |||
| servo_pin_4.write( 180 ); | |||
| delay( 600 ); | |||
| servo_pin_4.write( 90 ); | |||
| delay( 300 ); | |||
| } | |||
| void trunleft() | |||
| { | |||
| analogWrite(9 , 0); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 180); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void forwoard() | |||
| { | |||
| analogWrite(9 , 180); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 180); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void back() | |||
| { | |||
| analogWrite(9 , 0); | |||
| analogWrite(10 , 120); | |||
| analogWrite(5 , 0); | |||
| analogWrite(6 , 120); | |||
| } | |||
| void forwoard_rise() | |||
| { | |||
| analogWrite(9 , 255); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 255); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void color() | |||
| { | |||
| digitalWrite(s2, LOW); | |||
| digitalWrite(s3, LOW); | |||
| //count OUT, pRed, RED | |||
| red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| digitalWrite(s3, HIGH); | |||
| //count OUT, pBLUE, BLUE | |||
| blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| digitalWrite(s2, HIGH); | |||
| //count OUT, pGreen, GREEN | |||
| green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| } | |||
| void pan_duan_yan_se() | |||
| { | |||
| forwoard(); | |||
| delay(600); | |||
| stop(); | |||
| digitalWrite(led, HIGH); | |||
| delay(500); | |||
| color(); | |||
| digitalWrite(led, LOW); | |||
| if (red < blue && red < green) | |||
| { | |||
| _ABVAR_3_b = 1; | |||
| // LcdDisplay(" - (Red Color)"); | |||
| } | |||
| else if (blue < red && blue < green) | |||
| { | |||
| _ABVAR_3_b = 2; | |||
| // LcdDisplay(" - (Blue Color)"); | |||
| } | |||
| else if (green < red && green < blue) | |||
| { | |||
| _ABVAR_3_b = 3; | |||
| // LcdDisplay(" - (Green Color)"); | |||
| } | |||
| } | |||
| @@ -0,0 +1,185 @@ | |||
| C3560 Boot Loader (C3560-HBOOT-M) Version 12.2(25r)SEC, RELEASE SOFTWARE (fc4) | |||
| cisco WS-C3560-24PS (PowerPC405) processor (revision P0) with 122880K/8184K bytes of memory. | |||
| 3560-24PS starting... | |||
| Base ethernet MAC Address: 000C.851A.E348 | |||
| Xmodem file system is available. | |||
| Initializing Flash... | |||
| flashfs[0]: 3 files, 0 directories | |||
| flashfs[0]: 0 orphaned files, 0 orphaned directories | |||
| flashfs[0]: Total bytes: 64016384 | |||
| flashfs[0]: Bytes used: 8918011 | |||
| flashfs[0]: Bytes available: 55098373 | |||
| flashfs[0]: flashfs fsck took 1 seconds. | |||
| ...done Initializing Flash. | |||
| Boot Sector Filesystem (bs:) installed, fsid: 3 | |||
| Parameter Block Filesystem (pb:) installed, fsid: 4 | |||
| Loading "flash:/c3560-advipservicesk9-mz.122-37.SE1.bin"... | |||
| ########################################################################## [OK] | |||
| Restricted Rights Legend | |||
| Use, duplication, or disclosure by the Government is | |||
| subject to restrictions as set forth in subparagraph | |||
| (c) of the Commercial Computer Software - Restricted | |||
| Rights clause at FAR sec. 52.227-19 and subparagraph | |||
| (c) (1) (ii) of the Rights in Technical Data and Computer | |||
| Software clause at DFARS sec. 252.227-7013. | |||
| cisco Systems, Inc. | |||
| 170 West Tasman Drive | |||
| San Jose, California 95134-1706 | |||
| Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(37)SE1, RELEASE SOFTWARE (fc1) | |||
| Copyright (c) 1986-2007 by Cisco Systems, Inc. | |||
| Compiled Thu 05-Jul-07 22:22 by pt_team | |||
| Image text-base: 0x00003000, data-base: 0x01500000 | |||
| POST: CPU MIC register Tests : Begin | |||
| POST: CPU MIC register Tests : End, Status Passed | |||
| POST: PortASIC Memory Tests : Begin | |||
| POST: PortASIC Memory Tests : End, Status Passed | |||
| POST: CPU MIC interface Loopback Tests : Begin | |||
| POST: CPU MIC interface Loopback Tests : End, Status Passed | |||
| POST: PortASIC RingLoopback Tests : Begin | |||
| POST: PortASIC RingLoopback Tests : End, Status Passed | |||
| POST: Inline Power Controller Tests : Begin | |||
| POST: Inline Power Controller Tests : End, Status Passed | |||
| POST: PortASIC CAM Subsystem Tests : Begin | |||
| POST: PortASIC CAM Subsystem Tests : End, Status Passed | |||
| POST: PortASIC Port Loopback Tests : Begin | |||
| POST: PortASIC Port Loopback Tests : End, Status Passed | |||
| Waiting for Port download...Complete | |||
| --More-- | |||
| This product contains cryptographic features and is subject to United | |||
| States and local country laws governing import, export, transfer and | |||
| use. Delivery of Cisco cryptographic products does not imply | |||
| third-party authority to import, export, distribute or use encryption. | |||
| Importers, exporters, distributors and users are responsible for | |||
| compliance with U.S. and local country laws. By using this product you | |||
| agree to comply with applicable laws and regulations. If you are unable | |||
| to comply with U.S. and local laws, return this product immediately. | |||
| A summary of U.S. laws governing Cisco cryptographic products may be found at: | |||
| http://www.cisco.com/wwl/export/crypto/tool/stqrg.html | |||
| If you require further assistance please contact us by sending email to | |||
| export@cisco.com. | |||
| cisco WS-C3560-24PS (PowerPC405) processor (revision P0) with 122880K/8184K bytes of memory. | |||
| Processor board ID CAT1037RJF7 | |||
| 24 FastEthernet/IEEE 802.3 interface(s) | |||
| 2 Gigabit Ethernet/IEEE 802.3 interface(s) | |||
| 63488K bytes of flash-simulated non-volatile configuration memory. | |||
| Base ethernet MAC Address : 000C.851A.E348 | |||
| Motherboard assembly number : 73-9673-09 | |||
| Power supply part number : 341-0029-05 | |||
| Motherboard serial number : CAT103758VY | |||
| Power supply serial number : DTH1036C7UB | |||
| Model revision number : P0 | |||
| Motherboard revision number : A0 | |||
| Model number : WS-C3560-24PS-E | |||
| System serial number : CAT1037RJF7 | |||
| Top Assembly Part Number : 800-26380-04 | |||
| Top Assembly Revision Number : B0 | |||
| Version ID : V06 | |||
| CLEI Code Number : COM1100ARC | |||
| Hardware Board Revision Number : 0x01 | |||
| Switch Ports Model SW Version SW Image | |||
| ------ ----- ----- ---------- ---------- | |||
| * 1 26 WS-C3560-24PS 12.2(37)SE1 C3560-ADVIPSERVICESK | |||
| Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(37)SE1, RELEASE SOFTWARE (fc1) | |||
| Copyright (c) 1986-2007 by Cisco Systems, Inc. | |||
| Compiled Thu 05-Jul-07 22:22 by pt_team | |||
| Press RETURN to get started! | |||
| %LINK-5-CHANGED: Interface FastEthernet0/1, changed state to up | |||
| %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to up | |||
| %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down | |||
| %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to up | |||
| Switch>en | |||
| Switch#conf t | |||
| Enter configuration commands, one per line. End with CNTL/Z. | |||
| Switch(config)#int f0/1 | |||
| Switch(config-if)#switch trunk encap dot1q | |||
| Switch(config-if)#switch mode trunk | |||
| Switch(config-if)#exit | |||
| Switch(config)#exit | |||
| Switch# | |||
| %SYS-5-CONFIG_I: Configured from console by console | |||
| Switch#conf t | |||
| Enter configuration commands, one per line. End with CNTL/Z. | |||
| Switch(config)#vlan 10 | |||
| Switch(config-vlan)#vlan 20 | |||
| Switch(config-vlan)#vlan 30 | |||
| Switch(config-vlan)#eixt | |||
| ^ | |||
| % Invalid input detected at '^' marker. | |||
| Switch(config-vlan)#ex | |||
| Switch(config)#int vlan 10 | |||
| Switch(config-if)# | |||
| %LINK-5-CHANGED: Interface Vlan10, changed state to up | |||
| %LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan10, changed state to up | |||
| Switch(config-if)#ip address 192.168.10.254 255.255.255.0 | |||
| Switch(config-if)#no shutdown | |||
| Switch(config-if)#int vlan 20 | |||
| Switch(config-if)# | |||
| %LINK-5-CHANGED: Interface Vlan20, changed state to up | |||
| %LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan20, changed state to up | |||
| Switch(config-if)#ip address 192.168.20.254 255.255.255.0 | |||
| Switch(config-if)#no shutdown | |||
| Switch(config-if)#int vlan 30 | |||
| Switch(config-if)# | |||
| %LINK-5-CHANGED: Interface Vlan30, changed state to up | |||
| %LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan30, changed state to up | |||
| Switch(config-if)#ip address 192.168.30.254 255.255.255.0 | |||
| Switch(config-if)#no shutdown | |||
| Switch(config-if)#exit | |||
| Switch(config)#ip routing | |||
| Switch(config)#int f0/2 | |||
| Switch(config-if)#no switch | |||
| Switch(config-if)#ip address 10.1.1.1 255.255.255.0 | |||
| Switch(config-if)#no shutdown | |||
| Switch(config-if)#router rip | |||
| Switch(config-router)#no auto-summary | |||
| Switch(config-router)#network 192.168.10.0 | |||
| Switch(config-router)#network 192.168.20.0 | |||
| Switch(config-router)#network 192.168.30.0 | |||
| Switch(config-router)#network 10.1.1.0 | |||
| Switch(config-router)# | |||
| Switch# | |||
| %SYS-5-CONFIG_I: Configured from console by console | |||
| Switch# | |||
| @@ -0,0 +1,41 @@ | |||
| sudo apt-get update && sudo apt-get upgrade | |||
| sudo apt-get install build-essential cmake pkg-config | |||
| sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng-dev | |||
| sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev | |||
| sudo apt-get install libxvidcore-dev libx264-dev | |||
| sudo apt-get install libfontconfig1-dev libcairo2-dev | |||
| sudo apt-get install libgdk-pixbuf2.0 -dev libpango1.0 -dev | |||
| sudo apt-get install libgtk2.0 -dev libgtk- 3 -dev | |||
| sudo apt-get install libatlas-base-dev gfortran | |||
| sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-103 | |||
| sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5 | |||
| sudo apt-get install python3-dev | |||
| wget https://bootstrap.pypa.io/get-pip.py | |||
| sudo python get-pip.py | |||
| sudo python3 get-pip.py | |||
| sudo rm -rf ~/.cache/pip | |||
| sudo pip install virtualenv virtualenvwrapper | |||
| nano ~/.bashrc | |||
| # virtualenv and virtualenvwrapper | |||
| export WORKON_HOME=$HOME/.virtualenvs | |||
| export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 | |||
| source /usr/local/bin/virtualenvwrapper.sh | |||
| source ~/.bashrc | |||
| mkvirtualenv cv -p python3 | |||
| pip install "picamera[array]" | |||
| pip install opencv-contrib-python | |||
| @@ -0,0 +1,261 @@ | |||
| #include <Servo.h> | |||
| int _ABVAR_1_i = 0 ; | |||
| Servo servo_pin_4; | |||
| const int s0 = A3; | |||
| const int s1 = A4; | |||
| const int s2 = A1; | |||
| const int s3 = A5; | |||
| const int out = 8; | |||
| const int led = 7; | |||
| const int xun_ji1 = A2; | |||
| const int xun_ji2 = 3; | |||
| const int xun_ji3 = A0; | |||
| int red = 0; | |||
| int green = 0; | |||
| int blue = 0; | |||
| int _ABVAR_2_a = 0; | |||
| int _ABVAR_3_b = 0; | |||
| void trunright(); | |||
| void trunleft(); | |||
| void stop(); | |||
| void duo_ji(); | |||
| void forwoard_drop(); | |||
| void forwoard_rise(); | |||
| void back(); | |||
| void forwoard(); | |||
| void color(); | |||
| void pan_duan_yan_se(); | |||
| void setup() | |||
| { | |||
| pinMode(xun_ji1 , INPUT); | |||
| pinMode( xun_ji2, INPUT); | |||
| pinMode( xun_ji3, INPUT); | |||
| pinMode( 10, OUTPUT); | |||
| pinMode( 6, OUTPUT); | |||
| pinMode( 5, OUTPUT); | |||
| pinMode( 9, OUTPUT); | |||
| pinMode( 9 , OUTPUT); | |||
| pinMode( 10 , OUTPUT); | |||
| pinMode( 5 , OUTPUT); | |||
| pinMode( 6 , OUTPUT); | |||
| servo_pin_4.attach(4); | |||
| _ABVAR_1_i = 0 ; | |||
| pinMode(s0, OUTPUT); | |||
| pinMode(s1, OUTPUT); | |||
| pinMode(s2, OUTPUT); | |||
| pinMode(s3, OUTPUT); | |||
| pinMode(out, INPUT); | |||
| pinMode(led, OUTPUT); | |||
| digitalWrite(s0, HIGH); | |||
| digitalWrite(s1, HIGH); | |||
| } | |||
| void loop() | |||
| { | |||
| if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && digitalRead(xun_ji2) )) | |||
| { | |||
| back(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) )) | |||
| { | |||
| trunleft(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && !( digitalRead(xun_ji2) ) )) | |||
| { | |||
| forwoard(); | |||
| } | |||
| else | |||
| { | |||
| if (( digitalRead(xun_ji3) && ( !( digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) ) )) | |||
| { | |||
| trunleft(); | |||
| } | |||
| else | |||
| { | |||
| if (( !( digitalRead(xun_ji3) ) && ( digitalRead(xun_ji2) && digitalRead(xun_ji1) ) )) | |||
| { | |||
| trunright(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( !( digitalRead(xun_ji3) ) && !( digitalRead(xun_ji2) ) ) && digitalRead(xun_ji1) )) | |||
| { | |||
| trunright(); | |||
| } | |||
| else | |||
| { | |||
| if (( ( !( digitalRead(xun_ji3) ) && !( digitalRead(xun_ji2) ) ) && !( digitalRead(xun_ji1) ) )) | |||
| { | |||
| _ABVAR_1_i = ( _ABVAR_1_i + 1 ) ; | |||
| if (( ( _ABVAR_1_i ) == ( 1 ) )) | |||
| { | |||
| forwoard_rise(); | |||
| delay( 1500 ); | |||
| forwoard(); | |||
| delay( 5000 ); | |||
| } | |||
| else | |||
| { | |||
| if (( ( _ABVAR_1_i ) == ( 2 ) )) | |||
| { | |||
| forwoard_rise(); | |||
| delay( 3000 ); | |||
| forwoard(); | |||
| delay( 500 ); | |||
| } | |||
| else | |||
| { | |||
| if (( ( _ABVAR_1_i ) == ( 3 ) )) | |||
| { | |||
| stop(); | |||
| digitalWrite(led, HIGH); | |||
| delay(500); | |||
| color(); | |||
| digitalWrite(led, LOW); | |||
| if (red < blue && red < green) | |||
| { | |||
| _ABVAR_2_a = 1; | |||
| //LcdDisplay(" - (Red Color)"); | |||
| } | |||
| else if (blue < red && blue < green) | |||
| { | |||
| _ABVAR_2_a = 2; | |||
| // LcdDisplay(" - (Blue Color)"); | |||
| } | |||
| else if (green < red && green < blue) | |||
| { | |||
| _ABVAR_2_a = 3; | |||
| // LcdDisplay(" - (Green Color)"); | |||
| } | |||
| while(((_ABVAR_2_a)!= (_ABVAR_3_b))) | |||
| { | |||
| pan_duan_yan_se(); | |||
| } | |||
| duo_ji(); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| void trunright() | |||
| { | |||
| analogWrite(9 , 180); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 0); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void stop() | |||
| { | |||
| digitalWrite( 9 , LOW ); | |||
| digitalWrite( 10 , LOW ); | |||
| digitalWrite( 5 , LOW ); | |||
| digitalWrite( 6 , LOW ); | |||
| } | |||
| void forwoard_drop() | |||
| { | |||
| analogWrite(9 , 80); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 80); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void duo_ji() | |||
| { | |||
| servo_pin_4.write( 90 ); | |||
| delay( 300 ); | |||
| servo_pin_4.write( 180 ); | |||
| delay( 600 ); | |||
| servo_pin_4.write( 90 ); | |||
| delay( 300 ); | |||
| } | |||
| void trunleft() | |||
| { | |||
| analogWrite(9 , 0); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 180); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void forwoard() | |||
| { | |||
| analogWrite(9 , 180); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 180); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void back() | |||
| { | |||
| analogWrite(9 , 0); | |||
| analogWrite(10 , 120); | |||
| analogWrite(5 , 0); | |||
| analogWrite(6 , 120); | |||
| } | |||
| void forwoard_rise() | |||
| { | |||
| analogWrite(9 , 255); | |||
| analogWrite(10 , 0); | |||
| analogWrite(5 , 255); | |||
| analogWrite(6 , 0); | |||
| } | |||
| void color() | |||
| { | |||
| digitalWrite(s2, LOW); | |||
| digitalWrite(s3, LOW); | |||
| //count OUT, pRed, RED | |||
| red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| digitalWrite(s3, HIGH); | |||
| //count OUT, pBLUE, BLUE | |||
| blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| digitalWrite(s2, HIGH); | |||
| //count OUT, pGreen, GREEN | |||
| green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
| } | |||
| void pan_duan_yan_se() | |||
| { | |||
| forwoard(); | |||
| delay(600); | |||
| stop(); | |||
| digitalWrite(led, HIGH); | |||
| delay(500); | |||
| color(); | |||
| digitalWrite(led, LOW); | |||
| if (red < blue && red < green) | |||
| { | |||
| _ABVAR_3_b = 1; | |||
| // LcdDisplay(" - (Red Color)"); | |||
| } | |||
| else if (blue < red && blue < green) | |||
| { | |||
| _ABVAR_3_b = 2; | |||
| // LcdDisplay(" - (Blue Color)"); | |||
| } | |||
| else if (green < red && green < blue) | |||
| { | |||
| _ABVAR_3_b = 3; | |||
| // LcdDisplay(" - (Green Color)"); | |||
| } | |||
| } | |||
| @@ -0,0 +1,2 @@ | |||
| deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib | |||
| deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib | |||