質問編集履歴

2

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

2018/07/19 09:27

投稿

r_sato
r_sato

スコア10

test CHANGED
File without changes
test CHANGED
@@ -40,27 +40,147 @@
40
40
 
41
41
  #送信側
42
42
 
43
- import serial
43
+ #include <SPI.h>
44
44
 
45
- import time
46
45
 
47
- def main():
48
46
 
49
- con=serial.Serial('/dev/ttyACM0',9600)
47
+ unsigned char m_date; //MSB byte
50
48
 
51
- time.sleep(2)
49
+ unsigned char l_date; //LSB byte
52
50
 
53
- print(con.portstr)
51
+ const int CS = 10;
54
52
 
55
- while 1:
53
+ const int OUT = 7;
56
54
 
57
- num=con.read(4)
55
+ unsigned int buff;
58
56
 
59
- print(num)
57
+ float time_sum,time_by_buff_sum,time_square_sum,buff_sum;
60
58
 
61
- if __name__=="__main__":
59
+ float bunnshi,bunnbo,grad;
62
60
 
61
+ float data[1];
62
+
63
+
64
+
65
+ //float samp_count, samp_time;
66
+
67
+
68
+
69
+ void setup() {
70
+
71
+ Serial.begin(9600);
72
+
73
+ pinMode(CS, OUTPUT);
74
+
75
+ pinMode(OUT,OUTPUT);
76
+
63
- main()
77
+ SPI.begin();
78
+
79
+ SPI.setBitOrder(MSBFIRST); //MSB is sent at the first
80
+
81
+ SPI.setDataMode(SPI_MODE3); //select SPI MODE
82
+
83
+ SPI.setClockDivider(SPI_CLOCK_DIV16); //Clock f = 16MHz/16 = 1MHz
84
+
85
+ }
86
+
87
+
88
+
89
+ void loop() {
90
+
91
+ //write process
92
+
93
+
94
+
95
+ //Serial.println(m_date);
96
+
97
+ //Serial.println(l_date);
98
+
99
+
100
+
101
+ buff_sum = 0;
102
+
103
+ time_sum = 0;
104
+
105
+ time_by_buff_sum = 0;
106
+
107
+ time_square_sum = 0;
108
+
109
+ bunnshi = 0;
110
+
111
+ bunnbo = 0;
112
+
113
+ grad = 0;
114
+
115
+
116
+
117
+ digitalWrite(OUT,HIGH);
118
+
119
+
120
+
121
+ for (int i = 1 ; i <= 25 ; i++) { //add voltage 25 times
122
+
123
+
124
+
125
+ digitalWrite(CS, LOW); //CS on
126
+
127
+ m_date = SPI.transfer(0x00); //receive high bit
128
+
129
+ l_date = SPI.transfer(0x00); //receive low bit
130
+
131
+ digitalWrite(CS, HIGH); //CS off
132
+
133
+
134
+
135
+ buff = m_date * 256 + l_date; //high bit * 256 (8bit) + low bit(8bit) = all bit(16bit)
136
+
137
+
138
+
139
+ buff_sum += buff;
140
+
141
+ time_sum += i;
142
+
143
+ time_by_buff_sum += i * (float)buff;
144
+
145
+ time_square_sum += i*i;
146
+
147
+
148
+
149
+ //Serial.println(buff);
150
+
151
+ //Serial.write(buff);
152
+
153
+
154
+
155
+ delay(40);
156
+
157
+ }
158
+
159
+ digitalWrite(OUT,LOW);
160
+
161
+ bunnshi = 25 * time_by_buff_sum - time_sum * buff_sum;
162
+
163
+ bunnbo = 25 * time_square_sum - time_sum * time_sum;
164
+
165
+
166
+
167
+ grad = bunnshi / bunnbo;
168
+
169
+
170
+
171
+ data[0] = grad;
172
+
173
+
174
+
175
+ //Serial.println(grad);
176
+
177
+ Serial.write((byte*) data ,4);
178
+
179
+
180
+
181
+ delay(1000);
182
+
183
+ }
64
184
 
65
185
  ```
66
186
 

1

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

2018/07/19 09:27

投稿

r_sato
r_sato

スコア10

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- ### 前提・実現したいこと
1
+ ```### 前提・実現したいこと
2
2
 
3
3
  arduinoからUSBのシリアル通信でraspberry piに送ろうとしています。arduinoでfloat型の数値をbytes型に変換し、raspberry piに送ります。送られてきたデータを再びfloat型に
4
4
 
@@ -8,17 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- ### 該当のソースコード
12
-
13
-
14
-
15
- python
11
+ ```python(受信側)
16
-
17
-
18
-
19
-
20
-
21
- ソースコード
22
12
 
23
13
  import serial
24
14
 
@@ -42,6 +32,40 @@
42
32
 
43
33
  main()
44
34
 
35
+ ```
36
+
37
+
38
+
39
+ ```C言語
40
+
41
+ #送信側
42
+
43
+ import serial
44
+
45
+ import time
46
+
47
+ def main():
48
+
49
+ con=serial.Serial('/dev/ttyACM0',9600)
50
+
51
+ time.sleep(2)
52
+
53
+ print(con.portstr)
54
+
55
+ while 1:
56
+
57
+ num=con.read(4)
58
+
59
+ print(num)
60
+
61
+ if __name__=="__main__":
62
+
63
+ main()
64
+
65
+ ```
66
+
67
+
68
+
45
69
 
46
70
 
47
71
  ### 試したこと