помогите с arduino Due

Gvined
Offline
Зарегистрирован: 25.07.2014

Arduino Due програмируется на мигание светодиодом на 13 порту, програмируется на включение диода от кнопки и погасание его когда отжимаешь кнопку а вот включить и отключить тот же св.диод при повторном нажатии не програмируется диод горит в самом начале при подключенной кнопке через землю 

Вот программа :

int LedPin = 13;             // Подключаем светодиод Рє порту 13
int ButPin = 10;             // Подключаем РєРЅРѕРїРєСѓ Рє выходу 10
int flag = 0;                // флаг состояния
 
void setup()
{
  pinMode(LedPin, OUTPUT);   // Р�нициализируем РїРѕСЂС‚ "ledPin" как выходной
}  
 
void loop()
{
  if(digitalRead(ButPin) == HIGH && flag == 0)      
    {                                              
      digitalWrite(LedPin, !digitalRead(LedPin));
      flag = 1;
    }
  
  if(digitalRead(ButPin) == LOW && flag == 1)
    {
      flag = 0;
    } 
}
 
Что не так я сделал ?
Пушной звер
Пушной звер аватар
Offline
Зарегистрирован: 17.03.2013

ButPin надо сконфигурировать на вход

Gvined
Offline
Зарегистрирован: 25.07.2014

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

Leshiy
Offline
Зарегистрирован: 19.07.2014
byte LedPin = 13;
byte ButPin = 10; 

void setup()
{
  pinMode(LedPin, OUTPUT);
  pinMode(ButPin, INPUT_PULLUP);
}  
 
void loop()
{
  if(digitalRead(ButPin) == LOW)   
    {                                              
      digitalWrite(LedPin, !digitalRead(LedPin));
      while(digitalRead(ButPin) == LOW); // эту строку можно заменить на delay(100);
    }
}

Кнопку на минус теперь вешайте.

Gvined
Offline
Зарегистрирован: 25.07.2014

все тоже самое-(

подключил чтобы при нажимании был логический ноль на 10 порту и закаратил на 5v через резистор не помогло ........  он горит и не потухает вабще жмеш или не жмеш на кнопку

leshak
Offline
Зарегистрирован: 29.09.2011

Добавте после

digitalWrite(LedPin, !digitalRead(LedPin));

Serial.println("toggled");  (Ну и setup, естественно сериал проинициализируйте).

Если на одно нажатие кнопки, будете в Serial Monitor видеть кучу надписеь "toggled" - добавте скажем delay(100) в конце loop().
А вообще, можете почитать тему про кнопки. Прикрепленную.
И обычно, когда решают какую-то проблему, то подключение описывают (а еще лучше - схемку рисуют).

Leshiy
Offline
Зарегистрирован: 19.07.2014

Я как-то не понял, как вы умудрились из вечного while вылезти? Программа тупая, как пробка (вообще-то так программировать нельзя, но если очень хочется, то можно :)).

Как работает программа:
Жмёте кнопку
Земля попадает на вход ардуины
Эта земля вызывает срабатывание строки if(digitalRead(ButPin) == LOW)  "если НОЛЬ поменять значение на выходе LedPin на обратное. 1 на 0, а 0 на 1.
Затем включается  while(digitalRead(ButPin) == LOW);, она работает так "ПОКА ТЫ НЕ ОТПУСТИШЬ КНОПКУ Я БУДУ СТОЯТ И ТУПИТЬ"
Тут сказочке конец и начались суровые будни, которые как бы говорят нам - раз такая простая программа не работает, значит дело не в бобине, а в схеме подключения всей красоты к ардуине.
Красиво разместите ардуину на листе бумаги, подключите все деталюшки, сделайте фото натюрморта телефоном, или чем другим, выложите в инет куда хотите, и ссылку принесите сюда. Мы посмотрим и, возможно, найдём проблему.
 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Мне про натюрморт нравиться. Можно еще красиво разместить запотевшую бутылочку. Сальце нарезаное тоненько с лучком. Огурки.

Leshiy
Offline
Зарегистрирован: 19.07.2014

Вот, поменял немного, добавил delay(100);. Таким делэем можно слона убить, так что если и теперь не заработает, то косяк в другом.

byte LedPin = 13;
byte ButPin = 10;
 
void setup()
{
  pinMode(LedPin, OUTPUT);
  pinMode(ButPin, INPUT_PULLUP);
} 
  
void loop()
{
  if(digitalRead(ButPin) == LOW)  
    { 
      delay(100);                                            
      digitalWrite(LedPin, !digitalRead(LedPin));
      while(digitalRead(ButPin) == LOW); // эту строку можно заменить на delay(100);
    }
}

Я, кстати, не понял, что вы резистором закоротили? Схема должна выглядеть так:

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Leshiy пишет:

Я, кстати, не понял, что вы резистором закоротили? Схема должна выглядеть так:


красиво. Ждем новых перлов.

Leshiy
Offline
Зарегистрирован: 19.07.2014

Puhlyaviy пишет:
Leshiy пишет:

Я, кстати, не понял, что вы резистором закоротили? Схема должна выглядеть так:

 

красиво. Ждем новых перлов.

Чочочо? Из мене ничо не перло, я за этим строго слежу! Я человек высокой культуры и пугающей сознательности. Потому желаю, чтобы все!

leshak
Offline
Зарегистрирован: 29.09.2011

Leshiy пишет:

Чочочо? Из мене ничо не перло, я за этим строго слежу! Я человек высокой культуры и пугающей сознательности. Потому желаю, чтобы все!

Не уследили.... резистор "не в тему" из вас таки вылез. Во первых без него можно обойтись: использовать внутренний (вообщем-то для того и подключают кнопку к земле, что-бы внутрений использовать можно было). Во вторых, если уж ставить внешний (тоже не ошибка), то уж точно не так. Это же не светодиод где нам ток нужно ограничивать.... вообщем "айда читать тему про кнопки" (или любую статью про то как правильно подключать кнопку к ардуине).

Да и выше "Я как-то не понял, как вы умудрились из вечного while вылезти?" перлы выползали.
Кто вам сказал что он из вечного while вышел?  Почему вы решили что описанные проблемы только выходом из while могут быть вызываны?  Лично я могу еще две причины вообразить. И обе будут пакостить внутри вечного while.
А какая из них в данном случае - мне лень гадать. По крайней мере до тех пор, пока топик стартер, сам не потрудиться нарисовать по какой же схеме он подключает и не сдалает диагностику с помощью Serial.println.
А может тоже, вместе с вами, почитает тему про кнопки и сам найдет причину...

Gvined
Offline
Зарегистрирован: 25.07.2014

https://yadi.sk/i/S3hd2s-gYHui6

ВОТ Я ПОДКЛЮЧИЛ ПО :

byte LedPin = 13;
byte ButPin = 10;
 
void setup()
{
  pinMode(LedPin, OUTPUT);
  pinMode(ButPin, INPUT_PULLUP);
}
  
void loop()
{
  if(digitalRead(ButPin) == LOW) 
    {
      delay(100);                                           
      digitalWrite(LedPin, !digitalRead(LedPin));
      while(digitalRead(ButPin) == LOW); // эту строку можно заменить на delay(100);
    }
}

горит в самом начале и не реагирует на кнопку......

leshak
Offline
Зарегистрирован: 29.09.2011

Ну, а serial.println где?  Как мы узнаем заходит оно в if вообще или нет? Как мы поймем проблема у нас с led-дом или кнопкой?

Leshiy
Offline
Зарегистрирован: 19.07.2014

А вот тут мы вас и поправим... Резистор им не в тему, а?! Человек непойми чего непойми куда непойми как подключает, а им защитный резистор не в тему. Думать надо глубже, а на вещи смотреть ширше.

leshak
Offline
Зарегистрирован: 29.09.2011

Leshiy пишет:

А вот тут мы вас и поправим... Резистор им не в тему, а?!

Да и не в тему (особенно в свете его последнего скетча, где INPUT_PULLUP появился, значит все-таки "почитал про кнопки) и неправильно.

Leshiy пишет:

Человек непойми чего непойми куда непойми как подключает, а им защитный резистор не в тему. Думать надо глубже, а на вещи смотреть ширше.

Да с человеком-то все понятно. Ему уже рассказали куда двигаться, что схему бы дать и т.д.
А тут "ваш косяк". Так что "человек", к вашим словам - ну никакого отношения не имеет. 

P.S. Или вы хотели рассказать что резистор тут от ошибочного включения на OUTPUT?  Ну тогда, простите но нужно было упоминать "схема для параноиков". И рассказать зачем он там. Все-таки это далеко не "традиционная схема включения". И, кстати, проблеме топик-стартера - никакого отношения не имеющая. Это "другая история".

Gvined
Offline
Зарегистрирован: 25.07.2014

Вы конечно все молодцы пишете попровляете друг друг ) даете в пример свои программы. Но прикол вы говорите почитайте тему кнопки но посмотрите на мой первый скетч он оттуда с той темы и кнопка подключена у меня была так как там описано ! А теперь вопрос : почему не работает ?

leshak
Offline
Зарегистрирован: 29.09.2011

Gvined пишет:
Вы конечно все молодцы пишете попровляете друг друг ) даете в пример свои программы. Но прикол вы говорите почитайте тему кнопки но посмотрите на мой первый скетч он оттуда с той темы и кнопка подключена у меня была так как там описано !

А прикол в том что никто, кроме вас об этом не знает. Вы что думаете, мы количеству гласных и согласных букв в вашем письме умеем такие вещи отгадывать?  Или вы думаете что "подключил не туда" это редкая причина проблем?
Gvined пишет:
А теперь вопрос : почему не работает ?

Не, ну вот точно вам на форум астрологов нужно. Почему не работает? Да потому что "что-то не так". Подходит такой ответ?  Не нравится?  А ведь он "на уровне" вашего вопроса.
Что не так? Да десятки причин могут быть. И их нужно "перебирать". Последовательно, по одному. И никто, за вас - этого не сделает. Максимум что мы можем - подсказать, гадать, выдвигать версии. Проверять - это ваша забота. И давать сюда "картинку описание". Максимально подробную. Может быть, по каким-то признакам кто-то и догадатеся "в чем проблема".
А может и нет. Всякое бывает.

Я вот два раза уже сказал вам "сделайте Serial.println" скажите то в мониторе видно. Сделали? А "причину проблемы" хотите. А я ведь даже сказал "зачем это нужно". Что-бы понять "кто у нас дурагонить", кнопка или светик. Или я должен быть свой хрустальный шар достать? Или вы думаете я могу, сидя у себя добавить туда Serial.println? Думаете что после этого вам сразу скажут "что поправить"?  Неа.... следующую проверку предложат. Так, шаг за шагом и ищут причину. Отсекая пути....
 

Leshiy
Offline
Зарегистрирован: 19.07.2014

leshak пишет:

Leshiy пишет:

А вот тут мы вас и поправим... Резистор им не в тему, а?!

Да и не в тему (особенно в свете его последнего скетча, где INPUT_PULLUP появился, значит все-таки "почитал про кнопки) и неправильно.

Leshiy пишет:

Человек непойми чего непойми куда непойми как подключает, а им защитный резистор не в тему. Думать надо глубже, а на вещи смотреть ширше.

Да с человеком-то все понятно. Ему уже рассказали куда двигаться, что схему бы дать и т.д.
А тут "ваш косяк". Так что "человек", к вашим словам - ну никакого отношения не имеет. 

P.S. Или вы хотели рассказать что резистор тут от ошибочного включения на OUTPUT?  Ну тогда, простите но нужно было упоминать "схема для параноиков". И рассказать зачем он там. Все-таки это далеко не "традиционная схема включения". И, кстати, проблеме топик-стартера - никакого отношения не имеющая. Это "другая история".

Ничего я "про кнопки" не читал. Также рассматривается вопрос "перестать читать leshaka"

Leshiy
Offline
Зарегистрирован: 19.07.2014

Gvined пишет:
Вы конечно все молодцы пишете попровляете друг друг ) даете в пример свои программы. Но прикол вы говорите почитайте тему кнопки но посмотрите на мой первый скетч он оттуда с той темы и кнопка подключена у меня была так как там описано ! А теперь вопрос : почему не работает ?

Ардуина сгорела.

Gvined
Offline
Зарегистрирован: 25.07.2014

твоя сгорела ?)

Leshiy
Offline
Зарегистрирован: 19.07.2014

Угу, этож у меня светодиод своевольничает.