switch (val)
{
case 1: {} break; //в скобках пишем код для выполнения
case 2: {} break;
default: break;
}
В данном случае, вместо 1 и 2 нужно писать '1' и '2', а то условие не когда не совпадет. Потому что переменная val содержит символ цифры, а не цифру. Если хотите оставить как есть, поправте строку: switch(val - '0').
Спасибо за подсказку. Все поправил.
поправил 1 на "1" и 2 на "2". Не компилируется. выделяется срока с case "2"
invalid conversion from 'const char*' to 'int' [-fpermissive]
Вот я лашара..перепутал хер с дверной ручкой. " c ' //простите..
Выполнится, но в этом случае вам не нужно гадать где же заканчивается условие поскольку сделана наглядная структура. Очень полезно если программу например разрабатывает несколько человек. Да и вам проще будет прочитать через год-два если исправить что-либо придется.
Выполнится, но в этом случае вам не нужно гадать где же заканчивается условие поскольку сделана наглядная структура. Очень полезно если программу например разрабатывает несколько человек. Да и вам проще будет прочитать через год-два если исправить что-либо придется.
int val;
int RELAY1 = 8;
int RELAY2 = 9;
void setup()
{
Serial.begin(9600);
pinMode(RELAY1, OUTPUT);
digitalWrite(RELAY1, HIGH);
pinMode(RELAY2, OUTPUT);
digitalWrite(RELAY2, HIGH);
}
void loop()
{
if (Serial.available())
{
val = Serial.read();
if (val == '1')// При символе "1" включаем реле 1
{
digitalWrite(RELAY1, LOW);
}
if ( val == '0')// При символе "0" выключаем реле 1
{
digitalWrite(RELAY1, HIGH);
}
if (val == '2')// При символе "2" включаем реле 2
{
digitalWrite(RELAY2, LOW);
}
if ( val == '3')// При символе "3" выключаем реле 2
{
digitalWrite(RELAY2, HIGH);
}
}
}
Сделано было для управления реле по блюпуп.
посла 1-вкл первое реле
послал 0- выкл первое.
Но мне нужно послать код кнопки например (0x65 0x01 0x02 0x00 0xff 0xff 0xff). Понимаю, что это уже не символ '1', но ни как не могу понять, в какую сторону копать?
Внутри лупа нужно сделать переменную куда будет собираться код. Делается не условие доступности данных в сериал, а цикл. Читаем что пришло по сериал в созданную переменную. После цикла анализируем что в переменной.
Внутри лупа нужно сделать переменную куда будет собираться код. Делается не условие доступности данных в сериал, а цикл. Читаем что пришло по сериал в созданную переменную. После цикла анализируем что в переменной.
С реле так и не понял, а вот с выводом текста вроде понял.
Было
delay(2000);// даем датчику DHT22 время ожить. 2 секунд достаточно!!!
int t = sens.readTemperature(5); // чтение температуры с датчика на пине 5 ( создаем переменную (t) в которую пишем температуру)
int h = sens.readHumidity(5); // чтение влажности с датчика на пине 5 ( создаем переменную (h) в которую пишем влажность)
myNextion.setComponentText("t0", String(t));// выводим в текстовое поле "t0" на экране Nextion данные из переменной "t", в нашем случае данные температуры
myNextion.setComponentText("t1", String(h));// выводим в текстовое поле "t1" на экране Nextion данные из переменной "h", в нашем случае данные влажности
delay(120000);// обновляем данные через каждые 120 секунд (две минуты)!!!
if (t >=25)// если температура равно или больше 25 градусов
{
myNextion.setComponentText("t2", "Жарко");// пишем в текстовое поле "t2" на экране Nextion слово "Жарко"
}
else if (t ==18)// если температура равно 18 градусов
{
myNextion.setComponentText("t2", "Оптимально");// пишем в текстовое поле "t2" на экране Nextion слово "Оптимально"
}
else if (t ==10)// если температура равно 10 градусов
{
myNextion.setComponentText("t2", "Прохладно");// пишем в текстовое поле "t2" на экране Nextion слово "Прохладно"
}
else if (t <=0)// если температура равно или меньше 0 градусов
{
myNextion.setComponentText("t2", "Холодно");//пишем в текстовое поле "t2" на экране Nextion слово "Холодно"
}
Стало так
delay(2000);// даем датчику DHT22 время ожить. 2 секунд достаточно!!!
int t = sens.readTemperature(5); // чтение температуры с датчика на пине 5 ( создаем переменную (t) в которую пишем температуру)
int h = sens.readHumidity(5); // чтение влажности с датчика на пине 5 ( создаем переменную (h) в которую пишем влажность)
myNextion.setComponentText("t0", String(t));// выводим в текстовое поле "t0" на экране Nextion данные из переменной "t", в нашем случае данные температуры
myNextion.setComponentText("t1", String(h));// выводим в текстовое поле "t1" на экране Nextion данные из переменной "h", в нашем случае данные влажности
delay(120000);// обновляем данные через каждые 120 секунд (две минуты)!!!
int var = t;
switch (var)
{
case '>=25':// если темпераура больше или равна 25 градусов
myNextion.setComponentText("t2", "Жарко"); // пишем в текстовое поле "t2" на экране Nextion слово "Жарко"
break;
case '==18':// если температура равна 18 градусов
myNextion.setComponentText("t2", "Оптимально"); // пишем в текстовое поле "t2" на экране Nextion слово "Оптимально"
break;
case '==10':
myNextion.setComponentText("t2", "Прохладно");// пишем в текстовое поле "t2" на экране Nextion слово "Прохладно"
break;
case '<=0':// если температура меньше или равно 0 градусов
myNextion.setComponentText("t2", "Холодно");//пишем в текстовое поле "t2" на экране Nextion слово "Холодно"
break;
}
Не уверен что case умеет работать с интервалами, знающие подскажут. Вроде как case заменяет == и не нужно писать в кавычках.
Кстати а что будет если температура вдруг будет 11 градусов, то какой результат вы получите? Ваши условия не совсем корректны, нужно все проверять интервалами. И в этом случае от case придется отказаться (или забить все возможные варианты).
Думаю, лучше оставить с if. Что делать контроллеру, когда t в диапазонах 1..9 градусов, 11-17, 19-24?
Не факт, что в обработку программы попадет значение 0 или 10 или 18 или 25. Вот в случае быстрого снижения температуры и достижении -1 градус при предыдущем значении +1, т.е. 0 не успел измериться датчиком и попасть в программу? А у вас строгое условие "case 0". Переключение на "холодно" не произойдет. Даже при -15 останется значение "прохладно". Если "очень" повезет, может быть даже "жарко"
Определить диапазоны можно, например, так:
t>=25 "жарко", t < 25 и t>=15 "оптимально", t > 0 и t<15 "прохладно" , t <= 0 "холодно"
if ( t>=25 ) {myNextion.setComponentText("t2", "Жарко");};
if ( t>=15 && t<25 ) {myNextion.setComponentText("t2", "Оптимально");};
if ( t>0 && t<15 ) {myNextion.setComponentText("t2", "Прохладно");};
if ( t<= 0 ) {myNextion.setComponentText("t2", "Холодно");};
А для того, чтобы зря не посылать команды в myNextion, если состояние не меняется, можно добавить переменную, которая будет содержать в себе состояние на момент предыдущего замера.
String prevState="" //объявить до блока setup(). Можно не String, а byte
//-----------------------------------------------------------------------
//в loop()
if ( t>=25 && prevState!="hot" ) {myNextion.setComponentText("t2", "Жарко");prevState="hot"; };
if ( t>=15 && t<25 && prevState!="optim" ) {myNextion.setComponentText("t2", "Оптимально");prevState="optim"};
if ( t>0 && t<15 && prevState!="cold" ) {myNextion.setComponentText("t2", "Прохладно"); prevState="cold";};
if ( t<= 0 && prevState!="veryCold" ) {myNextion.setComponentText("t2", "Холодно");prevState="veryCold" };
Вот спасибо! Все разжевали.
Начало прояснятся.
Я так и знал, что на форуме есть адекватные люди.
А то сразу начинают пинать сапогами в живот- читай книжку, из тебя не плучиться нормальный програмер, выкин дуину с балкона, и т.д и т.п
Хочу еще прикрутить BMP180. Библиотек куча, аж голова кругом.
Остановился на одной.
Вот скетч
#include <Wire.h>
#include <BMP180.h>
BMP180 sensor;
void setup()
{
Serial.begin(9600);
delay(1000);
sensor.begin();
}
void loop()
{
if(sensor.read())
{
Serial.println((String)"CEHCOP BMP180: P="+sensor.pres+" MM.PT.CT - T="+sensor.temp+" *C - B="+sensor.alti+" M.");
}
else
{
Serial.println( "CEHCOP BMP180: HET OTBETA");
}
delay(3000);
}
// в библиотеке доступны всего две функции:
// sensor.begin(); ИНИЦИАЛИЗАЦИЯ СЕНСОРА (функция проверяет наличие сенсора и читает из него калибровочные коэффициенты для расчетов)
// sensor.begin(160); функция может принимать параметр float начальная высота, например над уровнем моря (по умолчанию = 0)
// функцию достаточно вызвать 1 раз, но не ранее чем через 10мс после подачи напряжения питания на BMP180
// sensor.read(); ЧТЕНИЕ ПАРАМЕТРОВ СЕНСОРА (функция читает данные сенсора и пересчитывает их в соответствии с калибровочными коэффициентами)
// sensor.read(0); функция может принимать параметр 0 , 1 , 2 или 3 , по умолчанию 3 (точность расчетов 0-минимальная ... 3-максимальная), чем меньше точность, тем быстрее происходит обработка и чтение параметров
// функция возвращает true или false в зависимости от реакции сенсора. Так же возвращает false если ни разу не вызывалась функция sensor.begin();
// результаты хранятся в следующих переменных:
// sensor.pres float - давление в мм.рт.ст.
// sensor.temp float - температура в *С
// sensor.alti float - высота относительно начальной (например над уровнем моря)
Вот и сам вопрос. Чтобы корректно показывало давление, нужно настроить датчик( указать реальную высоту над УРМ).
В скетче об этом написано внизу в подсказке, сторока sensor.begin(160); Я так понял нужно вписать свою высоту в библиотеке. Это файл с расширением .сср? Если да, то я там нашел voidBMP180::begin(float Altitude)- это оно? То есть нужно изменить float на мою высоту в метрах?
файл .h это сама библиотека, но туда можно и не лазить, а просто при "старте" датчика вместо по умолчанию как в примере строка 09 sensor.begin(); написать в скобках свою высоту.
Блин...А ведь так и предпологал сразу.
Но мы то не ищем легких путей.
Как бы датчик только в пути. С него буду брать только давление.
Еще не пытался вживить в (свой) код. Так...просто на бущее
А вот оставив 1 и 2 но поправив switch(val - '0')-- компилируется.
И оставив как есть, то есть 1 и 2 ,switch (val)-- тоже компилируется.
Спасибо за подсказку. Все поправил.
поправил 1 на "1" и 2 на "2". Не компилируется. выделяется срока с case "2"
invalid conversion from 'const char*' to 'int' [-fpermissive]
Вот я лашара..перепутал хер с дверной ручкой. " c ' //простите..
Кавычки одинарные или двойные? Это тоже имеет значение.
Кавычки одинарные или двойные? Это тоже имеет значение.
Теперь уже понял. А какова раздница между кавычками?
В классической реализации C++ символьная константа заключается в одинарные кавычки ('), а строка в двойные (").
http://arduino.ru/forum/programmirovanie/problema-s-vyvodom-v-monitor-co...
как-то так.
Хочу, чтобы в сериал выводилось слово "GOOD!!!" после получения 1.
Я правильно дописал код?
http://arduino.ru/forum/programmirovanie/problema-s-vyvodom-v-monitor-co...
Все предельно ясно. Спасибо!!!
Я правильно дописал код?
//в скобках пишем код для выполнения !!!!!!!!!!!!!!!!!
Так :):
В том что во втором случае принудительно указываете тип данных, например будет отправка строки, а не числа, хотя это и грубое приближение:
Serial
.println((String) 123
);
break
;
В том что во втором случае принудительно указываете тип данных, например будет отправка строки, а не числа, хотя это и грубое приближение:
Serial
.println((String) 123
);
break
;
Закрепил. Благодарю.
Выполнится, но в этом случае вам не нужно гадать где же заканчивается условие поскольку сделана наглядная структура. Очень полезно если программу например разрабатывает несколько человек. Да и вам проще будет прочитать через год-два если исправить что-либо придется.
А зачем там после case вообще скобки? Можно же без них.
Можно. Просто у каждого может быть свой взгляд на читабельность кода.
Выполнится, но в этом случае вам не нужно гадать где же заканчивается условие поскольку сделана наглядная структура. Очень полезно если программу например разрабатывает несколько человек. Да и вам проще будет прочитать через год-два если исправить что-либо придется.
Возможно Вы и правы!!!!
Всем привет!!!
Назрел очередной вопрос.
Вот код
Сделано было для управления реле по блюпуп.
посла 1-вкл первое реле
послал 0- выкл первое.
Но мне нужно послать код кнопки например (0x65 0x01 0x02 0x00 0xff 0xff 0xff). Понимаю, что это уже не символ '1', но ни как не могу понять, в какую сторону копать?
За ранее благодарен.
Внутри лупа нужно сделать переменную куда будет собираться код. Делается не условие доступности данных в сериал, а цикл. Читаем что пришло по сериал в созданную переменную. После цикла анализируем что в переменной.
Внутри лупа нужно сделать переменную куда будет собираться код. Делается не условие доступности данных в сериал, а цикл. Читаем что пришло по сериал в созданную переменную. После цикла анализируем что в переменной.
Спасибо!!!
Буду искать инфу..
Победил!!!
Не стал заморачиваться с циклом. Использовал как пример библиотеку NEXTION (забыл написать вначале вопроса, что хоч прикрутить экран NEXTION).
Допилил под себя.
Два реле, четыре кнопки.
Может кому сгодиться ( такому как я бестолковому програмеру).
Назрел вопрос.
Хочется в коде (выше) уйти от if и использовать switch.
что-то не получается ни чего. Запутался.
С реле так и не понял, а вот с выводом текста вроде понял.
Было
Стало так
Я правильно делаю?
Не уверен что case умеет работать с интервалами, знающие подскажут. Вроде как case заменяет == и не нужно писать в кавычках.
Кстати а что будет если температура вдруг будет 11 градусов, то какой результат вы получите? Ваши условия не совсем корректны, нужно все проверять интервалами. И в этом случае от case придется отказаться (или забить все возможные варианты).
Спасибо! Насчет дописать все варианты- я думал. Это как бы пробный вариант.
Про кавычки- а как показать что мне нужно >=25? Без кавычек не принимает. Просто 25 - да, а вот с условием- нет.
switch var case a; case b;
читаем так:
переменная var == a; == b;
Знак сравнения ставится автоматом и как изменить его я уже не подскажу.
А как можно показать например такое условие- от 18 до 25 ?
if ((var>=18)&&(var<25)) {}
возращаемся к if?
Только делайте условия не пересекающимися.
Например
if ((var>=18)&&(var<25)) {}
if (var>=25) {}
будет правильнее чем если вы напишите
if ((var>=18)&&(var<=25)) {}
if (var>=25) {}
По case с интервалами не подскажу, сам не знаю.
спасибо, помогли и научили, буду знать. но все же... вопрос открыт..
Думаю, лучше оставить с if. Что делать контроллеру, когда t в диапазонах 1..9 градусов, 11-17, 19-24?
Не факт, что в обработку программы попадет значение 0 или 10 или 18 или 25. Вот в случае быстрого снижения температуры и достижении -1 градус при предыдущем значении +1, т.е. 0 не успел измериться датчиком и попасть в программу? А у вас строгое условие "case 0". Переключение на "холодно" не произойдет. Даже при -15 останется значение "прохладно". Если "очень" повезет, может быть даже "жарко"
Определить диапазоны можно, например, так:
t>=25 "жарко", t < 25 и t>=15 "оптимально", t > 0 и t<15 "прохладно" , t <= 0 "холодно"
А для того, чтобы зря не посылать команды в myNextion, если состояние не меняется, можно добавить переменную, которая будет содержать в себе состояние на момент предыдущего замера.
Вот спасибо! Все разжевали.
Начало прояснятся.
Я так и знал, что на форуме есть адекватные люди.
А то сразу начинают пинать сапогами в живот- читай книжку, из тебя не плучиться нормальный програмер, выкин дуину с балкона, и т.д и т.п
Ну так пинают лентяев и хамов. А тем, кто прилагает усилия, изучает, здесь помогают. Даже сам Клапауций- местный троль и тот иногда помогает.
Зачем ты назвал его имя, он сейчас появится....
Все собрал в кучу, работает. Спасибо за подсказки и помощь.
единственоое НО- слишком много (;). Чуток лишнее.
Может специально? Замечу или нет? :-)
давай код, будем оптимизировать
Нет, просто перестарался.
давай код, будем оптимизировать
Вечером, если до компьютера доберусь.
Нет, просто перестарался.
Я так и понял.
С моей стороны- это была шутка.
Вопрос. А какая разница ? И как бы выглядело (
String prevState=
"")
с byte ( не компилируется)?Можно не String, а byte
Хочу еще прикрутить BMP180. Библиотек куча, аж голова кругом.
Остановился на одной.
Вот скетч
Вот и сам вопрос. Чтобы корректно показывало давление, нужно настроить датчик( указать реальную высоту над УРМ).
В скетче об этом написано внизу в подсказке, сторока sensor.begin(160); Я так понял нужно вписать свою высоту в библиотеке. Это файл с расширением .сср? Если да, то я там нашел void BMP180::begin(float Altitude)- это оно? То есть нужно изменить float на мою высоту в метрах?
Даже сам Клапауций- местный троль и тот иногда помогает.
ок. и, кому я и когда не помог? - где эти, обделённые моим вниманием несчастные.
Даже сам Клапауций- местный троль и тот иногда помогает.
ок. и, кому я и когда не помог? - где эти, обделённые моим вниманием несчастные.
Великий и могучий!!!
Склоняю голову.
Нашел!!!( кто ищет, тому воздастся). Я ошибался в соих предположениях. Файл с расширением (h).
Все ответы на свой вопрос нашел там.
файл .h это сама библиотека, но туда можно и не лазить, а просто при "старте" датчика вместо по умолчанию как в примере строка 09 sensor.begin(); написать в скобках свою высоту.
Блин...А ведь так и предпологал сразу.
Но мы то не ищем легких путей.
Как бы датчик только в пути. С него буду брать только давление.
Еще не пытался вживить в (свой) код. Так...просто на бущее
Нет, просто перестарался.
Я так и понял.
С моей стороны- это была шутка.
Вопрос. А какая разница ? И как бы выглядело (
String prevState=
"")
с byte ( не компилируется)?Можно не String, а byte
Подскажите пожалуйста. Пытаюсь облагородить вывод минут на экран, чтобы не было так 16:9, а надо 16:09
новичёк я не смейтесь над кодом, но получается какая то хрень
что не правильно
Ну если не вникать в DT (не пользовался никогда) , то в строке 7 поменяйте "<" на ">".
попробовал поменять код
теперь выводит время как 20:118
Добавьте фигурные скобки для второго if.