Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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();
- }
- }
Advertisement