Циклы

casperous
Offline
Зарегистрирован: 10.10.2017
//#include "InvertedTM1638.h"
#include "TM1638.h"
#include "TM16XXFonts.h"
#include "DHT.h"
//#define DHTPIN 2     
#define dh11 DHT11  
#define dh22 DHT22   

int led = 3;
TM1638 module(8, 9, 10);
DHT dhtul(2, dh22);
DHT dhtdom(3, dh11);
char tempnadatchike[4];
char vlajnostnadatchike[4];
byte knopka = 0b0000000;
byte sost = 0b0000001;
float h;
float t;
String time1 ;
int i;


void setup()

{

  pinMode(led, OUTPUT);
  module.setupDisplay(true, 0);
  Serial.begin(9600);
  Serial.println("DHTxx test!");
  dhtdom.begin();
  dhtul.begin();
}



void disp (int h, int t)
{
  module.setDisplayToString("C", 0, 0);
  module.setDisplayToString("H", 0, 4);
  module.setDisplayDigit(tempnadatchike[0] , 2, false);
  module.setDisplayDigit(tempnadatchike[1] , 3, false);
  module.setDisplayDigit(vlajnostnadatchike[0] , 5, false);
  module.setDisplayDigit(vlajnostnadatchike[1] , 6, false);
  module.setDisplayDigit(vlajnostnadatchike[2] , 7, false);
  dtostrf(h, 3, 0, vlajnostnadatchike);
  dtostrf(t, 2, 0, tempnadatchike);
}

int Settemp ()
{

}

void loop()
{
  knopka = module.getButtons();
  Serial.println (sost);
  if (knopka != 0b00000000)
  {
    module.setLEDs(0xFF00);
    sost = knopka;
  }
  if (sost == 0b00000001)
  {
    
    module.setLED(TM1638_COLOR_RED, 0);
    h = dhtul.readHumidity();
    t = dhtul.readTemperature();
    disp(h, t);
  }
  if (sost == 0b00000010)
  {
    
    module.setLED(TM1638_COLOR_RED, 1);
    h = dhtdom.readHumidity();
    t = dhtdom.readTemperature();
    disp(h, t);
  }
   if (sost == 0b00000100)
  {
    do
    {
      //sost = module.getButtons();
      module.setLED(TM1638_COLOR_RED, 2);
      module.setDisplayToString("C", 0, 0);
      
      
      if (sost == 0b10000000)
      {
        i = i++;
        module.setDisplayToDecNumber(i , 0, false);
      }
      else if (sost == 0b01000000)
      {
        i = i--;
        module.setDisplayToDecNumber(i, 0, false);
      }

    }while (sost == 0b00001000);
    
  }

}

Народ объясните почему  выходит из цикла Do While без проверки условия выхода

casperous
Offline
Зарегистрирован: 10.10.2017

casperous пишет:

//#include "InvertedTM1638.h"
#include "TM1638.h"
#include "TM16XXFonts.h"
#include "DHT.h"
//#define DHTPIN 2     
#define dh11 DHT11  
#define dh22 DHT22   

int led = 3;
TM1638 module(8, 9, 10);
DHT dhtul(2, dh22);
DHT dhtdom(3, dh11);
char tempnadatchike[4];
char vlajnostnadatchike[4];
byte knopka = 0b0000000;
byte sost = 0b0000001;
float h;
float t;
String time1 ;
int i;


void setup()

{

  pinMode(led, OUTPUT);
  module.setupDisplay(true, 0);
  Serial.begin(9600);
  Serial.println("DHTxx test!");
  dhtdom.begin();
  dhtul.begin();
}



void disp (int h, int t)
{
  module.setDisplayToString("C", 0, 0);
  module.setDisplayToString("H", 0, 4);
  module.setDisplayDigit(tempnadatchike[0] , 2, false);
  module.setDisplayDigit(tempnadatchike[1] , 3, false);
  module.setDisplayDigit(vlajnostnadatchike[0] , 5, false);
  module.setDisplayDigit(vlajnostnadatchike[1] , 6, false);
  module.setDisplayDigit(vlajnostnadatchike[2] , 7, false);
  dtostrf(h, 3, 0, vlajnostnadatchike);
  dtostrf(t, 2, 0, tempnadatchike);
}

int Settemp ()
{

}

void loop()
{
  knopka = module.getButtons();
  Serial.println (sost);
  if (knopka != 0b00000000)
  {
    module.setLEDs(0xFF00);
    sost = knopka;
  }
  if (sost == 0b00000001)
  {
    
    module.setLED(TM1638_COLOR_RED, 0);
    h = dhtul.readHumidity();
    t = dhtul.readTemperature();
    disp(h, t);
  }
  if (sost == 0b00000010)
  {
    
    module.setLED(TM1638_COLOR_RED, 1);
    h = dhtdom.readHumidity();
    t = dhtdom.readTemperature();
    disp(h, t);
  }
   if (sost == 0b00000100)
  {
    do
    {
      //sost = module.getButtons();
      module.setLED(TM1638_COLOR_RED, 2);
      module.setDisplayToString("C", 0, 0);
      
      
      if (sost == 0b10000000)
      {
        i = i++;
        module.setDisplayToDecNumber(i , 0, false);
      }
      else if (sost == 0b01000000)
      {
        i = i--;
        module.setDisplayToDecNumber(i, 0, false);
      }

    }while (sost == 0b00001000);
    
  }

}

Народ объясните почему  выходит из цикла Do While без проверки условия выхода

Поидеи он должен в нем остатться навечно ....

b707
Offline
Зарегистрирован: 26.05.2017

Цитата:

Народ объясните почему  выходит из цикла Do While без проверки условия выхода

значения sost в строке 80 и 100 разные - ошиблись при вводе.

Зачем вы записываете значение sost в бинарном формате 0b00000100 - пищите вместо этого просто 4, меньше путаться будете.

casperous
Offline
Зарегистрирован: 10.10.2017

мне и надо чтобы при нажатии другой кнопки происходил выход из цикла.....

к бинарному уже привык...  

Суть не в этом ... При нажатии 0b00000001 она считывает  данные с датчика и отображает на дисплее что делать недолжена если она находится в цикле do ..... пока ненажата 0b00001000

вопрос снят.....  неверно истолковал While....