Помогите со скетчем

svitr
Offline
Зарегистрирован: 16.04.2017
int timer = 100;
int button = 0;
int buttonState = 0;
void setup() {
  Serial.begin (9600);
  for (int thisPin = 2; thisPin < 8; thisPin++) {
    pinMode(thisPin, OUTPUT);
  }
}
 
void loop() {
  buttonState = digitalRead(button);
  if(buttonState == HIGH) {
  
  for (int thisPin = 2; thisPin < 8; thisPin++) {
    
    digitalWrite(thisPin, HIGH);
    delay(timer);
    
    digitalWrite(thisPin, LOW);
    
  }
 
 
  for (int thisPin = 7; thisPin >= 2; thisPin--) {
   
    digitalWrite(thisPin, HIGH);
    delay(timer);
   
    digitalWrite(thisPin, LOW);
    else { break {
  }
}}

Спасибо что зашли в тему ! Как заставить цикл for работать при нажатой кнопке (пока кнопка выдает HIGH цикл будет работать, то есть кнопку нужно держать) ? Куда else вообще ставить ? 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Строго говоря, вопрос некорректен.

1. В программировании используются различные типы циклов, в частности:

- когда нужно обеспечить фиксированное количество повторений цикла - for,

- когда требуется выход из цикла по условию - while.

Так что правильное решение заменить цикл for на цикл while.

2. Цикл for не предполагает никакого else.

3. Ввиду того, что Вы не сумели сформулировать, чего именно Вы хотите добиться от программы, дать определенный совет невозможно, но не исключено, что может оказаться полезным оператор if.

sadman41
Offline
Зарегистрирован: 19.10.2016

А он не работает?

svitr
Offline
Зарегистрирован: 16.04.2017

Ответ очень хороший. Нигде в интернете не увидел такого развернутого объяснения использований различных циклов. (не ирония :D)
По программе, получается бегущий огонек, который должен управляться кнопкой.

nik182
Offline
Зарегистрирован: 04.05.2015

Как управлять? Мы тут не можем знать,  что подразумевается под этими словами. Нужно точное описание. Например. Если нажать кнопку огонёк должен бежать с начала (с первого диода)  или с места предыдущей остановки? Если отпустить кнопку то огонёк погаснет или только остановится? Если должен гореть, но кнопку отпустили в момент когда один погас, а следующий не загорелся - что делать? Вопросов ещё много. Без точного описания невозможно создать программу.  

svitr
Offline
Зарегистрирован: 16.04.2017

В начале темы указано, цикл for запустится только тогда, когда кнопка выдаст HIGH. То есть, для того чтоб огонек бегал, надо держать кнопку.

svitr
Offline
Зарегистрирован: 16.04.2017
int timer = 100;
int button = 0;
int buttonState = 0;
void setup() {
  Serial.begin (9600);
  for (int thisPin = 2; thisPin < 8; thisPin++) {
    pinMode(thisPin, OUTPUT);
  }
}

void loop() {
 buttonState = digitalRead(button);
  while (buttonState == HIGH) {
  
  for (int thisPin = 2; thisPin < 8; thisPin++) {
    
    digitalWrite(thisPin, HIGH);
    delay(timer);
   
    digitalWrite(thisPin, LOW);
 
  }

 
  for (int thisPin = 7; thisPin >= 2; thisPin--) {
   
    digitalWrite(thisPin, HIGH);
    delay(timer);
   
    digitalWrite(thisPin, LOW);
    
  }
}}
 

Переделал под while, но теперь он после загрузки скетча начинает сразу работать игнорируя состояние кнопки.
xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ну пральна, один раз зашли в while и выйти от туда не получится.

ведь buttonState больше никогда не обновится.

svitr
Offline
Зарегистрирован: 16.04.2017

он вообще не должен идти дальше while если условие в скобках не выполнено

sadman41
Offline
Зарегистрирован: 19.10.2016

А кнопка с резистором?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вы так и не удосужились написать точно, чего Вы хотите.

Попытайтесь заменить в последнем коде while на if. Возможно, получится именно то, что Вы хотели (если Вы хотели, чтобы огонек совершал всегда целое число полных обходов).

svitr
Offline
Зарегистрирован: 16.04.2017

Не помогло. Программа обходит состояние кнопки и сразу включает цикл.
Выше несколько раз описал задачу.
Цикл for (гонять огонек от 2 пина до 4 и обратно) начнет свою работу только если кнопка выдает HIGH 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

svitr пишет:

Не помогло. Программа обходит состояние кнопки и сразу включает цикл.

началось...

я второй кто спрашивает - как подключена кнопка?

svitr
Offline
Зарегистрирован: 16.04.2017

Правильно подключена. С резистором на 5кОм к минусу.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

svitr пишет:

Правильно подключена. С резистором на 5кОм к минусу.

аааа..., ну тогда все должно работать, успехов.

svitr
Offline
Зарегистрирован: 16.04.2017

Мне интересно, а какой ответ вы ожидали ? 
Подключена стандартно для ардуино,  на одном конце питание с подтягивающим рез-ом, и второй конец (N.O) в контроллер. Есть еще какие-то способы ? 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

svitr пишет:

Мне интересно, а какой ответ вы ожидали ? 
Подключена стандартно для ардуино,  на одном конце питание с подтягивающим рез-ом, и второй конец (N.O) в контроллер. Есть еще какие-то способы

есть, и не один.

пока вы схему подключения, свою (стандартную), не нарисуете, дальше понять вашу ошибку не представляется возможным.

sadman41
Offline
Зарегистрирован: 19.10.2016

Подтягивающий (pullup) резистор к минусу?

svitr
Offline
Зарегистрирован: 16.04.2017

В данном случаи - способ подключения один.

svitr
Offline
Зарегистрирован: 16.04.2017

Ну не к плюсу же..

svitr
Offline
Зарегистрирован: 16.04.2017

sadman41 пишет:
Подтягивающий (pullup) резистор к минусу?

ну не к плюсу же..

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вообще-то pullup - это именно к плюсу.

svitr, и еше раз: изложите, пожалуйста, подробно, что именно Вы хотите от скетча. Пара общих фраз на подробное изложение совершенно не тянут.

 

Собственно, для конструктивного обсуждения необходимо следующее:

1. Полный скетч.

2. Полная схема.

3. Описание того, что хочется.

4. Описание того, как это сейчас работает.

5. Подробное описание, чем 4 отличается от 3.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

а тогда это что такое

int button = 0;

так куда кнопка то подключена?

svitr
Offline
Зарегистрирован: 16.04.2017

andriano пишет:

Вообще-то pullup - это именно к плюсу.

svitr, и еше раз: изложите, пожалуйста, подробно, что именно Вы хотите от скетча. Пара общих фраз на подробное изложение совершенно не тянут.


В данном случаи я так понимаю нам надо обеспечить на кнопке минус, во избежании всяких наводок и пр., поэтому подтянул кнопку к минусу.

Поскольку алгоритм очень простой он поместился в пару фраз. А что еще туда добавить ? Загружаешь скетч, ничего не должно происходить. Никаких миганий, ни одна лампа не должна гореть. Нажал на кнопку, и пока держишь эту кнопку нажатой, должен выполнятся цикл. Отпустил - цикл прервался.

svitr
Offline
Зарегистрирован: 16.04.2017

xDriver пишет:

а тогда это что такое

int button = 0;

так куда кнопка то подключена?

На нулевой пин, который далее задекларирован как вход.

svitr
Offline
Зарегистрирован: 16.04.2017

andriano пишет:

Вообще-то pullup - это именно к плюсу.

svitr, и еше раз: изложите, пожалуйста, подробно, что именно Вы хотите от скетча. Пара общих фраз на подробное изложение совершенно не тянут.

 

Собственно, для конструктивного обсуждения необходимо следующее:

1. Полный скетч.

2. Полная схема.

3. Описание того, что хочется.

4. Описание того, как это сейчас работает.

5. Подробное описание, чем 4 отличается от 3.


Все описал же уже. Скетч выше, схему с кнопкной выше. Схему со светодиодами кидать не буду, сам алгоритм работает, огонек бегает с одной стороны в другую, вопрос в том что состояние кнопки не читается. Грузишь прогу в ардуино и огонек сразу начинает бегать. 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

svitr пишет:

xDriver пишет:

а тогда это что такое

int button = 0;

так куда кнопка то подключена?

На нулевой пин, который далее задекларирован как вход.

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

или я ослеп сегодня?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

svitr пишет:

Правильно подключена. С резистором на 5кОм к минусу.

В электронике "стандартных" подключений конечно нет, но есть типовые.

Типовым включением кнопки является полностью обратное: подтягивающий резистор к Vcc, нормально кнопка выдает HIGH,  нажатие замыкает на GND. Активный LOW используется повсеместно по многим причинам. Две основные - "подвешенный" конец дает HIGH и независимость от уровня 5 или 3.3.

 

Описанный тобой способ не ошибка, но  чаще всего используется в учебных целях.

svitr
Offline
Зарегистрирован: 16.04.2017

xDriver пишет:

svitr пишет:

xDriver пишет:

а тогда это что такое

int button = 0;

так куда кнопка то подключена?

На нулевой пин, который далее задекларирован как вход.

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

или я ослеп сегодня?


О Боже, вы попросили ОБЩУЮ схему подключения кнопки - я вам ее дал. Это рисунок из интернета, который просто изображает каким образом выполнено подключение. У меня на нулевом стоит. Светодиоды от 2 до 4. Итого 3 лампы (2,3,4 пины).
Хватит глупых вопросов, и хождений по кругу, аппаратно все верно, мой опыт автоматика-электрика позволяет мне выполнить такие элементарные соединения без ошибок , здесь программный косяк поэтому я обратился сюда.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

svitr пишет:

xDriver пишет:

svitr пишет:

xDriver пишет:

а тогда это что такое

int button = 0;

так куда кнопка то подключена?

На нулевой пин, который далее задекларирован как вход.

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

или я ослеп сегодня?


О Боже, вы попросили ОБЩУЮ схему подключения кнопки - я вам ее дал. Это рисунок из интернета, который просто изображает каким образом выполнено подключение. У меня на нулевом стоит. Светодиоды от 2 до 4. Итого 3 лампы (2,3,4 пины).
Хватит глупых вопросов, и хождений по кругу, аппаратно все верно, мой опыт автоматика-электрика позволяет мне выполнить такие элементарные соединения без ошибок , здесь программный косяк поэтому я обратился сюда.

О боже, от умения правильно подавать материал зависит 90% успеха.

Вы, мля, умник я смотрю, на 0 и 1 пины повесить просто так нельзя!

почему, да вам это и не надо знать, с опытом автоматика-электрика.

svitr
Offline
Зарегистрирован: 16.04.2017

xDriver пишет:

svitr пишет:

xDriver пишет:

svitr пишет:

xDriver пишет:

а тогда это что такое

int button = 0;

так куда кнопка то подключена?

На нулевой пин, который далее задекларирован как вход.

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

или я ослеп сегодня?


О Боже, вы попросили ОБЩУЮ схему подключения кнопки - я вам ее дал. Это рисунок из интернета, который просто изображает каким образом выполнено подключение. У меня на нулевом стоит. Светодиоды от 2 до 4. Итого 3 лампы (2,3,4 пины).
Хватит глупых вопросов, и хождений по кругу, аппаратно все верно, мой опыт автоматика-электрика позволяет мне выполнить такие элементарные соединения без ошибок , здесь программный косяк поэтому я обратился сюда.

О боже, от умения правильно подавать материал зависит 90% успеха.

Вы, мля, умник я смотрю, на 0 и 1 пины повесить просто так нельзя!

почему, да вам это и не надо знать, с опытом автоматика-электрика.

Вы можете покинуть тему. Завтра на работу, вагоны сами не разгрузяться.
 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Вот тебе твой рабочий код, исправленный и проверенный.

На пин 0 НИЧЕГО нельзя подключать. Кнопка на 2, диоды - с 3 по 8.

const int timer = 100;  // константы должны быть константами
const byte button = 2; //0 и 1 это контакты того сериал, что строкой выше, их нельзя использовать совместно

const byte ledFirst = 3;
const byte ledLast = 8;

int buttonState = 0;


void setup() {

  Serial.begin (115200);    //с х..ров ли было 9600? ты через аналоговый модем на камчатке подключен?
// и если ты сериалом не пользуешься, зачем включаешь??????

  for (byte i = ledFirst; i <= ledLast; pinMode(i++, OUTPUT));

}

//loop()  это уже цикл, нах..р там еще один внутри???
void loop() {
  uint32_t newMillis = millis();
  static uint32_t oldMillis = millis();

  buttonState = digitalRead(button);

  if (newMillis - oldMillis > timer) {
    oldMillis = newMillis;
    if (buttonState) {
      for (byte i = ledFirst; i <= ledLast; i++)
        digitalWrite(i, !digitalRead(i));
    }
  }

}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

svitr пишет:

andriano пишет:

Вообще-то pullup - это именно к плюсу.

svitr, и еше раз: изложите, пожалуйста, подробно, что именно Вы хотите от скетча. Пара общих фраз на подробное изложение совершенно не тянут.


В данном случаи я так понимаю нам надо обеспечить на кнопке минус, во избежании всяких наводок и пр., поэтому подтянул кнопку к минусу.

Вам про Фому, а Вы опять про Ерему.

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

Цитата:

Поскольку алгоритм очень простой он поместился в пару фраз.

Отнюдь.

Перечитайте еще раз вопросы из сообщения №4. Можно ли однозначно ответить на них (хотя бы только на них), пользуясь лишь Вашим описанием?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Граф, это че?

сегодня же 8 марта)

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

xDriver пишет:

Граф, это че?

сегодня же 8 марта)

так пусть svitr почувствует себя девушкой ... блондинкой.

b707
Offline
Зарегистрирован: 26.05.2017

Svitr, вы бы повежливее. Если не в состоянии четко сформулировать задачу - значит нечего и спрашивать.
Ваш гонор совершенно неуместен, если бы вы могли правильно подключить кнопку - вопроса бы не было. Скетч, заданный в первом сообщении - не будет работать сам, если все собрано верно. Если у вас не так - значит подключить кнопку вы не смогли. Так соберитесь с мыслями и нарисуйте не "типовую", а конкретно свою схему. Или покиньте тему и решайте проблему сами

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

xDriver пишет:

Граф, это че?

сегодня же 8 марта)


Да! А что не так? ;))))))
К тому же завтра Пурим начинается. ;))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

svitr пишет:

О Боже, вы попросили ОБЩУЮ схему подключения кнопки - я вам ее дал. Это рисунок из интернета, который просто изображает каким образом выполнено подключение. У меня на нулевом стоит. Светодиоды от 2 до 4. Итого 3 лампы (2,3,4 пины).

Объясняю специально для непонятливых: на этом форуме никогда не просят общую (типовую и пр.) схему или типовой скетч, а просят исключительно ту самую схему или скетч, что реализованы лично у Вас. Кроме схемы могут еще попросить фото Вашей схемы, по которому можно было бы убедиться, что Вы не сделали ошибок при коммутации. 

Цитата:

Хватит глупых вопросов...

А мне кажется, хватит глупых имитаций ответов. 

Вы не только не смогли внятно описать задачу, не ответили ни на один заданный вопрос, но еще и умудряетесь создавать искусственные препятствия тем, кто пытается Вам помочь.

Рекомендую Вам: перестать троллить пользователей форума, тщательно перечитать всю тему с начала, ответить на все заданные в ней вопросы, после чего создать новую тему с исправлением всех тех ошибок, которые Вы уже успели сделать в этой.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Блин! Пока тестировал говнокод ткнул +5 на GND в Нанке. Жена одетая стоит, ругается, что нужно хоть цветиков матери купить...

Это было самое скоростное перепаивание защитного диода. Найти его на старой материнской плате и перепаять на Нанке - меньше 3-х минут в сумме. Всё, бегу, убьет жена!!! Особенно потому, что я ей вчера на 8 марта лодочный мотор подарил... ;))))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:
А он не работает?
Как ему, бедному, работать с 31-ой то строкой?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

xDriver пишет:

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

Оно и есть. Утиная типизация в действии.

svitr пишет:

На нулевой пин, который далее задекларирован как вход.

Нельзя подключать ничего на нулевой пин. По крайней мере людям "с опытом автоматика-электрика" нельзя. Забудьте о его существовании. Тоже самое и про первый пин.

svitr пишет:

О Боже, вы попросили ОБЩУЮ схему подключения кнопки

Вы сюда пришли, чтобы решить Вашу конкретную проблему или "общую"? Так кому тут нахрен нужна "общая" схема?

svitr пишет:

Поскольку алгоритм очень простой 

Если бы он был простой, Вы бы всё сделали и не пришли бы сюда. А если пришли, значит не такой уж и простой.

wdrakula пишет:

Вот тебе твой рабочий код

Граф, такой заход с утра восьмого марта - это намёк на твоё предположение об ориентации ТС?

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

sadman41 пишет:
А он не работает?
Как ему, бедному, работать с 31-ой то строкой?


Как я понял, во всей этой истории проблема только с кнопкой, а не с компиляцией странных скетчей. Поэтому, пользуясь методом поиска льва в саванне, я решил уточнить - работает ли скетч в принципе. А то, мож, канпилятор новый выпустили, пока я спал.

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

xDriver пишет:

Граф, это че?

сегодня же 8 марта)

Он сегодня, всех, у кого блондинистость мозга подозревает, проздравляет и скетчи раздает. Жентельмен.))))

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

wdrakula пишет:

Всё, бегу, убьет жена!!! Особенно потому, что я ей вчера на 8 марта лодочный мотор подарил... ;))))

Т.е. Карлсона, из тебя, завтра делать будут. Сегодня, ради праздника, отсрочили?))))

svitr
Offline
Зарегистрирован: 16.04.2017

Спасибо всем кто пришел помочь. Проблема оказалась в 0 пине. Переключил кнопку на 2 пин и все заработало.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

svitr пишет:

Спасибо всем кто пришел помочь. Проблема оказалась в 0 пине. Переключил кнопку на 2 пин и все заработало.

а че щеки то раздувал за правильную схемотехнику и "общие" схемы подключения?

настоящие "автоматики-электрики" умеют признавать свои ошибки.

 

svitr
Offline
Зарегистрирован: 16.04.2017

xDriver пишет:

svitr пишет:

Спасибо всем кто пришел помочь. Проблема оказалась в 0 пине. Переключил кнопку на 2 пин и все заработало.

а че щеки то раздувал за правильную схемотехнику и "общие" схемы подключения?

настоящие "автоматики-электрики" умеют признавать свои ошибки.

 

Переклинило ? :)

Это называется «нюанс», когда ты не знаешь что инпуты нельзя соединять на первые 2 пина ардуино. Вы лично, в прочем можете быть свободны. Коммуникативные навыки на уровне дворовой лавочки с пивасом. Что не есть профессионально. 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

сам нарвался...

####написал тут тебе кучу гадостей, потом подумал, да хрен с тобой, стер, жить тебе.#####

а пивас да, мы уважаем и бутылки в мусор складываем, а не тычем куда не попадя.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Опять, блин, неправильно помогаем, да что ж, блин, такое-то вечно :-(