Ребята подскажите новичку
- Войдите на сайт для отправки комментариев
Добрый день всем гуру программирования! Я совсем новичек в Ардуино, и программировании, прошу сильно не пинать, мне для авто нужд необходимо сделать устройство которое управляется одним проводом, например 0 на все время работы устройства, 0 сменился на еденицу и цикл завершился и устройство в режиме ожидания. так вот при наличии 0 на упр пине, необходимо получить с устройства 4 импульса в разной последовательности, и при пропадании 0 на упр пине еще нужно пару импульсов на нескольких выходных пинах из этих четырех.
Вот что удалось накидать, один выход работает при подаче 0 на управляющий, добавил в код второй пин, он через раз отрабатывает, что то я делаю не так, нет опыта у меня еще.... подскажите пожалуйста
unsigned long time;
int IMMOpin = 5; // IMMO пин на выходе 5 включает обход иммо
int KEYpin = 7; // KEY пин на выходе 6 включает датчик наличия ключа
int switchPin = 13; // выключатель на порту 13, замыкает на землю
void setup()
{
pinMode(IMMOpin, OUTPUT);
pinMode(KEYpin, OUTPUT);
pinMode(switchPin, INPUT);
digitalWrite(switchPin, HIGH); // включаем подтягивающий резистор
}
void loop()
{
static unsigned long IMMOpin_time = 0;
static unsigned long KEYpin_time = 0;
time = millis();
if (digitalRead(switchPin) == LOW)
{ delay(200); // время перед задержкой включением IMMOpin
digitalWrite(IMMOpin, HIGH); // включаем канал IMMOpin
IMMOpin_time = time + 500; // счетчик до момента выкл канала после статуса LOW на 13 пине
}else
if( IMMOpin_time && (IMMOpin_time <= time) ) //опрос времени IMMOpin
{ digitalWrite(IMMOpin, LOW); // выключение канала IMMOpin
time = millis();
if (digitalRead(switchPin) == LOW)
{
digitalWrite(KEYpin, HIGH); // включаем канал IMMOpin
KEYpin_time = time + 1000; // счетчик до момента выкл канала после статуса LOW на 13 пине
}else
if( KEYpin_time && (KEYpin_time <= time) )
{digitalWrite(KEYpin, LOW);
}
}
}
Уберите перезапись time из голого цикла, это должно быть исключительно внутри условия. Условие выглядит
if(millis()-time>=IMMOpin_time){ // .... time = millis(); }Не поможите и мне ? только-только начал осваивать ,поэтому много непонятного ((
допустим у нас есть 2 светодиода. как сделать так,чтобы 1 светодиод мигал 2 раза,затем мигал 2 светодиод 3 раза,затем 1 светодиод начинал моргать без перерыва ?
если покажете на простом примере - буду примного Благодарен .
Не поможите и мне ? только-только начал осваивать ,поэтому много непонятного ((
допустим у нас есть 2 светодиода. как сделать так,чтобы 1 светодиод мигал 2 раза,затем мигал 2 светодиод 3 раза,затем 1 светодиод начинал моргать без перерыва ?
в Сетапе 2 раза мигаем первым светиком и три раза - вторым. Потом переходим в ЛУП и мигаем первым. Луп исполняется бесконечно....
Большое Спасибо !!
Приветствую.
Встретил тут в книжке что-то типа такого
Вопрос в чём, в указанной функции же не всегда выполняется return. Оно по идее даже компилиться не должно. Если функция не встретила return, она что возвращает?
boolean debounce (boolean last) { boolean current = digitalRead (BUTTON); if (last != current) { delay (5); current = digitalRead (BUTTON); return current; } }Компилироваться такое будет, просто будет warning. Насчёт того, что возвращает, когда не втретила return - емнип, будет неопределённое значение.
Ну так там дальше currentButton = debounce(lastButton); if (lastButton == LOW && currentButton == HIGH)И всё работает. Если currentButton void, то как оно его сравнивает?
Ну так там дальше currentButton = debounce(lastButton); if (lastButton == LOW && currentButton == HIGH)И всё работает. Если currentButton void, то как оно его сравнивает?
currentButton не void - а имеет неопределённое значение. И компилятор скастит его к bool, каким будет значение currentButton, если из функции не вернулось значение - зависит от компилятора, но по стандарту - там неопределённое значение.
Смотрите, на абстрактном примере: перед вызовом функции, которая возвращает 1 байт (bool) указатель вершины стека увеличивается на 1 (чтобы после выхода из функции было место, куда записать возвращаемое значение). Байт с каким значением лежал на стеке до инкрементирования указателя - неизвестно, поэтому и говорят про неопределённое значение. В случае с bool любое такое значение можно привести к типу bool, ибо всё, что не 0 - true, остальное - false.