שְׁאֵלָה:
בעיות בהעברה בין ATtiny85 ל- Arduino Uno עם מודולי RF 433MHz ומנצ'סטר
sunny-lan
2016-08-25 23:34:30 UTC
view on stackexchange narkive permalink

אני מנסה לשדר מ- ATtiny85 הפועל בשעון פנימי 16 מגה-הרץ ל- Arduino Uno עם ספריית מנצ'סטר.

הבעיה היא שהארדואינו אינו מקבל שום נתונים .

חיברתי אוסצילוסקופ לסיכה ATAD / DATA של המשדר, ואני יכול לראות נתונים מועברים. עשיתי את אותו הדבר גם על סיכת ה- DATA של המקלט, והוא מראה נתונים שמתקבלים. אבל ה- Arduino Uno לא מזהה שום דבר.

ניסיתי ש- Arduino Uno ישלח נתונים לעצמו, מה שכן עובד, אך הנתונים יורדים לעתים קרובות מאוד.

הנה קוד המקור של המשדר:

  #include <Manchester.h> # הגדר TX_PIN 3 // סיכה היכן המשדר שלך מחובר uint16_t transmit_data = 2761; התקנת הריק () {pinMode (1, OUTPUT); man.setupTransmit (TX_PIN, MAN_1200);} loop loop () {digitalWrite (1, HIGH); man.transmit (transmit_data); עיכוב (200); digitalWrite (1, LOW); עיכוב (200);}  

וזה הקוד על המקלט:

  #include "Manchester.h" #define RX_PIN 4 # define BUFFER_SIZE מאגר 22uint8_t [BUFFER_SIZE]; הגדרת חלל () {Serial.begin (9600); man.setupReceive (RX_PIN, MAN_1200); man.beginReceiveArray (BUFFER_SIZE, buffer);} loop loop () {if (man.receiveComplete ()) {uint8_t receivedSize = 0; // עשה משהו עם הנתונים ב'מאגר 'כאן לפני שתתחיל לקבל לאותו מאגר שוב receivedSize = buffer [0]; עבור (uint8_t i = 1; i<receivedSize; i ++) Serial.write (חיץ [i]); Serial.println (); man.beginReceiveArray (BUFFER_SIZE, חיץ); }}  

זהו הקוד בו השתמשתי לבדיקה רק עם ה- Arduino Uno:

  #include <Manchester.h> # define RX_PIN 7 # define TX_PIN 8 // סיכה איפה המשדר שלך מחובר uint16_t transmit_data = 2761; int lastTransmit = 0; התקנת החלל () {Serial.begin (9600); man.setupReceive (RX_PIN, MAN_1200); man.setupTransmit (TX_PIN, MAN_1200); man.beginReceive ();} loop loop () {
אם (מילי () - lastTransmit > 200) {man.transmit (transmit_data); lastTransmit = מילי (); } אם (man.receiveComplete ()) {uint16_t m = man.getMessage (); Serial.println (m); man.beginReceive (); // התחל להקשיב להודעה הבאה מיד לאחר אחזור ההודעה}}  
אחד תשובה:
Jack Wilborn
2017-01-21 10:36:40 UTC
view on stackexchange narkive permalink

הגדרת את קבלת גודל לאפס ברגע מיידי, ואז טען אותו במאגר [0], שנראה גם שהוא אפס. עליך לבדוק את הערך הזה כדי לוודא שהוא נכון ושהוא לפחות 2 כ -1 אינו פחות מ-. אחרת כשאתה נכנס ללולאה, אני הוא 1 ו קיבל גודל הוא אפס (אני הוא> קיבל גודל .) אז זה לא מצליח להיכנס ללולאה, אז אין לכתוב.

  uint8_t receivedSize = 0; receivedSize = buffer [0]; for (uint8_t i = 1; i < receivedSize; i ++) Serial.write (buffer [i]);  

יכול להיות שיש גם לוגיקה. אם תקבל בית אחד, ה קיבלו גודל יהיה 1 והוא עדיין לא יודפס. זכור שהמערך עובר מ- 0 למגבלה וחיי ה'נתונים 'שלך מתחילים במאגר [1]. המשמעות אם 6 תווים נמצאים במאגר רק 5 (1 עד 5) יודפסו. יתכן שיהיה הרבה יותר ברור להוסיף את האינדקס במיקום 'חיץ [i + 1]' ואז ה- i יכול להריץ את זה 0 עד n נורמלי.

כן, אנסה לשנות את הקוד. הקוד בו השתמשתי הוא רק קוד לדוגמא. כנראה רק חיבורים פגומים או מודולי RF


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...