Разница между двумя значениями.

Тема в разделе "Arduino & Shields", создана пользователем Artclonic, 28 мар 2018.

  1. Asper Daffy

    Asper Daffy Иксперд

    А код засекречен?
     
  2. Artclonic

    Artclonic Гик

    Ни чего не засекречено... вот мои код двух компасов.. Как сделать разницу между значениями?
    Код (C++):
    #include <SoftwareWire.h>
    #define addr 0x0D //I2C Address for The HMC5883

    SoftwareWire myWire1(4, 5); //4  sda and 5 scl
    SoftwareWire myWire2(6, 7); //6  sda and 7 scl
    const int knopka1=8; // кнопка №1
    const int knopka2=9; // кнопка №2
    int val=0;
    unsigned long L=250;
    int xx1;
    int yy1;
    int zz1;

    int xx2;
    int yy2;
    int zz2;


    static int mx1;
    static int my1;
    static int mz1;

    static int mx2;
    static int my2;
    static int mz2;




    void setup() {

    pinMode(knopka1, INPUT_PULLUP);
    pinMode(knopka2, INPUT_PULLUP);
    Serial.begin(9600);

      myWire1.begin();
      myWire2.begin();
     
      myWire1.beginTransmission(addr); //start talking
      myWire1.write(0x0B); // Tell the HMC5883 to Continuously Measure
      myWire1.write(0x01); // Set the Register
      myWire1.endTransmission();
      myWire1.beginTransmission(addr); //start talking
      myWire1.write(0x09); // Tell the HMC5883 to Continuously Measure
      myWire1.write(0x1D); // Set the Register
      myWire1.endTransmission();
     
      myWire2.beginTransmission(addr); //start talking
      myWire2.write(0x0B); // Tell the HMC5883 to Continuously Measure
      myWire2.write(0x01); // Set the Register
      myWire2.endTransmission();
      myWire2.beginTransmission(addr); //start talking
      myWire2.write(0x09); // Tell the HMC5883 to Continuously Measure
      myWire2.write(0x1D); // Set the Register
      myWire2.endTransmission();


    }

    void loop() {
     
    if(digitalRead(knopka1)==LOW) //проверка включена ли кнопка №1
    {
      //Начало первого блока кода для чтения 1 датчика
      int x1, y1, z1; //triple axis data
      //Tell the HMC what regist to begin writing data into

      myWire1.beginTransmission(addr);
      myWire1.write((uint8_t)0x00); //start with register 3.
      myWire1.endTransmission();

      //Read the data.. 2 bytes for each axis.. 6 total bytes
      myWire1.requestFrom(addr, 6);
      if (6 <= myWire1.available()) {
        x1 = myWire1.read(); //MSB  x
        x1 |= myWire1.read() << 8; //LSB  x
        z1 = myWire1.read(); //MSB  z
        z1 |= myWire1.read() << 8; //LSB z
        y1 = myWire1.read(); //MSB y
        y1 |= myWire1.read() << 8; //LSB y
      }

     
      xx1=(mx1-x1)/L;
    mx1=x1;
      yy1=(my1-y1)/L;
      my1=y1;
      zz1=(mz1-z1)/L;
      mz1=z1;
     

      //Начало второго блока кода для чтения 2 датчика
      int x2, y2, z2; //triple axis data
      //Tell the HMC what regist to begin writing data into

      myWire2.beginTransmission(addr);
      myWire2.write((uint8_t)0x00); //start with register 3.
      myWire2.endTransmission();

      //Read the data.. 2 bytes for each axis.. 6 total bytes
      myWire2.requestFrom(addr, 6);
      if (6 <= myWire2.available()) {
        x2 = myWire2.read(); //MSB  x
        x2 |= myWire2.read() << 8; //LSB  x
        z2 = myWire2.read(); //MSB  z
        z2 |= myWire2.read() << 8; //LSB z
        y2 = myWire2.read(); //MSB y
        y2 |= myWire2.read() << 8; //LSB y
      }
     
      xx2=(mx2-x2)/L;
       mx2=x2;
      yy2=(my2-y2)/L;
       my2=y2;
      zz2=(mz2-z2)/L;
       mz2=z2;
     
      // Печать в порт
     
    Serial.print("E");
    Serial.print(x1);
    Serial.print(",");
    Serial.print(y1);
    Serial.print(",");
    Serial.print(z1);
    Serial.print(",");
    Serial.print(xx1);
    Serial.print(",");
    Serial.print(yy1);
    Serial.print(",");
    Serial.print(zz1);
    //Serial.print(",");

    //Serial.print(x2);
    //Serial.print(",");
    //Serial.print(y2);
    //Serial.print(",");
    //Serial.print(z2);
    //Serial.print(",");

    //Serial.print(xx2);
    //Serial.print(",");
    //Serial.print(yy2);
    //Serial.print(",");
    //Serial.print(zz2);
    Serial.print("\n");

      delay(L);
    }
    else
    {
      if(digitalRead(knopka2)==LOW)  // нажали кнопочку #2
          {      
          val++;  // прибавляем к переменной 1 при каждой смене цикла.    
          delay(200); //небольшая защита от "дребезга" контактов кнопки
                       
          if(val>=5)
          {
           Serial.print("REPER");
           //Serial.print(val);
            val=0; // обнулили переменную
            delay(1000);//пауза
           }
                       
           else
           {
             // ничего не делаем...
            }
           
          }
          else
           {
            val=0; // обнулили переменную
            }
         
          }
          }
         


     
     
  3. Asper Daffy

    Asper Daffy Иксперд

  4. Artclonic

    Artclonic Гик

    Даа....
     
  5. Artclonic

    Artclonic Гик

    ПРавильно понял, что переменную static int нужно объявить внутри loop, а не в глобальных переменных? (сложновато.. честно говоря для меня...)
     
  6. parovoZZ

    parovoZZ Гуру