質問するログイン新規登録

質問編集履歴

2

送信側のプログラムが間違っていたので修正

2018/07/19 09:27

投稿

r_sato
r_sato

スコア10

title CHANGED
File without changes
body CHANGED
@@ -19,17 +19,77 @@
19
19
 
20
20
  ```C言語
21
21
  #送信側
22
+ #include <SPI.h>
23
+
24
+ unsigned char m_date; //MSB byte
25
+ unsigned char l_date; //LSB byte
22
- import serial
26
+ const int CS = 10;
27
+ const int OUT = 7;
28
+ unsigned int buff;
29
+ float time_sum,time_by_buff_sum,time_square_sum,buff_sum;
30
+ float bunnshi,bunnbo,grad;
23
- import time
31
+ float data[1];
32
+
33
+ //float samp_count, samp_time;
34
+
35
+ void setup() {
36
+ Serial.begin(9600);
37
+ pinMode(CS, OUTPUT);
38
+ pinMode(OUT,OUTPUT);
24
- def main():
39
+ SPI.begin();
25
- con=serial.Serial('/dev/ttyACM0',9600)
40
+ SPI.setBitOrder(MSBFIRST); //MSB is sent at the first
41
+ SPI.setDataMode(SPI_MODE3); //select SPI MODE
42
+ SPI.setClockDivider(SPI_CLOCK_DIV16); //Clock f = 16MHz/16 = 1MHz
43
+ }
44
+
45
+ void loop() {
46
+ //write process
47
+
48
+ //Serial.println(m_date);
49
+ //Serial.println(l_date);
50
+
51
+ buff_sum = 0;
26
- time.sleep(2)
52
+ time_sum = 0;
27
- print(con.portstr)
53
+ time_by_buff_sum = 0;
54
+ time_square_sum = 0;
28
- while 1:
55
+ bunnshi = 0;
29
- num=con.read(4)
56
+ bunnbo = 0;
30
- print(num)
57
+ grad = 0;
58
+
59
+ digitalWrite(OUT,HIGH);
60
+
61
+ for (int i = 1 ; i <= 25 ; i++) { //add voltage 25 times
62
+
63
+ digitalWrite(CS, LOW); //CS on
64
+ m_date = SPI.transfer(0x00); //receive high bit
65
+ l_date = SPI.transfer(0x00); //receive low bit
66
+ digitalWrite(CS, HIGH); //CS off
67
+
68
+ buff = m_date * 256 + l_date; //high bit * 256 (8bit) + low bit(8bit) = all bit(16bit)
69
+
70
+ buff_sum += buff;
71
+ time_sum += i;
31
- if __name__=="__main__":
72
+ time_by_buff_sum += i * (float)buff;
73
+ time_square_sum += i*i;
74
+
75
+ //Serial.println(buff);
76
+ //Serial.write(buff);
77
+
32
- main()
78
+ delay(40);
79
+ }
80
+ digitalWrite(OUT,LOW);
81
+ bunnshi = 25 * time_by_buff_sum - time_sum * buff_sum;
82
+ bunnbo = 25 * time_square_sum - time_sum * time_sum;
83
+
84
+ grad = bunnshi / bunnbo;
85
+
86
+ data[0] = grad;
87
+
88
+ //Serial.println(grad);
89
+ Serial.write((byte*) data ,4);
90
+
91
+ delay(1000);
92
+ }
33
93
  ```
34
94
 
35
95
 

1

送信側のプログラムを追加

2018/07/19 09:27

投稿

r_sato
r_sato

スコア10

title CHANGED
File without changes
body CHANGED
@@ -1,14 +1,24 @@
1
- ### 前提・実現したいこと
1
+ ```### 前提・実現したいこと
2
2
  arduinoからUSBのシリアル通信でraspberry piに送ろうとしています。arduinoでfloat型の数値をbytes型に変換し、raspberry piに送ります。送られてきたデータを再びfloat型に
3
3
  戻したいのですが、どのように戻せばいいのか調べてみても分かりませんでした。そのまま出力すると文字化けをしてしまい、どのような値のデータか判断できません。
4
4
  言語はPythonを使っています。
5
5
 
6
+ ```python(受信側)
6
- ### 該当のソースコード
7
+ import serial
8
+ import time
9
+ def main():
10
+ con=serial.Serial('/dev/ttyACM0',9600)
11
+ time.sleep(2)
12
+ print(con.portstr)
13
+ while 1:
14
+ num=con.read(4)
15
+ print(num)
16
+ if __name__=="__main__":
17
+ main()
18
+ ```
7
19
 
8
- python
20
+ ```C言語
9
-
10
-
11
- ソースコード
21
+ #送信側
12
22
  import serial
13
23
  import time
14
24
  def main():
@@ -20,7 +30,9 @@
20
30
  print(num)
21
31
  if __name__=="__main__":
22
32
  main()
33
+ ```
23
34
 
35
+
24
36
  ### 試したこと
25
37
 
26
38
  float.fromhex(num)のメソッドに入れてみた。