noam76

Transmitter Lora

Feb 17th, 2026
3,893
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <SoftwareSerial.h>
  2.  
  3. // הגדרות פינים
  4. const int PIN_RX = 10;
  5. const int PIN_TX = 11;
  6. const int M0 = 7;
  7. const int M1 = 8;
  8.  
  9. // פינים אנלוגיים לג'ויסטיקים וטרמים
  10. const int POT_THROTTLE = A0;
  11. const int POT_STEERING = A1;
  12. const int POT_TRIM_T = A2;
  13. const int POT_TRIM_S = A3;
  14.  
  15. SoftwareSerial loraSerial(PIN_RX, PIN_TX);
  16.  
  17. // מבנה נתונים ארוז - חייב להיות זהה למקלט
  18. struct __attribute__((packed)) ControlData {
  19.   byte header;    // 0xAA
  20.   byte throttle;  // 0-255
  21.   byte steering;  // 0-255
  22.   byte trimT;     // 0-255
  23.   byte trimS;     // 0-255
  24.   byte checksum;  
  25. };
  26.  
  27. ControlData transmitterdat;
  28.  
  29. void setup() {
  30.   // הגדרת מצב עבודה למודול LoRa (Normal Mode)
  31.   pinMode(M0, OUTPUT);
  32.   pinMode(M1, OUTPUT);
  33.   digitalWrite(M0, LOW);
  34.   digitalWrite(M1, LOW);
  35.  
  36.   Serial.begin(115200);
  37.   loraSerial.begin(9600);
  38.  
  39.   Serial.println("Transmitter Ready - Broadcasting...");
  40.  
  41.   // הגדרת ה-Header פעם אחת (הוא לעולם לא משתנה)
  42.   transmitterdat.header = 0xAA;
  43. }
  44.  
  45. void loop() {
  46.   // 1. קריאת הערכים מהפוטנציומטרים (0-1023) והמרתם ל-0-255
  47.   //transmitterdat.throttle = map(readStable(POT_THROTTLE), 0, 1023, 0, 255);
  48.   //transmitterdat.steering = map(readStable(POT_STEERING), 430, 700, 0, 255);
  49.   //transmitterdat.trimT = map(readStable(POT_TRIM_T), 0, 1023, 0, 255);
  50.   //transmitterdat.trimS = map(readStable(POT_TRIM_S), 0, 1023, 0, 255);
  51.   int mappedValue;
  52.   mappedValue = map(readStable(POT_THROTTLE), 370, 650, 0, 255);
  53.   transmitterdat.throttle = constrain(mappedValue, 0, 255);
  54.  
  55.   // 1. קריאה ומיפוי לתוך משתנה זמני שיכול להכיל מספרים מחוץ לטווח 0-255
  56.   mappedValue = map(readStable(POT_STEERING), 430, 700, 0, 255);
  57.   // 2. הגבלה (Constrain) כשהערך עדיין בתוך ה-INT
  58.   // 3. ורק אז שמירה לתוך ה-struct (מסוג byte)
  59.   transmitterdat.steering = constrain(mappedValue, 0, 255);
  60.  
  61.   // דוגמה לטרים
  62.   mappedValue = map(readStable(POT_TRIM_T), 0, 1023, 0, 255);
  63.   transmitterdat.trimT = constrain(mappedValue, 0, 255);
  64.  
  65.   // דוגמה לטרים
  66.   mappedValue = map(readStable(POT_TRIM_S), 0, 1023, 0, 255);
  67.   transmitterdat.trimS = constrain(mappedValue, 0, 255);
  68.  
  69.  
  70. /*
  71.   transmitterdat.throttle = 100;
  72.   transmitterdat.steering = 250;
  73.   transmitterdat.trimT = 200;
  74.   transmitterdat.trimS = 127;
  75. */
  76.   // 2. חישוב ה-Checksum לאימות הנתונים בצד השני
  77.   transmitterdat.checksum = (byte)(transmitterdat.throttle + transmitterdat.steering +
  78.                                    transmitterdat.trimT + transmitterdat.trimS);
  79.  
  80.   // 3. שידור המבנה המלא ל-LoRa
  81.   loraSerial.write((byte*)&transmitterdat, sizeof(ControlData));
  82.  
  83.   // הדפסה לדיבאג (אופציונלי)
  84.   debugPrint();
  85.  
  86.   // השהייה קטנה לקביעת קצב השידור (כ-20 פעמים בשנייה)
  87.   delay(50);
  88. }
  89.  
  90. int readStable(int pin) {
  91.   long sum = 0;
  92.   for (int i = 0; i < 15; i++) { // לוקחים 10 דגימות
  93.     sum += analogRead(pin);
  94.   }
  95.   return sum / 15; // מחזירים את הממוצע
  96. }
  97.  
  98. void debugPrint() {
  99.   static unsigned long lastDebug = 0;
  100.   if (millis() - lastDebug > 500) {
  101.     /*
  102.     Serial.print("Sending -> T: "); Serial.print(transmitterdat.throttle);
  103.     Serial.print(" S: "); Serial.println(transmitterdat.steering);
  104.     */
  105.     //Serial.print("Sending -> Throttle: "); Serial.println(readStable(POT_THROTTLE));
  106.     Serial.print("Sending -> Final Throttle: "); Serial.println(transmitterdat.throttle);
  107.    
  108.     //Serial.print("Sending -> Steering: "); Serial.println(readStable(POT_STEERING));
  109.     Serial.print("Sending -> Final Steering: "); Serial.println(transmitterdat.steering);
  110.  
  111.     //Serial.print("Sending -> TrimT: "); Serial.println(readStable(POT_TRIM_T));
  112.     Serial.print("Sending -> Final TrimT: "); Serial.println(transmitterdat.trimT);
  113.    
  114.     //Serial.print("Sending -> TrimS: "); Serial.println(readStable(POT_TRIM_S));
  115.     Serial.print("Sending -> Final TrimS: "); Serial.println(transmitterdat.trimS);
  116.  
  117.     Serial.println("________ ");
  118.     lastDebug = millis();
  119.   }
  120. }
Advertisement