אני מנסה לשדר מ- 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 (); // התחל להקשיב להודעה הבאה מיד לאחר אחזור ההודעה}}