Создать условие

egor22
Offline
Зарегистрирован: 02.06.2019

Помогите пожалуйста создать условие.

Например если temp=20 то сигнал звучит один раз, если temp=25 то звучит 3 раза

Вот пример куска кода

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

if (temp==20) beep();

if (temp==25) {

   beep();

   pause();

   beep();

   pause();

   beep();

}

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

egor22 пишет:

Вот пример куска кода

Это ты дал нам инструкцию, как для тебя код вставлять?

vk007
Offline
Зарегистрирован: 16.06.2015

Ворота пишет:
Это ты дал нам инструкцию, как для тебя код вставлять?

Это кажись уже кто-то из модеров подправил сообщение. А чё, очень здравая идея - править посты тем кто не удосужился правильно вставить код, и вместо кода вставлять ссылку. Вот только работы такой будет выше крыши.

Araris
Offline
Зарегистрирован: 09.11.2012

Ссылку вместо текста поставил я, намереваюсь так и в дальнейшем делать, приглашаю коллег-модераторов присоединяться.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Araris пишет:

Ссылку вместо текста поставил я, намереваюсь так и в дальнейшем делать, приглашаю коллег-модераторов присоединяться.

Добрый совет: модерам доступны доп. тэги оформления, емнип. Так что можно выделять надпись каким-нибудь цветом, и делать приписку вида

[moderator] : тут текст комментария

например:

[Araris]: пожалуйста, вставьте код правильно - http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

только текст красным, как вариант.

Araris
Offline
Зарегистрирован: 09.11.2012

Спасибо, попробую.

egor22
Offline
Зарегистрирован: 02.06.2019
Извините. Вот весь код. Работа с датчикоми 18B20
#include <LiquidCrystal.h> // include LCD library code
 
#define DS18B20_PIN 10
 
// LCD module connections (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd( 7, 6, 5, 4, 3, 2 );

const int SoundPin = 9; // Пин подключения пьезоизлучателя – 9 дискретный 
int i;
int raw_temp;
 int temp;
char txt[] = " C ";
 
void setup(void) {
  // start serial port
  Serial.begin( 9600 );
  // set up the LCD's number of columns and rows
  lcd.begin( 16,  2 );
  txt[ 0 ]  =  223 ;                      // Put degree symbol (°)
  lcd.setCursor( 2,  0 );
  lcd.print("Temperature:");
  
}
 
void loop(void) {
  if(ds18b20_read( & raw_temp) ) {
    Serial.print("Temperature = ");
    temp =  (float) raw_temp /  16 ;      // Convert temperature raw value into degree Celsius (temp in °C = raw/16)
    Serial.print(temp) ;               // Print temperature value in degree Celsius
    Serial.println("°C");             // Print '°C'
    // Display temperature on LCD
    lcd.setCursor( 4,  1 );
    lcd.print(temp);
    lcd.print(txt);
    if (temp == 20){                // *****************
      i++;                          //******************
      if(i<2){                      //******************
      tone(SoundPin, 1000, 1000);   //******************
        }
      }
      
  }
  
  else {
    Serial.println("Communication Error!");
    lcd.setCursor(4, 1);
    lcd.print(" Error! ");
  }
  delay(1000);
}
 
bool ds18b20_start(){
  bool ret = 0;
  digitalWrite(DS18B20_PIN, LOW);     // Send reset pulse to the DS18B20 sensor
  pinMode(DS18B20_PIN, OUTPUT);
  delayMicroseconds(500);             // Wait 500 us
  pinMode(DS18B20_PIN, INPUT);
  delayMicroseconds(100);             //wait to read the DS18B20 sensor response
  if (!digitalRead(DS18B20_PIN)) {
    ret = 1;                          // DS18B20 sensor is present
    delayMicroseconds(400);           // Wait 400 us
  }
  return(ret);
}
 
void ds18b20_write_bit(bool value){
  digitalWrite(DS18B20_PIN, LOW);
  pinMode(DS18B20_PIN, OUTPUT);
  delayMicroseconds(2);
  digitalWrite(DS18B20_PIN, value);
  delayMicroseconds(80);
  pinMode(DS18B20_PIN, INPUT);
  delayMicroseconds(2);
}
 
void ds18b20_write_byte(byte value){
  byte i;
  for(i = 0; i < 8; i++)
    ds18b20_write_bit(bitRead(value, i));
}
 
bool ds18b20_read_bit(void) {
  bool value;
  digitalWrite(DS18B20_PIN, LOW);
  pinMode(DS18B20_PIN, OUTPUT);
  delayMicroseconds(2);
  pinMode(DS18B20_PIN, INPUT);
  delayMicroseconds(5);
  value = digitalRead(DS18B20_PIN);
  delayMicroseconds(100);
  return value;
}
 
byte ds18b20_read_byte(void) {
  byte i, value;
  for(i = 0; i  <8; i++)
    bitWrite(value, i, ds18b20_read_bit());
  return value;
}
 
bool ds18b20_read(int *raw_temp_value) {
  if (!ds18b20_start())                     // Send start pulse
    return(0);                              // Return 0 if error
  ds18b20_write_byte(0xCC);                 // Send skip ROM command
  ds18b20_write_byte(0x44);                 // Send start conversion command
  while(ds18b20_read_byte() == 0);          // Wait for conversion complete
  if (!ds18b20_start())                     // Send start pulse
    return(0);                              // Return 0 if error
  ds18b20_write_byte(0xCC);                 // Send skip ROM command
  ds18b20_write_byte(0xBE);                 // Send read command
  *raw_temp_value = ds18b20_read_byte();    // Read temperature LSB byte and store it on raw_temp_value LSB byte
  *raw_temp_value |= (unsigned int)(ds18b20_read_byte() << 8);     // Read temperature MSB byte and store it on raw_temp_value MSB byte
  return(1);                                // OK --> return 1
}

 

Гриша
Offline
Зарегистрирован: 27.04.2014

строки 36-40, необходимо переписать. Подумайте об алгоритме где есть 2 связанных события. 1 - наступило событие в котором t = 20 && музыка еще не играла.... 2 - температура еще t=20  а музака уже звучала. Вопрос, как МК поймет разницу между событиями? 

напишите код для 2х кнопок, если нажать (и держать) первую играем 1 раз, если вторую - 3 раза... а потом этот код легко прицепить к требуемому, а понимать его будет проще...

bwn
Offline
Зарегистрирован: 25.08.2014

Araris пишет:

Ссылку вместо текста поставил я, намереваюсь так и в дальнейшем делать, приглашаю коллег-модераторов присоединяться.

Увы, у основной массы, нет возможности править первый пост.(((( Только убить.((((