[英]How do i get values of pin 4 to also get sent over to the slave and be displayed using I2C?
我試圖從我的主站到我的從站獲取電壓值,但只有來自 Pin3 的電壓被發送,而不是來自 pin 4 的電壓。我是編碼新手,所以請讓你的解決方案非常“行話少”。 如果你能給我提供一個例子,那么將不勝感激。
主碼:
void pin3() {
Wire.beginTransmission(0x08);
int val2 = analogRead(twosensorpin);
float volts2 = (val2 / 1023.0) * refvoltage;
voltage = String(volts2);
char volt2[5];
voltage.toCharArray(volt2, 5);
Serial.print("The voltage are pin 2 is ");
Serial.println(voltage);
Wire.write(volt2);
Wire.endTransmission();
}
void pin4() {
Wire.beginTransmission(0x08);
int val3 = analogRead(threesensorpin);
float volts3 = (val3 / 1023.0) * refvoltage;
voltage2 = String(volts3);
char volt3[5];
voltage.toCharArray(volt3, 5);
Serial.print("The voltage are pin 3 is ");
Serial.println(voltage2);
Wire.write(volt3);
Wire.endTransmission();
}
奴隸代碼:
#include <Wire.h>
#define SLAVE_ADDRESS 0X08
String q;
String r = "3.20";
// name the motor control pins
#define PWMa 7
#define PWMb 5
#define PWMc 8
#define PWMd 6
void setup() {
// configure the motor control pins as outputs
pinMode(PWMa, OUTPUT);
pinMode(PWMb, OUTPUT);
pinMode(PWMc, OUTPUT);
pinMode(PWMd, OUTPUT);
Wire.begin(SLAVE_ADDRESS);
Wire.onReceive(receiveEvent);
//Wire.onRequest(requestEvent);
Serial.begin(9600);
}
void loop() {}
void receiveEvent() {
q = "";
while (Wire.available()) {
char c = Wire.read();
q += c;
}
do {
if (q < r) {
Serial.print("The value coming from pin 2 is ");
Serial.println(q);
digitalWrite(PWMa, LOW);
digitalWrite(PWMb, HIGH);
digitalWrite(PWMc, LOW);
digitalWrite(PWMd, HIGH);
//delay(500);
}
} while (Wire.available());
do {
if (q > r) {
digitalWrite(PWMa, HIGH);
digitalWrite(PWMb, LOW);
digitalWrite(PWMc, HIGH);
digitalWrite(PWMd, LOW);
}
} while (Wire.available());
正如 Edd 所說,您應該向我們展示一些輸出。
但假設您嘗試將傳入數據與 3.20作為數值進行比較,以下代碼將完成這項工作。
掌握
float send_i2c(int val){
float volts = (val / 1023.0) * refvoltage;
char v[5];
String(volts).toCharArray(v, 5);
Wire.beginTransmission(0x08);
Wire.write(v);
Wire.endTransmission();
return volts;
}
void pin3(){
Serial.println("Pin3 val : " + String(send_i2c(analogRead(twosensorpin))));
}
void pin4(){
Serial.println("Pin4 val : " + String(send_i2c(analogRead(threesensorpin))));
}
奴隸
#include <Wire.h>
#define SLAVE_ADDRESS 0X08
#define R 3.20
String q;
// name the motor control pins
#define PWMa 7
#define PWMb 5
#define PWMc 8
#define PWMd 6
void setup() {
// configure the motor control pins as outputs
pinMode(PWMa, OUTPUT);
pinMode(PWMb, OUTPUT);
pinMode(PWMc, OUTPUT);
pinMode(PWMd, OUTPUT);
Wire.begin(SLAVE_ADDRESS);
Wire.onReceive(receiveEvent);
Serial.begin(9600);
}
void loop() {}
void receiveEvent(int a) {
int num = 0;
while (Wire.available())
q += Wire.read();
num = q.toInt();
Serial.print("The value: ");
Serial.println(q);
digitalWrite(PWMa, (num < R) ? LOW : HIGH);
digitalWrite(PWMb, (num < R) ? HIGH : LOW);
digitalWrite(PWMc, (num < R) ? LOW : HIGH);
digitalWrite(PWMd, (num < R) ? HIGH : LOW);
q = "";
}
但是,您應該再次考慮控制 GPIO 輸出的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.