我正在尝试从主机到从机获取电压值,但仅发送来自引脚3的电压,而不发送来自引脚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 作为数值]进行比较,下面的代码将完成此工作。
Master
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 coming from pin 2 is "); 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输出的方式。