서보모터 제어하기 from raspberry To Arduino 라즈베리파이/아두이노2016. 2. 8. 15:53
제어 영상:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import RPi.GPIO as GPIO import serial import time port = "/dev/ttyACM0" //아두이노와 통신하기 위해서 포트를 설정한다. serialToArduino = serial.Serial(port, 9600) // 9600으로 아두이노와 시리얼 통신을 한다. //스위치 핀들을 입력 모드로 설정한다. GPIO.setmode(GPIO.BCM) GPIO.setup(24, GPIO.IN) GPIO.setup(25, GPIO.IN) //아두이노에 보낼 변수들 message = "1500" endMark = 'E' print "Ready to communication!" //파일 시작을 알리는 글 while True: if(GPIO.input(25) == True): //25번 핀에 연결된 스위치를 누르면 message = "500" elif(GPIO.input(24) == True): //24번 핀에 연결된 스위치를 누르면 message = "2500" else: //아무것도 누르지 않으면 message = "1500" serialToArduino.writelines(message) //보내고 싶은 데이터를 보낸다. serialToArduino.write(endMark)//데이터의 마지막을 알린다. print(" sendind message: " + message + str(endMark) ) //사용자가 확인할 수 있도록 터미널 창에 뜨는 글 time.sleep(.5) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | const int servo=2; int pw=1500; char char_value = 0; int int_value = 0; const char endMark = 'E'; void setup() { Serial.begin(9600); pinMode(servo, OUTPUT); } void loop() { if(Serial.available()) { char_value = Serial.read(); if(isDigit(char_value)) { int_value = (int_value*10) + (char_value - '0'); //each successive number is multiplied by 10. //for example, the value of the number 234 is 2*100 + 3*10 + 4. } else if(char_value == endMark) { pw = int_value; //storge the received value from RPi int_value = 0; //reset int_value to 0 ready for the next sequence of digits } } drive_servo(pw); //input the high pulse delay } void drive_servo(int val) { //period is 20ms. digitalWrite(servo, HIGH); delayMicroseconds(pw); digitalWrite(servo, LOW); delayMicroseconds(20000-pw); } |
'라즈베리파이 > 아두이노' 카테고리의 다른 글
Serial To Arduino (0) | 2016.02.08 |
---|---|
Serial From Arduino (0) | 2016.02.08 |
아두이노 설치 (0) | 2016.02.08 |