[英]Trying to get an i2c pressure sensor to send data to an ATtiny85, but the libraries available to me are giving me 'undeclared' error
[英]Using two ATTiny85 slave master I2C communication with TinyWire Library
我正在嘗試使用TinyWire 庫在主 ATTiny85 和從 ATTiny85 之間進行 I2C 通信。 作為發送方的主站或從站都可以,但我無法進行基本的傳輸。 我正在使用 Arduino IDE 對 ATTinys 進行編程。 如果通信成功,我正在測試的代碼應該打開 LED。 請給我提意見。 謝謝!
//Master Receiver
#include <TinyWire.h>
const int ledPin = 3;
void setup() {
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
TinyWire.begin();
}
void loop() {
TinyWire.requestFrom(10, 1);
bool receive = TinyWire.read();
if (receive == 1) {
digitalWrite(ledPin, LOW);
}
}
//Slave Sender
#include <TinyWire.h>
void setup() {
TinyWire.begin(10);
TinyWire.onRequest(onRequestI2C);
}
void loop() {
}
void onRequestI2C() {
TinyWire.send(1);
}
也貼在這里。
這並不是問題的真正答案,但我找到了另一個可以實現我想要實現的目標的庫。 它叫做曼徹斯特,你可以在這里下載。
這是我用於基本測試的代碼。 發送器 ATTiny85 收集按鈕信息並將其發送到接收器 ATTiny85,接收器根據按鈕是否被按下來打開 LED。
//Transmitter
#include <Manchester.h>
#define TX_PIN 0
const int buttonPin = 3;
void setup() {
man.setupTransmit(TX_PIN, MAN_1200);
pinMode(buttonPin, INPUT);
}
void loop() {
bool button = digitalRead(buttonPin);
man.transmit(button);
delay(200);
}
//Receiver
#include <Manchester.h>
#define RX_PIN 1
const int ledPin = 3;
void setup() {
man.setupReceive(RX_PIN, MAN_1200);
man.beginReceive();
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
}
void loop() {
if (man.receiveComplete()) {
bool button = man.getMessage();
man.beginReceive();
if (button == 1) {
digitalWrite(ledPin, LOW);
} else {
digitalWrite(ledPin, HIGH);
}
}
}
出於某種原因,我可以通過這種接線使用主發送和從接收,但仍然不能使用從發送和主接收。 通過一些額外的編程,您應該能夠讓主機發送“請求”,而從接收器切換到主機模式以發回請求的數據。 效率不高,但有效。 (左邊是主人,右邊是奴隸)
我的代碼:
//Master Send
#include <TinyWire.h>
const int buttonPin = 3;
void setup() {
TinyWire.begin();
pinMode(buttonPin, INPUT);
}
void loop() {
bool button = digitalRead(buttonPin);
TinyWire.beginTransmission(10);
TinyWire.send(button);
TinyWire.endTransmission();
delay(200);
}
//Slave Receive
#include <TinyWire.h>
const int ledPin = 3;
void setup() {
TinyWire.begin(10);
TinyWire.onReceive(receiveEvent);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
}
void loop() {
delay(100);
}
void receiveEvent(int howMany) {
while (TinyWire.available()) {
int receive = TinyWire.read();
if (receive == 1) {
digitalWrite(ledPin, LOW);
}else{
digitalWrite(ledPin, HIGH);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.