Термостат семисегментный - PullRequest
0 голосов
/ 10 апреля 2020

Я строю термостат с Arduino Mega 2560. Я хотел бы отрегулировать желаемую температуру и представить ее на двух отдельных семисегментных дисплеях. Моя проблема в том, что это не работает. Я думаю, что проблема в том, что когда я вызываю функцию. Я хотел бы, чтобы кто-то помог мне с этим проектом, пожалуйста. Вот моя пустота l oop код

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);
}```

1 Ответ

0 голосов
/ 10 апреля 2020
#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);
}```
...