255보다 큰 정수를 보내야합니까? 누구든지이 작업을 수행하는 방법을 알고 있습니까?PySerial에서 Arduino로 정수 값 보내기
1
A
답변
3
파이썬의 struct
모듈로 이진 문자열로 인코딩합니다. arduino가 little-endian 또는 big-endian을 원한다면 나는 알지 못하지만, 이것에 대한 문서가 명확하지 않으면 약간의 실험을 통해 쉽게 문제를 해결해야합니다. 여기
+1
Note : Arduino는 리틀 엔디안입니다. 구조 모듈을 사용하여 엔디안을 바꿀 수는 있지만 꼭 할 필요는 없습니다. 단지 기록을 위해, 나는 Intel x86 mac osx 10.6.4에있었습니다. 파이썬 2.6.1, 64 비트. – toddstavish
4
방법 (아이디어 주셔서 감사합니다, 알렉스!)입니다 :
파이썬 :
def packIntegerAsULong(value):
"""Packs a python 4 byte unsigned integer to an arduino unsigned long"""
return struct.pack('I', value) #should check bounds
# To see what it looks like on python side
val = 15000
print binascii.hexlify(port.packIntegerAsULong(val))
# send and receive via pyserial
ser = serial.Serial(serialport, bps, timeout=1)
ser.write(packIntegerAsULong(val))
line = ser.readLine()
print line
아두 이노 :
unsigned long readULongFromBytes() {
union u_tag {
byte b[4];
unsigned long ulval;
} u;
u.b[0] = Serial.read();
u.b[1] = Serial.read();
u.b[2] = Serial.read();
u.b[3] = Serial.read();
return u.ulval;
}
unsigned long val = readULongFromBytes();
Serial.print(val, DEC); // send to python to check
0
방법 쉽게 :
crc_out = binascii.crc32(data_out) & 0xffffffff # create unsigned long
print "crc bytes written",arduino.write(struct.pack('<L', crc_out)) #L, I whatever u like to use just use 4 bytes value
unsigned long crc_python = 0;
for(uint8_t i=0;i<4;i++){
crc_python |= ((long) Serial.read() << (i*8));
}
없음 조합 필요하고 짧다!
관련 문제
- 1. Arduino로 물체 감지하기
- 2. Arduino로 Android를 작동하십시오.
- 3. 파싱 정수 값
- 4. 반전 정수 값
- 5. 정수 변수의 값 검색
- 6. SQLite3 정수 최대 값
- 7. 문자열의 정수 값
- 8. 정수 문자열 해시 값
- 9. 링크를 통해 값 보내기
- 10. Beautify 문자열 비교를위한 정수 값
- 11. 배열의 내용으로 정수 값 추가하기
- 12. 나중에 아이폰을위한 정수 값 저장하기
- 13. PySerial에서 pySerial을 사용하여 입/출력 오류 받기
- 14. 서블릿에서 JSP로 여러 값 보내기
- 15. NSTextField의 값 보내기 : objective c
- 16. Iframe에 값 보내기 HTML 페이지
- 17. Arduino로 HTTP 응답을 구문 분석 할 라이브러리
- 18. Asp.Net Mvc 문자열에서 정수 값 가져 오기
- 19. 문자열 객체에 정수 값 읽기/쓰기
- 20. 포트란 : 크기의 처리 정수 값 : ~ 700000000000
- 21. SQL에서 값 0을 제외한 재정렬 정수
- 22. Java 프로그래밍 : 정수 값 (16 진수)
- 23. 문자열을 분리하는 문자열 및 정수 값
- 24. C++에서 char 문자열에 정수 값 지정
- 25. 변환 Enum UNDERLYING 정수 값 toString
- 26. 망치의 CRF에 대한 정수 값 피처 처리
- 27. ASCII 표현 대신 MASM StdOut 정수 값
- 28. 입력 형식을 지정하는 방법에만 정수 값 동의
- 29. 소수 및 정수 값 유효성 검사
- 30. MainViewModel에서 다른 ViewModel로 값 보내기 또는 보내기 mvvm mvvm light
'Serial.print()'는 ASCII 변환 ('itoa' 또는 유사)을 수행합니까, 아니면 이진수로 숫자를 보내고 있습니까? AVR이 바이트를 역방향으로 수신 한 다음 컴퓨터로 다시 전송하면 다시 되돌릴 수 있습니다. –
Arduino에서 내 경우에는 그것을 다시 전송하는 방법을 지정할 수 있습니다 (10 진수로 다시 보냄). 두 번째 매개 변수, DEC). Serial.print (val, DEC); // python으로 체크를 보내십시오. – toddstavish