อยากทำ Phase Indicator รับ / ส่งโดย LoRa wifi มีบัญหา คือ ไม่สามารถนำค่า ที่ตัวรับไปคำนวญต่อได้

ฝฝตัวอย่างในโค้ด พากรับ ไม่รุ้จักค่า temp2 ที่ lin 92

1. #include <U8x8lib.h>
2. #include <LoRa.h>
3. String receivedText;
4. String receivedRssi;
5. #define Phase_N 35 // for Phase test
6. //#define led_A 15
7. //#define led_B 16
8. //#define led_C 17
9. #define SCK     5    
10. #define MISO    19   
11. #define MOSI    27   
12. #define SS      18   
13. #define RST     14    
14. #define DI0     26  
15. #define BAND    433E6
16. #define PABOOST true
17. U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(15,4,16);
18. int Value_N = 0;
19. int counter = 0;
20. float x1, A, B, C, temp, temp1, temp2;
21. void setup() {
22. //pinMode(15,OUTPUT);//light phase A
23. //pinMode(16,OUTPUT);//light phase B
24. //pinMode(17,OUTPUT);//light phase c 
25.   pinMode(25,OUTPUT); //Send success, LED will bright 1 second
26.   pinMode(25,INPUT); //Send success, LED will bright 1 second
27.   Serial.begin(115200);
28.   delay(1000);
29.   u8x8.begin();
30.   u8x8.setFont(u8x8_font_chroma48medium8_r);
31.   u8x8.drawString(0, 1, "LoRa Receiver");
32.   SPI.begin(5, 19, 27, 18);
33.   LoRa.setPins(SS, RST, DI0);
34.   LoRa.setTxPower(17);
35.   LoRa.setSpreadingFactor(12);
36.   LoRa.setCodingRate4(5);
37.   LoRa.setSignalBandwidth(125E3);
38.   LoRa.setPreambleLength(8);
39.   if (!LoRa.begin(BAND,PABOOST))
40.   {
41.     u8x8.drawString(0, 1, "LoRa Receiver");
42.     while (1);
43.   }
44.   }
45.   void loop() {
46.   Value_N = analogRead(Phase_N);
47.   int packetSize = LoRa.parsePacket();
48.   if (packetSize ) {
49.   String incoming = "";
50.   while (LoRa.available())
51.   {
52.     incoming += (char)LoRa.read();
53.   }
54.     receivedText = incoming;
55.   Serial.print("RSSI: ");
56.   Serial.println(LoRa.packetRssi());
57.   u8x8.drawString(0, 3, "RSSI: ");
58.   receivedRssi = LoRa.packetRssi();
59.   char currentrs[64];
60.   receivedRssi.toCharArray(currentrs, 64);
61.   u8x8.drawString(6, 3, currentrs);
62.   char currentid [4];
63.   char currentid1[4];
64.   char currentid2[4];
65.   char currentid3[4];
66.   u8x8.drawString(0, 4,"Phase_A: ");////A
67.   u8x8.drawString(0, 5,"Phase_B: ");////B
68.   u8x8.drawString(0, 6,"Phase_C: ");////C
69.   receivedText.toCharArray(currentid,64);
70.   u8x8.drawString(9,4,currentid);//////////A
71.   u8x8.drawString(9,5,currentid1);//////////A
72.   u8x8.drawString(9,5,currentid2);//////////////////////////////////////////B
73.   u8x8.drawString(9,6,currentid3);//C       
74.   Serial.print(receivedText);
75.   delay (100);
76.   ////////////////////////////////////////////////////////////N
77.   Serial.print("Phase_N:");
78.   u8x8.drawString(0, 7, "Phase_N: ");
79.   Serial.println(Value_N);
80.   String txt = String(Value_N);
81.   char currentid4[5];
82.   txt.toCharArray(currentid4, 64);
83.   u8x8.drawString(9, 7, currentid4);
84.   x1 = txt.toFloat();
85.   Serial.print("x1: ");
86.   Serial.print (x1);
87.   
88.   /////////////////////////////////////A
89.   temp = atof(currentid);//char to float
90.   temp1 = atof(currentid1); // char to float
91.   temp2 = atof(currentid2);
92.   A=x1-temp;
93.   B=x1-temp1;
94.   C=x1-temp2;//???????????????????????????????????
95.   
96.   Serial.println("A: ");
97.   Serial.print(A);
98.   Serial.println("B: ");
99.   Serial.print(B);
100.   Serial.println("C: ");
101.   Serial.print(C);
102.   /////////////////////////////////////////////////////////////////
103.   digitalWrite(25, HIGH);   // turn the LED on (HIGH is the voltage level)
104.   delay(1000);              // wait for a second
105.   digitalWrite(25, LOW);    // turn the LED off by making the voltage LOW
106.   delay(1000);              // wait for a second
107.   }
108.   }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//   ฝั่งตัวส่ง---------------------------------------
1. #include <U8x8lib.h>
2. #include <LoRa.h>
3. #include <SPI.h>
4. String receivedText;
5. String receivedRssi;
6. #define Phase_A 36
7. #define Phase_B 37
8. #define Phase_C 38
9. #define SCK     5    // GPIO5  -- SX127x's SCK
10. #define MISO    19   // GPIO19 -- SX127x's MISO
11. #define MOSI    27   // GPIO27 -- SX127x's MOSI
12. #define SS      18
13. #define RST     14
14. #define DI0     26
15. #define BAND    433E6
16. #define PABOOST true
17. U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(15,4,16);
18. int Value_A = 0;
19. //float Value_B = 0;
20. int Value_B = 0;
21. long Value_C = 0;
22. //int Value_C = 0;
23. int counter = 0;
24. float x;
25. void setup() {
26.   pinMode(25,OUTPUT); //Send success, LED will bright 1 second
27.   Serial.begin(115200);
28.   delay(1000);
29.   u8x8.begin();
30.   u8x8.setFont(u8x8_font_chroma48medium8_r);
31.   Serial.println("LoRa Sender");
32.   u8x8.drawString(0, 1, "LoRa Sender"); 
33.   SPI.begin(5,19,27,18);
34.   LoRa.setPins(SS,RST,DI0); 
35.   LoRa.setTxPower(17);
36.   LoRa.setSpreadingFactor(12);
37.   LoRa.setCodingRate4(5);
38.   LoRa.setSignalBandwidth(125E3);
39.   LoRa.setPreambleLength(8);
40.   if (!LoRa.begin(BAND,PABOOST))
41.   {
42.     Serial.println("Starting LoRa failed!");
43.     u8x8.drawString(0, 1, "Starting LoRa failed!");
44.     while (1);
45.   }
46.   Serial.println("LoRa Initial OK!");
47. }
48. void loop() {
49.    Value_A = analogRead(Phase_A);
50.    Value_B = analogRead(Phase_B);
51.    Value_C = analogRead(Phase_C);
52.   Serial.print("Sending packet: ");
53.   u8x8.drawString(0, 4, "PacketID");
54.   Serial.println(counter);
55.   String txt = String(counter);
56.   char currentid[5];
57.   txt.toCharArray(currentid, 64);
58.   u8x8.drawString(9, 4, currentid);
59.   /////////////////////////////////AAAAAAAA
60.   Serial.print(" Phase_A: ");
61.   u8x8.drawString(0, 5, "Phase_A:");
62.   Serial.println(Value_A);
63.   String txt1 = String(Value_A);
64.   char currentid1[5];
65.   txt1.toCharArray(currentid1, 64);
66.   u8x8.drawString(9, 5, currentid1);
67.   //////////////////////////////////////BB
68.   Serial.print(" Phase_B: ");
69.   u8x8.drawString(0, 6, "Phase_B:");
70.   Serial.println(Value_B);
71.   String txt2 = String(Value_B);
72.   char currentid2[5];
73.   txt2.toCharArray(currentid2, 64);
74.   u8x8.drawString(9, 6, currentid2);
75.   ///////////////////////////////////CC
76.   Serial.print(" Phase_C: ");
77.   u8x8.drawString(0, 7, "Phase_C:");
78.   Serial.println(Value_C);
79.   String txt3 = String(Value_C);
80.   char currentid3[5];
81.   txt3.toCharArray(currentid3, 64);
82.   u8x8.drawString(9, 7, currentid3);
83.   //////////////////////////////////
84.   LoRa.beginPacket();
85.   LoRa.println(Value_A); 
86.   LoRa.println(Value_B); 
87.   LoRa.println(Value_C);
88.   LoRa.endPacket();
89.   delay(100);
90.   counter++;
91.   digitalWrite(25, HIGH);   // turn the LED on (HIGH is the voltage level)
92.   delay(1000);              // wait for a second
93.   digitalWrite(25, LOW);    // turn the LED off by making the voltage LOW
94.   delay(1000);              // wait for a second
95. }

ตัวรับอ่านค่าได้หรือยังครับ

ทำไฮไล โค้ตให้ด้วยครับกดตามภาพ

ตัวรับอ่านค่าได้ และ แสดงบนจอ OLED แล้ว แต่กับเอาค่าไปคำนวญต่อไม่ได้ ค่า tepm2 = 0

สีเหลืองคืออ่านค่าออกแล้ว สีแดงค่า C ไม่ออกใช่ไหมครับ ถ้าใช่แล้ว A B ได้ค่าเท่าไหร่

ไช่ ครับ A , B ไดค่าคือ
image image
image image

1 Likes

มันรับ 3191 มาคำนวนออกมา 3167 ไม่ถูกหรอครับ

อ่อ ไม่ไช่ครับนั้นเป็นเพียงค่าที่รับได้ แต่บางคั้งค่ามันไม่นิ้ง ดั่ลายล่าง
image

คือสองค่านี้คือค่าเดียวกันใช่ไหมครับ

image

เวลาดีบัค ควรปริ้น ค่า String text ชื่อตัวแปรออกมาด้วยนะครับ ไม่งั้นจะงงว่าอะไรคือค่าอะไร

94.   C=x1-temp2;//???????????????????????????????????
95.   
96.   Serial.println("temp2 : ");
97.   Serial.print(temp2);

ใส่เพิ่มออกมาดูหน่อยครับว่า temp2 ที่ว่ามันไม่นิ่งคือแบบไหน จะได้วิฌคราะห์แก้ไขกันต่อไป

ครับผม แต่บัญหาสำคัญคือ ผมไม่เข้าไจจะแยกรับได้ยังไง เพราะมันส่งมาเป็น packet

มันก็แยกออกมาให้แล้วไม่ใช่หรอครับ

image