#include <Servo.h>
#include <iarduino_RTC.h>
iarduino_RTC Time (RTC_DS1302, A0, A2, A1); //назначение пинов обмена данными RST, CLK, DAT
Servo servo; //имя сервопривода
int pos = 0; //переменная хранящая угол поворота сервопривода
unsigned long newCycle,TimeWait,r,TimeWork,TimsWorker =7850; //1)переменная хранящая время прошедшее с момента нажатия кнопки. 2)переменная хранящаявремя с момента последнего вывода текущего значения времени с RTC модуля в серийный порт. 3)переменная хранящая время включения сервопривода
const char LED = A3; //номер пина светодиода(стадия разработки)
boolean control,qr,QR=true; //переменная меняющая значение в момент включения и выключения сервопривода 1:(служит для ограничения срабатывания по времени с RTC до одного раза за секунду)2:не смог сформулировать.
byte c = 0; //переменная хранящая количество раз нажатия кнопки
int I,i,W=1; //1:переменная меняющая свое значение в момент нажатия кнопки(защита от дребезга)2:переменная хранящая статус положения сервопривода(защита от дребезга)
void setup() {
delay(300); //время на подумать
Time.begin(); //инициализация работы часов
servo.attach(A4); //назначение пина управления сервоприводом
Serial.begin(9600); //инициализация порта
//Time.settime(35,41,16,18,02,2020,2); // 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
pinMode(LED, OUTPUT); //назначение пина светодиода выходом (индикация работы)
r = millis();
pinMode(7, INPUT_PULLUP);
pinMode(A5, INPUT_PULLUP);
newCycle = 0;
}
void loop() {
control=!digitalRead(7);
if(I==1&&control==HIGH){
TimsWorker-=1000;
I=0;
Serial.println(TimsWorker);
if(TimsWorker<1000){
TimsWorker=7850;
digitalWrite (LED,HIGH);
newCycle=millis();
}
}
if(millis()-newCycle>=1000){
digitalWrite(LED,LOW);
newCycle = 0;
Serial.println("в новом проблема");
}
if(control==LOW){
I=1;
delay(20);
}
не могу понять - почему оператор if из 36й строки срабатывает в каждом цикле... подскажите пожалуйста
не, там же наоборот переменной присваивается значение нуля после чего оно меняется только в 32й строчке в новом цикле и то только если условие оператора из 29ой позволит да и тот выполняется только после нажатия кнопки...а когда newCycle меньше 1000 оператор из 36й не должен же выполнять тело...
не, там же наоборот переменной присваивается значение нуля после чего оно меняется только в 32й строчке в новом цикле и то только если условие оператора из 29ой позволит да и тот выполняется только после нажатия кнопки...а когда newCycle меньше 1000 оператор из 36й не должен же выполнять тело...
Кто то просто настолько далёк от программирования, что за полгода так и не разобрался с millis()
У тебя там должно быть:
NewCycle=millis();
А не
NewCycle=0;
не, там же наоборот переменной присваивается значение нуля после чего оно меняется только в 32й строчке в новом цикле и то только если условие оператора из 29ой позволит да и тот выполняется только после нажатия кнопки...а когда newCycle меньше 1000 оператор из 36й не должен же выполнять тело...
Кто то просто настолько далёк от программирования, что за полгода так и не разобрался с millis() У тебя там должно быть: NewCycle=millis(); А не NewCycle=0;
не согласен. если я в 38й строчке напишу"NewCycle=millis();" , то оператор из 36 будет срабатывать каждую секунду, а он должен выполнять тело цикла через секунду после выполнения строки 32.
нет, вот вы молодцы конечно... "прочитай хоть одну книгу по программированию" , "тебе не надоело идиотом себя выставлять" , "изучи хотя бы азы"...
пол года изучал, смотрел, читал, вникал... ну сделал я эту кормушку,и кнопки управления сделал, и экран на неё повесил... а куда теперь все эти знания девать? похоронить пол года стараний что ли?!
Зачем хоронить? Теперь сам другим пиши: "прочитай хоть одну книгу по программированию" , "тебе не надоело идиотом себя выставлять" , "изучи хотя бы азы".
Зачем хоронить? Теперь сам другим пиши: "прочитай хоть одну книгу по программированию" , "тебе не надоело идиотом себя выставлять" , "изучи хотя бы азы".
Ну почему же! Может чел-у нравится дурачком себя выставлять. Есть ведь что то такое по Фрейду.)
Здравствуйте товарищи!я как всегда с уникальным вопросом -
#include "iarduino_DHT.h"
const byte ventilation=9 ,heater=8 ;
iarduino_DHT sensor(A1); // Объявляем объект, указывая номер вывода, к которому подключён модуль
unsigned long updating_data = millis() ;
void setup(){
delay(1000); // Приостанавливаем выполнение скетча на 1 секунду, для перехода датчика в активное состояние
Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта, на скорости 9600 бод
pinMode(ventilation,OUTPUT);
pinMode(heater,OUTPUT);
digitalWrite(ventilation,HIGH);
digitalWrite(heater, HIGH);
}
void loop(){
if (millis() - updating_data >= 2000ul){
Serial.print ("Показания датчика: ");
int humidity,temperature;
switch(sensor.read()){ // Читаем показания датчика
case DHT_OK: Serial.println((String) sensor.hum + "% - " + sensor.tem + "°C");
humidity=sensor.hum;
temperature=sensor.tem;
if (humidity>=60.00&&ventilation == LOW){
digitalWrite (ventilation,HIGH);
Serial.println("9-HIGH");}
else{
Serial.println("0");
}
if (humidity<=40.00&&ventilation == HIGH) {
digitalWrite (ventilation,LOW);
Serial.println("9-LOW");
}
else{
Serial.println("1");
}
if (temperature>=22.00&&heater == HIGH){
digitalWrite (heater,LOW);
Serial.println("8,LOW");
}
else{
Serial.println("2");
}
if (temperature<=15.00&&heater == LOW) {
digitalWrite (heater,HIGH);
Serial.println("8,HIGH");
}
else{
Serial.println("3");
}
break;
case DHT_ERROR_CHECKSUM: Serial.println("HE PABEHCTBO KC"); break;
case DHT_ERROR_DATA: Serial.println("OTBET HE COOTBETCTB. CEHCOPAM 'DHT'"); break;
case DHT_ERROR_NO_REPLY: Serial.println("HET OTBETA"); break;
default: Serial.println("ERROR"); digitalWrite (ventilation,LOW);digitalWrite (heater,LOW); break;
}
updating_data = millis();
}
}
в строках 23,30,37,44. если убрать вторую часть условия, например "&&ventilation == LOW", то все прекрасно работает. а в оригинальном виде, оператор "if" считает условие ложным. не могу понять - почему?
а как быть со сравнением? с датчика то показания приходят с точкой
когда вы их присваиваете своим переменным типа int. никакой точки там уже нет.
Вот вы чуть выше восклицаете - "Когда же я научусь искать ошибки в своих скетчах?" . А причина-то вовсе не в невнимательности - причина что вы не знаете основ языка, на котором пишете. При таком раскладе искать ошибки вы не научитесь никогда. так и будете годами задавать детские вопросы об одном и том же.
#include "iarduino_DHT.h"
int ventilation=9 ,heater=8 ;
iarduino_DHT sensor(A1); // Объявляем объект, указывая номер вывода, к которому подключён модуль
unsigned long updating_data = millis() ;
void setup(){
delay(1000); // Приостанавливаем выполнение скетча на 1 секунду, для перехода датчика в активное состояние
Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта, на скорости 9600 бод
pinMode(ventilation,OUTPUT);
pinMode(heater,OUTPUT);
digitalWrite(ventilation,HIGH);
digitalWrite(heater, HIGH);
}
void loop(){
if (millis() - updating_data >= 2000ul){
Serial.print ("Показания датчика: ");
float humidity,temperature;
switch(sensor.read()){ // Читаем показания датчика
case DHT_OK: Serial.println((String) sensor.hum + "% - " + sensor.tem + "°C");
humidity=sensor.hum;
temperature=sensor.tem;
if (humidity>=60.00&&ventilation == LOW){
digitalWrite (ventilation,HIGH);
Serial.println("9-HIGH");}
else{
Serial.println("0");
}
if (humidity<=40.00&&ventilation == HIGH) {
digitalWrite (ventilation,LOW);
Serial.println("9-LOW");
}
else{
Serial.println("1");
}
if (temperature>=22.00&&heater == HIGH){
digitalWrite (heater,LOW);
Serial.println("8,LOW");
}
else{
Serial.println("2");
}
if (temperature<=15.00&&heater == LOW) {
digitalWrite (heater,HIGH);
Serial.println("8,HIGH");
}
else{
Serial.println("3");
}
break;
case DHT_ERROR_CHECKSUM: Serial.println("HE PABEHCTBO KC"); break;
case DHT_ERROR_DATA: Serial.println("OTBET HE COOTBETCTB. CEHCOPAM 'DHT'"); break;
case DHT_ERROR_NO_REPLY: Serial.println("HET OTBETA"); break;
default: Serial.println("ERROR"); digitalWrite (ventilation,LOW);digitalWrite (heater,LOW); break;
}
updating_data = millis();
}
}
монитор порта:
Показания датчика: 95.00% - 29.00°C
0
1
2
3
Показания датчика: 86.00% - 29.00°C
0
1
2
3
Показания датчика: 43.00% - 29.00°C
0
1
2
3
Показания датчика: 40.00% - 29.00°C
0
1
2
3
Показания датчика: 37.00% - 29.00°C
0
1
2
3
при этом оба светодиода(те что вместо нагрузки на 8 и 9 пинах) работают постоянно в не зависимости от показаний датчика(что и видно по показаниям в мониторе).
Здравствуйте, о великие гуру программирования и безвозмездной помощи, отрокам еще не знающим и не умеющим)))
Поменяли мне операционку с 7ки на 10ку. поставил я на нее версию arduino IDE для семерки (что бы библиотеками ее пополнять без проблем) и теперь сама программа, "arduino IDE", не видит подключаемые к компу платы ардуино. При чем винда видит подключенное устройство и определяет его ком порт.
Наверняка есть какой то нюанс на этот случай. Подскажите куда идти XD
P.S. на каком то форуме говорили про драйвера, которые нужно скачать с сайта ардуино, и даже ссылку оставляли, но как я там не пытался найти хоть что то связанное с драйверами - не получилось...
#define CLK 2
#define DT 3
#define SW 12
#define ventilation 6
#define heater 5
#define FILTER_STEP 10000
#define FILTER_COEF 0.05
#include <LiquidCrystal_I2C_OLED.h>
#include <Servo.h> //подключение библиотеки управления сервоприводом
#include <iarduino_RTC.h> //подключение библиотеки модуля часов
#include "GyverEncoder.h"
#include "iarduino_DHT.h"
#include <Wire.h> //подключение библиотеки не помню какой(по моему она тут вообще не нужна...)
Encoder enc1(CLK, DT, SW,2);
iarduino_DHT sensor(A1); // Объявляем объект, указывая номер вывода, к которому подключён модуль
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servo; //имя сервопривода
iarduino_RTC Time (RTC_DS1302, A0, A2, A1); //назначение пинов обмена данными RST, CLK, DAT
float val_humidity, val_temperature,humidity,temperature,userTemp=15ul,userHum=70ul;
int pos = 0, menu=1; //переменная хранящая угол поворота сервопривода
unsigned long filter_timer,TimeWait,TimeWork,TimsWorker=4710ul,home_timerMenu; //1)переменная для индикации закольцовки 2)переменная хранящая время прошедшее с момента нажатия кнопки. 2)переменная хранящаявремя с момента последнего вывода текущего значения времени с RTC модуля в серийный порт. 3)переменная хранящая время включения сервопривода
boolean qr=true,QR=true; //переменная меняющая значение в момент включения и выключения сервопривода 1:(служит для ограничения срабатывания по времени с RTC до одного раза за секунду)2:не смог сформулировать.
byte c = 1; //переменная хранящая количество раз нажатия кнопки
int w,W; //1:переменная меняющая свое значение в момент нажатия кнопки(защита от дребезга)2:переменная хранящая статус положения сервопривода(защита от дребезга)
boolean statusVent=digitalRead(ventilation);
boolean statusHeat=digitalRead(heater);
byte line_2[8] =
{
B00010,
B10101,
B10101,
B01110,
B00100,
B00100,
B00100,
};
byte line_1[8] =
{
B00100,
B01010,
B00100,
B00000,
B00000,
B00000,
B00000,
};
void setup() {
delay(300); //время на подумать
Time.begin(); //инициализация работы часов
Serial.begin(9600);
pinMode(ventilation,OUTPUT);
pinMode(heater,OUTPUT);
digitalWrite(ventilation,HIGH);
digitalWrite(heater, HIGH);
attachInterrupt(1, encoder, CHANGE);
attachInterrupt(0, encoder, CHANGE);
lcd.init(); //инициализация работы дисплея
enc1.setTickMode(AUTO);
servo.attach(6); //назначение пина управления сервоприводом
filter_timer=millis();
//Time.settime(00,7,19,22,9,2020,2); // 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
lcd.createChar(1,line_1);
lcd.createChar(2,line_2);
}
void loop() {
enc1.tick();
if (enc1.isTurn()){lcd.backlight();home_timerMenu = millis();QR=false;w=true;lcd.clear();
switch (menu){
case 1: if(w==true){//lcd.clear();
lcd.setCursor(1,0);lcd.print("t");lcd.write(1);lcd.setCursor(3,0);lcd.print("val_temp");lcd.print("C");lcd.write(1);
lcd.setCursor(1,1);lcd.write(2);lcd.setCursor(3,1);lcd.print("val_humidity%");w=false;} break;
case 2: if(w==true){//lcd.clear();
lcd.setCursor(0,0);lcd.print(">");lcd.setCursor(1,0);lcd.print("t");lcd.write(1);lcd.setCursor(3,0);lcd.print(userTemp);lcd.print("C");lcd.write(1);
lcd.setCursor(1,1);lcd.write(2);lcd.setCursor(3,1);lcd.print(userHum,"%");w=false;} break;
case 3: if(w==true){//lcd.clear();
lcd.setCursor(1,0);lcd.print("t");lcd.write(1);lcd.setCursor(3,0);lcd.print(userTemp);lcd.print("C");lcd.write(1);
lcd.setCursor(0,1);lcd.print(">");lcd.setCursor(1,1);lcd.write(2);lcd.setCursor(3,1);lcd.print(userHum,"%");w=false;}break;
case 4: if(w==true){//lcd.clear();
lcd.setCursor(0,0);lcd.print(">");lcd.setCursor(1,0);lcd.print(Time.gettime("H:i:s")); //lcd.setCursor(8,0);lcd.print("");
lcd.setCursor(0,1);lcd.print(" ");lcd.setCursor(6,1);lcd.print("TimsWorker");w=false;}break;
case 5: if(enc1.isClick()){servoOpen(); TimeWork = millis();W=false;}break;
}
if(W==false){
switch (c){
case 1: //lcd.clear();
lcd.setCursor(0,0);lcd.print(">");lcd.setCursor(1,0);lcd.print("DokopM"); lcd.setCursor(8,0);lcd.print("Experemen");
lcd.setCursor(1,1);lcd.print(" ");lcd.setCursor(6,1);lcd.print("TimsWorker");servoToClose();TimeWork=0;W=true;break;
case 2: //lcd.clear();
lcd.setCursor(0,0);lcd.print(">");lcd.setCursor(1,0);lcd.print("DokopM"); lcd.setCursor(8,0);lcd.print("1/2");
lcd.setCursor(1,1);lcd.print(" ");lcd.setCursor(6,1);lcd.print("TimsWorker");
if ( TimsWorker/2 <= millis() - TimeWork) {servoToClose();Serial.println("1/2");TimeWork=0;W=true;}break;
case 3: //lcd.clear();
lcd.setCursor(0,0);lcd.print(">");lcd.setCursor(1,0);lcd.print("DokopM"); lcd.setCursor(8,0);lcd.print("Doza");
lcd.setCursor(0,1);lcd.print(" ");lcd.setCursor(6,1);lcd.print("TimsWorker");
if (millis() - TimeWork >= TimsWorker) {servoToClose();Serial.println("doza");TimeWork=0;W=true;}break;
default:TimeWait=0;c=1;TimeWork=0;W=true; break;}
}}
if (millis()- home_timerMenu>=30000&&QR==false){
Serial.println("menu time 1");
lcd.noBacklight();
home_timerMenu=0;
QR=true;
menu=1;}
if (qr == true && Time.Hours == 7 && Time.minutes == 00 && Time.seconds == 10) { // если переменная qr имеет значение true и время 07:00:10 то
qr = false;
TimeWork = millis();
home_timerMenu=millis();
lcd.backlight();
servoOpen();}
if (qr == true && Time.Hours == 18 && Time.minutes == 00 && Time.seconds == 10) { //если переменная qr имеет значение true и время 18:00:10 то
qr = false; //присвоить переменной значение false
TimeWork = millis(); //присвоить переменной значение millis
lcd.backlight();
home_timerMenu=millis();
servoOpen();
}
if (millis() - TimeWork >= TimsWorker && qr == false) { //если переменная qr имеет значение false, а с момента присвоения переменной TimeWork значения millis прошло 5 сек то
qr = true; //присвоить переменной значение true
servoToClose(); //выполнить функцию
}
if (millis() - filter_timer > FILTER_STEP) {filter_timer = millis();
switch(sensor.read()){
case DHT_OK:
humidity=sensor.hum;
temperature=sensor.tem; // читаем значение (не обязательно с аналога, это может быть ЛЮБОЙ датчик)
val_humidity = humidity * FILTER_COEF + val_humidity * (1 - FILTER_COEF); // основной алгоритм фильтрации. Внимательно прокрутите его в голове, чтобы понять, как он работает
val_temperature = temperature * FILTER_COEF + val_temperature * (1 - FILTER_COEF);break;
/*Serial.print(val_temperature); Serial.println("°");
Serial.print(val_humidity ); Serial.println("%");
Serial.print(temperature); Serial.println("°");
Serial.print(humidity); Serial.println("%");
case DHT_ERROR_CHECKSUM: Serial.println("HE PABEHCTBO KC"); break;
case DHT_ERROR_DATA: Serial.println("OTBET HE COOTBETCTB. CEHCOPAM 'DHT'"); break;
case DHT_ERROR_NO_REPLY: Serial.println("HET OTBETA"); break;
default: Serial.println("ERROR"); digitalWrite (ventilation,LOW);digitalWrite (heater,LOW); break;
}
Serial.print("влажность:"); Serial.print(val_humidity);Serial.print(" ");Serial.println(statusVent);
Serial.print("температура:");Serial.print(val_temperature);Serial.print(" ");Serial.println(statusHeat);*/
}
if (val_humidity - userHum > 10 && statusVent == LOW){
digitalWrite (ventilation,HIGH);
}
if (userHum - val_humidity > 10 && statusVent == HIGH){
digitalWrite (ventilation,LOW);
}
if ( userTemp - val_temperature > 4 && statusHeat== LOW){
digitalWrite (heater,HIGH);
}
if ( val_temperature - userTemp > 4 && statusHeat == HIGH){
digitalWrite (heater,LOW);
}
if (TimsWorker>=20000){TimsWorker=20000;}
if (TimsWorker<=785){TimsWorker=785;}
}}
void servoOpen() { //создать функцию
for (pos = 90; pos >= 0; pos -= 1) { //оператор:если переменная pos ровна 90 то: это больше или ровно 0?: если да то отнять от значения переменной pos единицу и выполнить функцию
servo.write(pos); //повернуть вал сервопривода на градус равный значению переменной pos
delay(5);} //перерыв в работе 0.005сек
//Serial.println("open");
}
void servoToClose() { //создать функцию
for (pos = 0; pos <= 90; pos += 1) {servo.write(pos);delay(5);}
servoDo();
}
void servoDo() {
for (pos = 90; pos >= 88; pos -= 1) {servo.write(pos);delay(5);}
//Serial.println("servoDo");
lcd.setCursor(2,1);
lcd.print("CLOSE ");
}
void encoder (){
if (enc1.isRight()){menu++;if(menu>5){menu=5;}/*Serial.println(menu);*/}
if (enc1.isLeft()){menu--;if(menu<1){menu=1;}/*Serial.println(menu);*/}
switch (menu){
case 1:
break;
case 2:
if (enc1.isRightH()){userTemp++;/*Serial.print("menu2 ");Serial.println(userTemp);*/} // если было удержание + поворот
if (enc1.isLeftH()) {userTemp--;/*Serial.print("menu2 ");Serial.println(userTemp);*/} // если было удержание + поворот
break;
case 3:
if (enc1.isRightH()){userHum++;/*Serial.print("menu3 ");Serial.println(userHum);*/} // если было удержание + поворот
if (enc1.isLeftH()) {userHum--;/*Serial.print("menu3 ");Serial.println(userHum);*/} // если было удержание + поворот
break;
case 4:
if (enc1.isRightH()){TimsWorker+=785ul;/*Serial.print("menu4 ");Serial.println(TimsWorker);*/} // если было удержание + поворот
if (enc1.isLeftH()) {TimsWorker-=785ul;/*Serial.print("menu4 ");Serial.println(TimsWorker);*/} // если было удержание + поворот
break;
case 5:
if(enc1.isRightH()){c++; TimeWait = millis();if(c>3)c=3;/*Serial.print("menu5 ");Serial.println(c)*/; }
if(enc1.isLeftH()){c--; TimeWait = millis();if(c<1)c=1;/*Serial.print("menu5 ");Serial.println(c); */ }
if(enc1.isClick()){servoOpen(); TimeWork = millis();W=false;}
break; }}
Воооот...
вопрос с экраном. при переключении в первое меню - все выводится как нужно... там только текст.
но при переключении во второе меню, из-за того , что требуется вывести userTemp в нулевой строчке и userHum в первой,
обе строчки экрана покрываются нулями с ног до головы(все 16 столбцов). если кто нибудь сможет намекнуть из за чего - буду очень благодарен.
P.S. там еще отдельные проблемы с пятым меню, но я сам...
подскажите пожалуйста - как узнать какой тип данных возвращает метод "Tims." в библиотеке "iarduino_RTC.h"? или вообще как находить подобную информацию.
подскажите пожалуйста - как узнать какой тип данных возвращает метод "Tims." в библиотеке "iarduino_RTC.h"? или вообще как находить подобную информацию.
Обычно, проще всего посмотреть в библиотеке. Там перед именем метода палюбас что-то написано (если это не конструктор). Оно и есть
нет. если бы. с тем как библиотечный фаил открыть я разобрался - тему на форуме нашел, просто перенести в arduino IDE можно . правда там тоже не все понятно.
но вот что такое "корень"? я догадываюсь что это главный фаил библиотеки. А как его распознать?
добрый день .
Машина опять меня победила...
вот кусок кода:
не могу понять - почему оператор if из 36й строки срабатывает в каждом цикле... подскажите пожалуйста
Из за 38 строчки, видимо.
Из за 38 строчки, видимо.
не, там же наоборот переменной присваивается значение нуля после чего оно меняется только в 32й строчке в новом цикле и то только если условие оператора из 29ой позволит да и тот выполняется только после нажатия кнопки...а когда newCycle меньше 1000 оператор из 36й не должен же выполнять тело...
Из за 38 строчки, видимо.
не, там же наоборот переменной присваивается значение нуля после чего оно меняется только в 32й строчке в новом цикле и то только если условие оператора из 29ой позволит да и тот выполняется только после нажатия кнопки...а когда newCycle меньше 1000 оператор из 36й не должен же выполнять тело...
Кто то просто настолько далёк от программирования, что за полгода так и не разобрался с millis()
У тебя там должно быть:
NewCycle=millis();
А не
NewCycle=0;
Когда Вы научитесь Serial для дебага использовать?
millis = 500, newCycle = 0, millis - newCycle = ?
millis = 1000, newCycle = 0, millis - newCycle = ?
millis = 1001, newCycle = 0, millis - newCycle = ?
millis = 1002, newCycle = 0, millis - newCycle = ?
...
millis = 9000, newCycle = 0, millis - newCycle = ?
Из за 38 строчки, видимо.
не, там же наоборот переменной присваивается значение нуля после чего оно меняется только в 32й строчке в новом цикле и то только если условие оператора из 29ой позволит да и тот выполняется только после нажатия кнопки...а когда newCycle меньше 1000 оператор из 36й не должен же выполнять тело...
не согласен. если я в 38й строчке напишу"NewCycle=millis();" , то оператор из 36 будет срабатывать каждую секунду, а он должен выполнять тело цикла через секунду после выполнения строки 32.
вот об этом я не подумал... выходит косяк в 21й строчке)) мерси
вот, дошло...
Давай зачётку...
Машина опять меня победила...
И почему никто не удивляется? :-)
Машина опять меня победила...
И почему никто не удивляется? :-)
А чему удивляться? Терпению в познании? Так Садман уже отметил, грит давай зачётку )))
нет, вот вы молодцы конечно... "прочитай хоть одну книгу по программированию" , "тебе не надоело идиотом себя выставлять" , "изучи хотя бы азы"...
пол года изучал, смотрел, читал, вникал... ну сделал я эту кормушку,и кнопки управления сделал, и экран на неё повесил... а куда теперь все эти знания девать? похоронить пол года стараний что ли?!
Зачем хоронить? Теперь сам другим пиши: "прочитай хоть одну книгу по программированию" , "тебе не надоело идиотом себя выставлять" , "изучи хотя бы азы".
а куда теперь все эти знания девать? похоронить пол года стараний что ли?!
на самом деле - это и правдв проблема. Я вот часто что-то изучу - а применять негде. Ну вот совсем...
Зато как увлекателен процесс :)))
а куда теперь все эти знания девать? похоронить пол года стараний что ли?!
на самом деле - это и правдв проблема. Я вот часто что-то изучу - а применять негде. Ну вот совсем...
Зато как увлекателен процесс :)))
это да))
Зачем хоронить? Теперь сам другим пиши: "прочитай хоть одну книгу по программированию" , "тебе не надоело идиотом себя выставлять" , "изучи хотя бы азы".
Ну почему же! Может чел-у нравится дурачком себя выставлять. Есть ведь что то такое по Фрейду.)
Это просто жесть как все забывается менее чем за год... сижу смотрю на #define ... полез в интернет смотреть что это значит XD.
Всем СдрасЬти)))
Это просто жесть как все забывается менее чем за год... сижу смотрю на #define ... полез в интернет смотреть что это значит XD.
Всем СдрасЬти)))
раза четыре выучите с нуля - запомните
раза четыре выучите с нуля - запомните
Осталось 2 раза выходит))
раза четыре выучите с нуля - запомните
Осталось 2 раза выходит))
4-0=4
Так что никаких не два
Здравствуйте товарищи!я как всегда с уникальным вопросом -
в строках 23,30,37,44. если убрать вторую часть условия, например "&&ventilation == LOW", то все прекрасно работает. а в оригинальном виде, оператор "if" считает условие ложным. не могу понять - почему?
Ты знаешь что значит int
int
humidity,temperature;
и что значит 60.00?
if
(humidity>=60.00&&ventilation == LOW)
Ты знаешь что значит int
int
humidity,temperature;
и что значит 60.00?
if
(humidity>=60.00&&ventilation == LOW)
я понял тебя) но как ни странно на эту часть условия нареканий пока не было
Ты знаешь что значит int
исправил этот косяк
вопрос актуален
и что значит 60.00?
это значение в том виде, в котором приходят показания с датчика влажности воздуха.
Ну, а каким ему его считать, если ventilation является константой, равной 9 (см. строку 2)?
Т.е. условие
ventilation == LOW
эквивалентно условию
9 == 0
Вас удивляет, что оно всегда ложно? Во "не можете понять почему"?
Вас удивляет, что оно всегда ложно? Во "не можете понять почему"?
меня удивляет что я за столько времени не научился искать ошибки во всем коде)
СПАСИБО!
Ты знаешь что значит int
исправил этот косяк
лучше было исправить "в другую сторону", int сохранить, а вместо этого в условиях везде заменить 60.00, 40.00... на целые
лучше было исправить "в другую сторону", int сохранить, а вместо этого в условиях везде заменить 60.00, 40.00... на целые
а как быть со сравнением? с датчика то показания приходят с точкой
а как быть со сравнением? с датчика то показания приходят с точкой
когда вы их присваиваете своим переменным типа int. никакой точки там уже нет.
Вот вы чуть выше восклицаете - "Когда же я научусь искать ошибки в своих скетчах?" . А причина-то вовсе не в невнимательности - причина что вы не знаете основ языка, на котором пишете. При таком раскладе искать ошибки вы не научитесь никогда. так и будете годами задавать детские вопросы об одном и том же.
монитор порта:
при этом оба светодиода(те что вместо нагрузки на 8 и 9 пинах) работают постоянно в не зависимости от показаний датчика(что и видно по показаниям в мониторе).
и к чему вы это написали? :) Чтобы еще раз подтвердить, что я прав относительно вашего незнания языка? :)
вам Евгений уже написал выше, почему так происходит. У вас ventillation =9 и, сл-но, ventillation == LOW никогда не станет истинно
Долго, за то доходит)) (18-19)
пойду массивы мучать... благодарю, что все еще отвечаете мне))))
Здравствуйте, о великие гуру программирования и безвозмездной помощи, отрокам еще не знающим и не умеющим)))
Поменяли мне операционку с 7ки на 10ку. поставил я на нее версию arduino IDE для семерки (что бы библиотеками ее пополнять без проблем) и теперь сама программа, "arduino IDE", не видит подключаемые к компу платы ардуино. При чем винда видит подключенное устройство и определяет его ком порт.
Наверняка есть какой то нюанс на этот случай. Подскажите куда идти XD
P.S. на каком то форуме говорили про драйвера, которые нужно скачать с сайта ардуино, и даже ссылку оставляли, но как я там не пытался найти хоть что то связанное с драйверами - не получилось...
не видит подключаемые к компу платы ардуино
при выборе COM порта показывает только первый, а плата тем временем весит на 3м или 5ом
в очередной раз, стоило вам написать, как не прошло и двух часов, и решение найдено, хотя до этого неделю мучался...
для тех у кого та же проблема - https://alexgyver.ru/lessons/first-flash/ тут описано максимальное количество подобных проблем и пути их решения.
для тех у кого та же проблема - https://alexgyver.ru/lessons/first-flash/ тут описано максимальное количество подобных проблем и пути их решения.
Спасибо!
Ну вот как бы мы жили без ЧЮ!)
Воооот...
вопрос с экраном. при переключении в первое меню - все выводится как нужно... там только текст.
но при переключении во второе меню, из-за того , что требуется вывести userTemp в нулевой строчке и userHum в первой,
обе строчки экрана покрываются нулями с ног до головы(все 16 столбцов). если кто нибудь сможет намекнуть из за чего - буду очень благодарен.
P.S. там еще отдельные проблемы с пятым меню, но я сам...
P.P.S. Здравствуйте!
не, я конечно догадываюсь что связано это как то с типом переменной, но в порт выводилось отлично, а на дисплей - нет..
Все, спасибо) поменял тип переменной на unsigned long и все заработало.
P.S. вот так-"
lcd.print(userHum,
"%"
);" это не работает нужно -"lcd.print(userHum);lcd.print("%");"
Уважаемые форумчане, доброго вечера.
подскажите пожалуйста - как узнать какой тип данных возвращает метод "Tims." в библиотеке "iarduino_RTC.h"? или вообще как находить подобную информацию.
Уважаемые форумчане, доброго вечера.
подскажите пожалуйста - как узнать какой тип данных возвращает метод "Tims." в библиотеке "iarduino_RTC.h"? или вообще как находить подобную информацию.
Обычно, проще всего посмотреть в библиотеке. Там перед именем метода палюбас что-то написано (если это не конструктор). Оно и есть
проще всего посмотреть в библиотеке.
вот с этим у меня и проблема. какой программой и какой фаил в библиотеке смортеть? я вордом открываю - там крокозябры одни
Скайпом надо открывать. Заголовочный файл .h Хотя, можно и .cpp. Только там букоф больше и надо уже экселем открывать, скайп не потянет
Искомые файлы обычно лежат в подпапке src или в корне
или в корне
что имеется ввиду?
ЕвгенийП
что имеется ввиду?
Похоже. И жирный
Троллинг?
нет. если бы. с тем как библиотечный фаил открыть я разобрался - тему на форуме нашел, просто перенести в arduino IDE можно . правда там тоже не все понятно.
но вот что такое "корень"? я догадываюсь что это главный фаил библиотеки. А как его распознать?