恒温器七段式



我正在用arduino mega 2560制作一个恒温器。我想调整所需的温度,并将其显示在两个单独的七段显示器上。我的问题是它不起作用。我认为问题在于当我调用函数时。我希望有人能帮我做这个项目。这是我的无效循环代码

void loop() {
buttonStateP = digitalRead(buttonPinP);
Wire.beginTransmission(MPU_ADDR);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) [MPU-6000 and MPU-6050 Register Map and Descriptions Revision 4.2, p.40]
Wire.endTransmission(false); // the parameter indicates that the Arduino will send a restart. As a result, the connection is kept active.
Wire.requestFrom(MPU_ADDR, 7*2, true); // request a total of 7*2=14 registers
// "Wire.read()<<8 | Wire.read();" means two registers are read and stored in the same variable
accelerometer_x = Wire.read()<<8 | Wire.read(); // reading registers: 0x3B (ACCEL_XOUT_H) and 0x3C (ACCEL_XOUT_L)
accelerometer_y = Wire.read()<<8 | Wire.read(); // reading registers: 0x3D (ACCEL_YOUT_H) and 0x3E (ACCEL_YOUT_L)
accelerometer_z = Wire.read()<<8 | Wire.read(); // reading registers: 0x3F (ACCEL_ZOUT_H) and 0x40 (ACCEL_ZOUT_L)
temperature = Wire.read()<<8 | Wire.read(); // reading registers: 0x41 (TEMP_OUT_H) and 0x42 (TEMP_OUT_L)
gyro_x = Wire.read()<<8 | Wire.read(); // reading registers: 0x43 (GYRO_XOUT_H) and 0x44 (GYRO_XOUT_L)
gyro_y = Wire.read()<<8 | Wire.read(); // reading registers: 0x45 (GYRO_YOUT_H) and 0x46 (GYRO_YOUT_L)
gyro_z = Wire.read()<<8 | Wire.read(); // reading registers: 0x47 (GYRO_ZOUT_H) and 0x48 (GYRO_ZOUT_L)


// print out data
//Serial.print("aX = "); Serial.print(convert_int16_to_str(accelerometer_x));
// Serial.print(" | aY = "); Serial.print(convert_int16_to_str(accelerometer_y));
// Serial.print(" | aZ = "); Serial.print(convert_int16_to_str(accelerometer_z));
// the following equation was taken from the documentation [MPU-6000/MPU-6050 Register Map and Description, p.30]
//Serial.print(" | tmp = "); Serial.println(temperature/340.00+36.53);
// Serial.print(" |      |"); Serial.print(counter);
// Serial.print(" | gX = "); Serial.print(convert_int16_to_str(gyro_x));
// Serial.print(" | gY = "); Serial.print(convert_int16_to_str(gyro_y));
// Serial.print(" | gZ = "); Serial.print(convert_int16_to_str(gyro_z));
// Serial.println();
// delay
delay(1000);
// compare the buttonState to its previous state
if (buttonStateP != lastButtonStateP) {
// if the state has changed, increment the counter
if (buttonStateP == LOW) {
// if the current state is HIGH then the button went from off to on:
bPress = true;
buttonPushCounterP++;
if( buttonPushCounterP > 99) buttonPushCounterP =0 ;
Serial.println("buttonPushCounterP");
} else {
// if the current state is LOW then the button went from on to off:
Serial.println("off");
}
// Delay a little bit to avoid bouncing
delay(50);
}
// save the current state as the last state, for next time through the loop
lastButtonStateP = buttonStateP;
if( bPress ){
turnOff();
}

if (buttonPushCounterP = 0){
zero1();
zero2();
}


dt = temperature;
if (buttonPushCounterP < dt){
analogWrite(ledON,1000);
}
else if(buttonPushCounterP > dt){
analogWrite(ledON,0);
}
}
void turnOff()
{
digitalWrite(Aa,LOW);
digitalWrite(Ba,LOW);
digitalWrite(C1,LOW);
digitalWrite(D1,LOW);
digitalWrite(E1,LOW);
digitalWrite(F1,LOW);
digitalWrite(G1,LOW);
digitalWrite(Ab,LOW);
digitalWrite(Bb,LOW);
digitalWrite(C2,LOW);
digitalWrite(D2,LOW);
digitalWrite(E2,LOW);
digitalWrite(F2,LOW);
digitalWrite(G2,LOW);
}```
#include "Wire.h" // This library allows you to communicate with I2C devices.
const int MPU_ADDR = 0x68; // I2C address of the MPU-6050. If AD0 pin is set to HIGH, the I2C address will be 0x69.
int16_t accelerometer_x, accelerometer_y, accelerometer_z; // variables for accelerometer raw data
int16_t gyro_x, gyro_y, gyro_z; // variables for gyro raw data
int16_t temperature; // variables for temperature data
const int E1 = 22;
const int D1 = 23;
const int C1 = 24;
const int Ba = 25;
const int Aa = 26;
const int F1 = 27;
const int G1 = 28;
const int E2 = 29;
const int D2 = 30;
const int C2 = 31;
const int Bb = 32;
const int Ab = 33;
const int F2 = 34;
const int G2 = 35;

int ledPOWER = 3;
int ledON = 2;
bool bPress = false;
const int buttonPinP = 12;
int dt = 0;

// Variables will change:
int buttonPushCounterP = 0;   // counter for the number of button presses
int buttonStateP = 0;         // current state of the button
int lastButtonStateP = 0;     // previous state of the button

char tmp_str[7]; // temporary variable used in convert function
char* convert_int16_to_str(int16_t i) { // converts int16 to string. Moreover, resulting strings will have the same length in the debug monitor.
sprintf(tmp_str, "%6d", i);
return tmp_str;
}
void zero1(){
digitalWrite(E1,HIGH);
digitalWrite(D1,HIGH);
digitalWrite(C1,HIGH);
digitalWrite(Ba,HIGH);
digitalWrite(Aa,HIGH);
digitalWrite(F1,HIGH);
digitalWrite(G1,LOW);  
}
void one1(){
digitalWrite(E1,LOW);
digitalWrite(D1,LOW);
digitalWrite(C1,HIGH);
digitalWrite(Ba,HIGH);
digitalWrite(Aa,LOW);
digitalWrite(F1,LOW);
digitalWrite(G1,LOW);  
}
void two1(){
digitalWrite(E1,HIGH);
digitalWrite(D1,HIGH);
digitalWrite(C1,LOW);
digitalWrite(Ba,HIGH);
digitalWrite(Aa,HIGH);
digitalWrite(F1,LOW);
digitalWrite(G1,HIGH);  
}
void three1(){
digitalWrite(E1,LOW);
digitalWrite(D1,HIGH);
digitalWrite(C1,HIGH);
digitalWrite(Ba,HIGH);
digitalWrite(Aa,HIGH);
digitalWrite(F1,LOW);
digitalWrite(G1,HIGH);  
}
void four1(){
digitalWrite(E1,LOW);
digitalWrite(D1,LOW);
digitalWrite(C1,HIGH);
digitalWrite(Ba,HIGH);
digitalWrite(Aa,LOW);
digitalWrite(F1,HIGH);
digitalWrite(G1,HIGH);  
}
void five1(){
digitalWrite(E1,LOW);
digitalWrite(D1,HIGH);
digitalWrite(C1,HIGH);
digitalWrite(Ba,LOW);
digitalWrite(Aa,HIGH);
digitalWrite(F1,HIGH);
digitalWrite(G1,HIGH);  
}
void six1(){
digitalWrite(E1,HIGH);
digitalWrite(D1,HIGH);
digitalWrite(C1,HIGH);
digitalWrite(Ba,LOW);
digitalWrite(Aa,HIGH);
digitalWrite(F1,HIGH);
digitalWrite(G1,HIGH);  
}
void seven1(){
digitalWrite(E1,LOW);
digitalWrite(D1,LOW);
digitalWrite(C1,HIGH);
digitalWrite(Ba,HIGH);
digitalWrite(Aa,HIGH);
digitalWrite(F1,LOW);
digitalWrite(G1,LOW);  
}
void eight1(){
digitalWrite(E1,HIGH);
digitalWrite(D1,HIGH);
digitalWrite(C1,HIGH);
digitalWrite(Ba,HIGH);
digitalWrite(Aa,HIGH);
digitalWrite(F1,HIGH);
digitalWrite(G1,HIGH);  
}
void nine1(){
digitalWrite(E1,LOW);
digitalWrite(D1,HIGH);
digitalWrite(C1,HIGH);
digitalWrite(Ba,HIGH);
digitalWrite(Aa,HIGH);
digitalWrite(F1,HIGH);
digitalWrite(G1,HIGH);  
}

//2nd seg
void zero2(){
digitalWrite(E2,HIGH);
digitalWrite(D2,HIGH);
digitalWrite(C2,HIGH);
digitalWrite(Bb,HIGH);
digitalWrite(Ab,HIGH);
digitalWrite(F2,HIGH);
digitalWrite(G2,LOW);  
}
void one2(){
digitalWrite(E2,LOW);
digitalWrite(D2,LOW);
digitalWrite(C2,HIGH);
digitalWrite(Bb,HIGH);
digitalWrite(Ab,LOW);
digitalWrite(F2,LOW);
digitalWrite(G2,LOW);  
}
void two2(){
digitalWrite(E2,HIGH);
digitalWrite(D2,HIGH);
digitalWrite(C2,LOW);
digitalWrite(Bb,HIGH);
digitalWrite(Ab,HIGH);
digitalWrite(F2,LOW);
digitalWrite(G2,HIGH);  
}
void three2(){
digitalWrite(E2,LOW);
digitalWrite(D2,HIGH);
digitalWrite(C2,HIGH);
digitalWrite(Bb,HIGH);
digitalWrite(Ab,HIGH);
digitalWrite(F2,LOW);
digitalWrite(G2,HIGH);  
}
void four2(){
digitalWrite(E2,LOW);
digitalWrite(D2,LOW);
digitalWrite(C2,HIGH);
digitalWrite(Bb,HIGH);
digitalWrite(Ab,LOW);
digitalWrite(F2,HIGH);
digitalWrite(G2,HIGH);  
}
void five2(){
digitalWrite(E2,LOW);
digitalWrite(D2,HIGH);
digitalWrite(C2,HIGH);
digitalWrite(Bb,LOW);
digitalWrite(Ab,HIGH);
digitalWrite(F2,HIGH);
digitalWrite(G2,HIGH);  
}
void six2(){
digitalWrite(E2,HIGH);
digitalWrite(D2,HIGH);
digitalWrite(C2,HIGH);
digitalWrite(Bb,LOW);
digitalWrite(Ab,HIGH);
digitalWrite(F2,HIGH);
digitalWrite(G2,HIGH);  
}
void seven2(){
digitalWrite(E2,LOW);
digitalWrite(D2,LOW);
digitalWrite(C2,HIGH);
digitalWrite(Bb,HIGH);
digitalWrite(Ab,HIGH);
digitalWrite(F2,LOW);
digitalWrite(G2,LOW);  
}
void eight2(){
digitalWrite(E2,HIGH);
digitalWrite(D2,HIGH);
digitalWrite(C2,HIGH);
digitalWrite(Bb,HIGH);
digitalWrite(Ab,HIGH);
digitalWrite(F2,HIGH);
digitalWrite(G2,HIGH);  
}
void nine2(){
digitalWrite(E2,LOW);
digitalWrite(D2,HIGH);
digitalWrite(C2,HIGH);
digitalWrite(Bb,HIGH);
digitalWrite(Ab,HIGH);
digitalWrite(F2,HIGH);
digitalWrite(G2,HIGH);  
}

void setup() {
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(MPU_ADDR); // Begins a transmission to the I2C slave (GY-521 board)
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // set to zero (wakes up the MPU-6050)
Wire.endTransmission(true);
analogWrite(ledPOWER,1000);

pinMode(E1,OUTPUT);
pinMode(D1,OUTPUT);
pinMode(C1,OUTPUT);
pinMode(Ba,OUTPUT);
pinMode(Aa,OUTPUT);
pinMode(F1,OUTPUT);
pinMode(G1,OUTPUT);
pinMode(E2,OUTPUT);
pinMode(D2,OUTPUT);
pinMode(C2,OUTPUT);
pinMode(Bb,OUTPUT);
pinMode(Ab,OUTPUT);
pinMode(F2,OUTPUT);
pinMode(G2,OUTPUT);
pinMode( buttonPinP , INPUT_PULLUP );

}
void loop() {
buttonStateP = digitalRead(buttonPinP);
Wire.beginTransmission(MPU_ADDR);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) [MPU-6000 and MPU-6050 Register Map and Descriptions Revision 4.2, p.40]
Wire.endTransmission(false); // the parameter indicates that the Arduino will send a restart. As a result, the connection is kept active.
Wire.requestFrom(MPU_ADDR, 7*2, true); // request a total of 7*2=14 registers
// "Wire.read()<<8 | Wire.read();" means two registers are read and stored in the same variable
accelerometer_x = Wire.read()<<8 | Wire.read(); // reading registers: 0x3B (ACCEL_XOUT_H) and 0x3C (ACCEL_XOUT_L)
accelerometer_y = Wire.read()<<8 | Wire.read(); // reading registers: 0x3D (ACCEL_YOUT_H) and 0x3E (ACCEL_YOUT_L)
accelerometer_z = Wire.read()<<8 | Wire.read(); // reading registers: 0x3F (ACCEL_ZOUT_H) and 0x40 (ACCEL_ZOUT_L)
temperature = Wire.read()<<8 | Wire.read(); // reading registers: 0x41 (TEMP_OUT_H) and 0x42 (TEMP_OUT_L)
gyro_x = Wire.read()<<8 | Wire.read(); // reading registers: 0x43 (GYRO_XOUT_H) and 0x44 (GYRO_XOUT_L)
gyro_y = Wire.read()<<8 | Wire.read(); // reading registers: 0x45 (GYRO_YOUT_H) and 0x46 (GYRO_YOUT_L)
gyro_z = Wire.read()<<8 | Wire.read(); // reading registers: 0x47 (GYRO_ZOUT_H) and 0x48 (GYRO_ZOUT_L)


// print out data
//Serial.print("aX = "); Serial.print(convert_int16_to_str(accelerometer_x));
// Serial.print(" | aY = "); Serial.print(convert_int16_to_str(accelerometer_y));
// Serial.print(" | aZ = "); Serial.print(convert_int16_to_str(accelerometer_z));
// the following equation was taken from the documentation [MPU-6000/MPU-6050 Register Map and Description, p.30]
//Serial.print(" | tmp = "); Serial.println(temperature/340.00+36.53);
// Serial.print(" |      |"); Serial.print(counter);
// Serial.print(" | gX = "); Serial.print(convert_int16_to_str(gyro_x));
// Serial.print(" | gY = "); Serial.print(convert_int16_to_str(gyro_y));
// Serial.print(" | gZ = "); Serial.print(convert_int16_to_str(gyro_z));
// Serial.println();
// delay
delay(1000);
// compare the buttonState to its previous state
if (buttonStateP != lastButtonStateP) {
// if the state has changed, increment the counter
if (buttonStateP == LOW) {
// if the current state is HIGH then the button went from off to on:
bPress = true;
buttonPushCounterP++;
if( buttonPushCounterP > 99) buttonPushCounterP =0 ;
Serial.println("buttonPushCounterP");
} else {
// if the current state is LOW then the button went from on to off:
Serial.println("off");
}
// Delay a little bit to avoid bouncing
delay(50);
}
// save the current state as the last state, for next time through the loop
lastButtonStateP = buttonStateP;
if( bPress ){
turnOff();
}

if (buttonPushCounterP = 0){
zero1();
zero2();
}


dt = temperature;
if (buttonPushCounterP < dt){
analogWrite(ledON,1000);
}
else if(buttonPushCounterP > dt){
analogWrite(ledON,0);
}
}
void turnOff()
{
digitalWrite(Aa,LOW);
digitalWrite(Ba,LOW);
digitalWrite(C1,LOW);
digitalWrite(D1,LOW);
digitalWrite(E1,LOW);
digitalWrite(F1,LOW);
digitalWrite(G1,LOW);
digitalWrite(Ab,LOW);
digitalWrite(Bb,LOW);
digitalWrite(C2,LOW);
digitalWrite(D2,LOW);
digitalWrite(E2,LOW);
digitalWrite(F2,LOW);
digitalWrite(G2,LOW);
}```

最新更新