noam76 icon

Transmitter Lora

noam76 | PRO | 02/17/26 04:42:09 PM UTC | 0 ⭐ | 12426 👁️ | Never ⏰ | []
Arduino |

4.2 KB

|

None

|

0 👍

/

0 👎

#include <SoftwareSerial.h>
 
// הגדרות פינים
const int PIN_RX = 10;
const int PIN_TX = 11;
const int M0 = 7;
const int M1 = 8;
 
// פינים אנלוגיים לג'ויסטיקים וטרמים
const int POT_THROTTLE = A0;
const int POT_STEERING = A1;
const int POT_TRIM_T = A2;
const int POT_TRIM_S = A3;
 
SoftwareSerial loraSerial(PIN_RX, PIN_TX);
 
// מבנה נתונים ארוז - חייב להיות זהה למקלט
struct __attribute__((packed)) ControlData {
  byte header;    // 0xAA
  byte throttle;  // 0-255
  byte steering;  // 0-255
  byte trimT;     // 0-255
  byte trimS;     // 0-255
  byte checksum;  
};
 
ControlData transmitterdat;
 
void setup() {
  // הגדרת מצב עבודה למודול LoRa (Normal Mode)
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
 
  Serial.begin(115200);
  loraSerial.begin(9600);
 
  Serial.println("Transmitter Ready - Broadcasting...");
  
  // הגדרת ה-Header פעם אחת (הוא לעולם לא משתנה)
  transmitterdat.header = 0xAA;
}
 
void loop() {
  // 1. קריאת הערכים מהפוטנציומטרים (0-1023) והמרתם ל-0-255
  //transmitterdat.throttle = map(readStable(POT_THROTTLE), 0, 1023, 0, 255);
  //transmitterdat.steering = map(readStable(POT_STEERING), 430, 700, 0, 255);
  //transmitterdat.trimT = map(readStable(POT_TRIM_T), 0, 1023, 0, 255);
  //transmitterdat.trimS = map(readStable(POT_TRIM_S), 0, 1023, 0, 255);
  int mappedValue;
  mappedValue = map(readStable(POT_THROTTLE), 370, 650, 0, 255);
  transmitterdat.throttle = constrain(mappedValue, 0, 255);
  
  // 1. קריאה ומיפוי לתוך משתנה זמני שיכול להכיל מספרים מחוץ לטווח 0-255
  mappedValue = map(readStable(POT_STEERING), 430, 700, 0, 255);
  // 2. הגבלה (Constrain) כשהערך עדיין בתוך ה-INT
  // 3. ורק אז שמירה לתוך ה-struct (מסוג byte)
  transmitterdat.steering = constrain(mappedValue, 0, 255);
 
  // דוגמה לטרים
  mappedValue = map(readStable(POT_TRIM_T), 0, 1023, 0, 255);
  transmitterdat.trimT = constrain(mappedValue, 0, 255);
 
  // דוגמה לטרים
  mappedValue = map(readStable(POT_TRIM_S), 0, 1023, 0, 255);
  transmitterdat.trimS = constrain(mappedValue, 0, 255);
 
  
/*
  transmitterdat.throttle = 100;
  transmitterdat.steering = 250;
  transmitterdat.trimT = 200;
  transmitterdat.trimS = 127;
*/
  // 2. חישוב ה-Checksum לאימות הנתונים בצד השני
  transmitterdat.checksum = (byte)(transmitterdat.throttle + transmitterdat.steering + 
                                   transmitterdat.trimT + transmitterdat.trimS);
 
  // 3. שידור המבנה המלא ל-LoRa
  loraSerial.write((byte*)&transmitterdat, sizeof(ControlData));
 
  // הדפסה לדיבאג (אופציונלי)
  debugPrint();
 
  // השהייה קטנה לקביעת קצב השידור (כ-20 פעמים בשנייה)
  delay(50);
}
 
int readStable(int pin) {
  long sum = 0;
  for (int i = 0; i < 15; i++) { // לוקחים 10 דגימות
    sum += analogRead(pin);
  }
  return sum / 15; // מחזירים את הממוצע
}
 
void debugPrint() {
  static unsigned long lastDebug = 0;
  if (millis() - lastDebug > 500) {
    /*
    Serial.print("Sending -> T: "); Serial.print(transmitterdat.throttle);
    Serial.print(" S: "); Serial.println(transmitterdat.steering);
    */
    //Serial.print("Sending -> Throttle: "); Serial.println(readStable(POT_THROTTLE));
    Serial.print("Sending -> Final Throttle: "); Serial.println(transmitterdat.throttle);
    
    //Serial.print("Sending -> Steering: "); Serial.println(readStable(POT_STEERING));
    Serial.print("Sending -> Final Steering: "); Serial.println(transmitterdat.steering);
 
    //Serial.print("Sending -> TrimT: "); Serial.println(readStable(POT_TRIM_T));
    Serial.print("Sending -> Final TrimT: "); Serial.println(transmitterdat.trimT);
    
    //Serial.print("Sending -> TrimS: "); Serial.println(readStable(POT_TRIM_S));
    Serial.print("Sending -> Final TrimS: "); Serial.println(transmitterdat.trimS);
 
    Serial.println("________ ");
    lastDebug = millis();
  }
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎