Упровление вытяжкой
- Войдите на сайт для отправки комментариев
Вс, 26/08/2018 - 11:06
Привет форумчанам.
Я навичек в этом деле --- могли-бы Вы подсказать правелен ли код
Есть вентилятор и две кнопки управлением скоростью вращения --- код который внизу глючит
обороты то сами увеличятся то не реагирует на нажатие кнопки -- либо нажимаешь уменьшение а он прибовляет обороты
int switchPin1 = 8;
int switchPin2 = 7;
int PWMpin = 9;
boolean lastButton = LOW;
boolean currentButton = LOW;
boolean lastButton1 = LOW;
boolean currentButton1 = LOW;
int PWMlevel = 165;
void setup()
{
pinMode(switchPin1, INPUT);
pinMode(switchPin2, INPUT);
pinMode(PWMpin, OUTPUT);
Serial.begin(9600);
// ШИМ 8 разрядов, 62,5 кГц
TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09;
analogWrite(9, 25); // на выводе 9 ШИМ=10%
}
boolean debounce(boolean last)
{
boolean current = digitalRead(switchPin1);
if (last != current)
{
delay(5);
current = digitalRead(switchPin1);
}
return current;
}
boolean debounce1(boolean last1)
{
boolean current1 = digitalRead(switchPin2);
if (last1 != current1)
{
delay(5);
current1 = digitalRead(switchPin2);
}
return current1;
}
void loop()
{
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH)
{
PWMlevel = PWMlevel + 15;
}
lastButton = currentButton;
if (PWMlevel > 255) PWMlevel = 255;
analogWrite(PWMpin, PWMlevel);
currentButton1 = debounce1(lastButton1);
if (lastButton1 == LOW && currentButton1 == HIGH)
{
PWMlevel = PWMlevel - 15;
}
lastButton1 = currentButton1;
if (PWMlevel < 75) PWMlevel = 75;
analogWrite(PWMpin, PWMlevel);
Serial.print("POWER - ");Serial.println(PWMlevel);
}
Так дебажте! Натыкайте
Serial.printв ключевых местах и смотрите где и что пошло не так.Про вытяжку. Знакомый делал, начал с датчика качества воздуха. Работает, но есть недостаток - внезапно включается и шумит мешая людям разговаривать. Добавил микрофон, чтоб не включалась во время разговоров на полную. Стала не включатся при работающем телевизоре. Последнее, знаю, дорабатывал привязку к включенности телика. Таков путь домашнего автоматизатора )))
а каким образом отследить что не так и куда натыкать сериал
а каким образом отследить что не так и куда натыкать сериал
Через строчку тычьте и печатайте все переменные, а потом внимательно разбирайтесь. Со временем научитесь тыкать что надо и куда надо.
Ну такой скетч вам точно не пойдет. Не проверял в работе
/**/ unsigned long mill; // переменная под millis() //------Cl_Btn---------------------- class Cl_Btn { public: enum event_t {onNONE = 0, onClick}; /*события не изменилось/клик*/ protected: const byte pin; event_t event; bool bounce = 0; bool btn = 1, oldBtn; unsigned long past; public: Cl_Btn(byte p): pin(p) {} /*инициализация-вставить в setup()*/ void init() { pinMode(pin, INPUT_PULLUP); } /*работа-вставить в loop()*/ void run() { event = onNONE; bool newBtn = digitalRead(pin); if (!bounce && newBtn != btn) { bounce = 1; past = mill; } if (bounce && mill - past >= 10) { bounce = 0 ; oldBtn = btn; btn = newBtn; if (!btn && oldBtn) event = onClick; } } byte is(event_t e) { return e == event; } }; //-------------------------------- class Cl_Fan { protected: byte pin; byte val; const byte step = 10; const byte maxVal = 255; const byte minVal = 0; void write(byte v) { if (v > maxVal) v = maxVal; if (v < minVal) v = minVal; val = v; analogWrite(pin, val); } public: Cl_Fan(byte p): pin(p) {} void init() { write(0); } void up() { write(val + step); } void down() { write(val - step); } }; //---Компоновка----------------------------- Cl_Fan Fan(/*пин*/9); Cl_Btn Btn1(/*пин*/8); Cl_Btn Btn2(/*пин*/7); //-------------------------------- void setup() { Btn1.init(); Btn2.init(); Fan.init(); } void loop() { mill = millis(); Btn1.run(); Btn2.run(); if (Btn1.is(Cl_Btn::onClick))Fan.up(); if (Btn2.is(Cl_Btn::onClick))Fan.down(); } /**/Со временем научитесь тыкать что надо и куда надо.
А со временем вообще перестанете тыкать лишний раз.Опыт приходит с годами.
А со временем вообще перестанете тыкать лишний раз.Опыт приходит с годами.
Не перестанет. У меня вон уж сколько опыта и лет, а надысь затрахался искать почему сотировка не работает. Истыкался всего пока не стал уже через строчку тыкать и таки дошло, вместо n+i написано n+1, а в шфрите того редактора мне это было не по глазам. Исправил и сменил шрифт, кто что может гарантировтать?
Блин я не могу понять что куда вставлять :)
я совсем профан в этом деле --- но завтра обязательно попробую с вашим кодом
после отпишусь
А в каком порядке его вставлять --- можно его упорядочить?
А в каком порядке его вставлять --- можно его упорядочить?
ссылка не работает
http://arduino.ru/forum/programmirovanie/tsifrovye-avtomaty-v-klassakh-p...
http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-ch...
Да это для меня тёмный лес
Подскажите как поправить мой код для коректной работы
Или может он вообще корявый
Подскажите как поправить мой код для коректной работы
Или может он вообще корявый
Для начала поймите, а о чем Ваша программа. Для этого вставьте комментарии хоть в каждую строку типа
;// Здесь я уменьшаю обороты с помощью переменной "Ы"
;// Здесь я уменьшаю обороты с помощью переменной "Ы"
А "Ы" - чтобы никто не догадался ( https://www.youtube.com/watch?v=N8TYZabKUNA )
вот поэтому ничего и не расписано --- что бы никто не догадался :)))