Опрос кнопки. Застрял.

Тютель
Offline
Зарегистрирован: 09.10.2015

Застрял на пустяковой задаче для Arduino. Проверяю нажатие кнопки,  если наждата - жду 30 мс, потом снова проверяю. Если нажата - кнопку держат, снова в начало и в цикл, пока не отпустят, если не нажата - выполняю (команды) и снова в начало опроса.

Из языков знаю ассемблер для микроконтроллера 8051, там эта задача решается за 10 инструкций.  Языка Arduino не знаю, гуглю второй день толку мало. Запутался с применением if for do while - я так полагаю что-то из этого мне надо.

Клапауций 070
Offline
Зарегистрирован: 26.09.2015
Тютель
Offline
Зарегистрирован: 09.10.2015

нифигасе...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
inspiritus
Offline
Зарегистрирован: 17.12.2012
Тютель
Offline
Зарегистрирован: 09.10.2015

А простых условных переходов нет в этом языке? проверить бит на порте, перейти (или не перейти) по метке? Или скопировать байт с порта в аккумулятор, исключающее ИЛИ со значением, проверка аккумулятора на ноль (как в MCS-48)?

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

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

Керниган и Ритчи


Можно ближе
http://arduino.ru/Reference

inspiritus
Offline
Зарегистрирован: 17.12.2012

Кому татор, а кому лятор. Вы эти ассемблеоные замашки бросьте :) тут, я не побоюсь этого слова С.

Нет , конечно можно и на ассемблере слабать, только вот зачем ?

 

Тютель
Offline
Зарегистрирован: 09.10.2015

inspiritus пишет:

Кому татор, а кому лятор. Вы эти ассемблеоные замашки бросьте :) тут, я не побоюсь этого слова С.

Нет , конечно можно и на ассемблере слабать, только вот зачем ?

Так в Ассемблере все намного проще и логичнее.

Всем спасибо, я понял, это не моя игрушка.

Уже скачал Ревича "Ассемблер AVR". Сотру загрузчик

Клапауций 070
Offline
Зарегистрирован: 26.09.2015

Тютель пишет:

Уже скачал Ревича "Ассемблер AVR". Сотру загрузчик

Chip Erase

http://habrahabr.ru/post/152052/

inspiritus
Offline
Зарегистрирован: 17.12.2012

Операций на моск :) 

не морочьте голову мосьё, гавнакодьте как все на сях, или ... Не морочьте нам тут голову ...

ардуино это прикольная штука, чтобы быстро, на коленке сделать прототип-эскиз , грифельная доска, пластилин...

маслом писать будете ( из гранита рубить вечноэ, на вестаке строгать нетленноэ), когда Вам заказчик отстегнет :)

Тютель
Offline
Зарегистрирован: 09.10.2015

inspiritus пишет:

не морочьте голову мосьё, гавнакодьте как все на сях, или ... Не морочьте нам тут голову ...

Ни в коем случае не буду морочить. Придти на этот форум с своим ламерским вопросом было моей ошибкой, извиняюсь. Вы тут дальше лепите, не смею вам мешать.

Клапауций 070
Offline
Зарегистрирован: 26.09.2015

так шо? не будет скетчей в бинарном коде?

кто мне ужмёт титановый велосипед в 50 байт?

inspiritus
Offline
Зарегистрирован: 17.12.2012

Алюминиевые агурцы :)

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

Не спорьте коллеги, давно известно, что настоящий программист может написать фортрановскую программу на любом языке :)

inspiritus
Offline
Зарегистрирован: 17.12.2012

ИИСТИНА сие есть!

Прграммистъ - стиль мышления.

Клапауций 070
Offline
Зарегистрирован: 26.09.2015

inspiritus пишет:

Прграммистъ - стиль мышления.

да, ладно - нет смысла гордиться профессиональной деформацией сознания.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Аберрацией :) , кичиться :))

 

 

Клапауций 070
Offline
Зарегистрирован: 26.09.2015

где мои бинарные скетчи?

inspiritus
Offline
Зарегистрирован: 17.12.2012

Загружаемые на тумблерах :)

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Клапауций 070 пишет:

где мои бинарные скетчи?

Клапауций 070
Offline
Зарегистрирован: 26.09.2015

inspiritus пишет:

Загружаемые на тумблерах :)

такие у меня уже есть http://habrahabr.ru/post/152052/

Клапауций 070
Offline
Зарегистрирован: 26.09.2015

Jeka_M пишет:

клаву с 0 1 тоже приготовил

ентер - шозанах?! нет в бинарном коде символа \n !

Тютель
Offline
Зарегистрирован: 09.10.2015

Клапауций 070 пишет:

где мои бинарные скетчи?

скоро будут, все уже готово.

Клапауций 070
Offline
Зарегистрирован: 26.09.2015

Тютель пишет:

скоро будут, все уже готово.

шо это?

подключи дуино к пинам кнопок - не 19-й чай век, вручную кнопки нажимать.

Тютель
Offline
Зарегистрирован: 09.10.2015

Это кнопочный пуульт для ручного ввода двоичных кодов

Это не для дуино. Это я учился управлять экранчиком на HD44780 вручную, чтоб понять как писать программу для упраления экранчиком с МК.

Клапауций 070
Offline
Зарегистрирован: 26.09.2015

Тютель пишет:

Это не для дуино.

я понял, зачем это

но, зачем это, если протоколы управления LCD есть в свободном доступе?

Тютель
Offline
Зарегистрирован: 09.10.2015

Для моего МК (AT89S52) не нашел устраивающих меня примеров на Ассемблере, пришлось подпрограмму управления дисплеем писать самому.

Описания протокола, - да есть, и я ими пользовался. Требовалось кое что окончательно уточнить для себя.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Фигасе, прошлый раз я такое видел в 1989 году :) загрузчик через это в 8080 запихивал .

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

Клапауций 070 пишет:

шо это?

подключи дуино к пинам кнопок - не 19-й чай век, вручную кнопки нажимать.

К каки наф пмнам? Стерву на каждую кнопку - нехай нажимает!

Тютель
Offline
Зарегистрирован: 09.10.2015

Ну вот. Таки написал почти так, как хотел.

Такой вопрос. Тут можно обойтись без goto? А то говорят, что goto - не совсем хорошо.

int svetodiod = 9;
int knopka = 3;

void setup() {
  // put your setup code here, to run once:
pinMode (svetodiod, OUTPUT);
pinMode (knopka, INPUT );
}

void loop() 
{
  // put your main code here, to run repeatedly:
back: if (digitalRead (knopka) == HIGH) // ;Кнопка нажата?
  {
  delay(30);                            // Если да, то ждем 30 мс 
  if (digitalRead (knopka) == HIGH)     // Прошло 30 мс... Кнопка все еще нажата?
    {
    goto back;                          // Если да, то назад в опрос
    }
  else                                  //  Если нет, то выполняем дальше.          
    {
    if (digitalRead (svetodiod) == HIGH) // Светодиод горит?
       {
       digitalWrite (svetodiod, LOW);    // Потушим...
       }
    else                                 // Иначе  
       {
       digitalWrite (svetodiod, HIGH);   // Зажжем.
       }
       
    }
  }
}

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Тютель, например так:

void loop() {
if (digitalRead(knopka) == HIGH  ){
    while (digitalRead(knopka) == HIGH  ){ delay(30);} 
    digitalWrite (svetodiod, !digitalRead(svetodiod));  
    }
 }

 

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

А для чнго вообще goto на начало loop? Выйти из loop нафиг, он сам ещё раз вызовется.

Тютель
Offline
Зарегистрирован: 09.10.2015

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

А для чнго вообще goto на начало loop? Выйти из loop нафиг, он сам ещё раз вызовется.

Не знаю как вернутся иначе в начало проверки кнопки.

Клапауций 070
Offline
Зарегистрирован: 26.09.2015

Тютель пишет:

Ну вот. Таки написал почти так, как хотел.

как бы ты не старался - у тебя получится это #1

потом набегут программисты и ты напишешь класс

*объясните кто ТС, что программа в лупе работает в цикле.

Тютель
Offline
Зарегистрирован: 09.10.2015

Клапауций 070 пишет:

*объясните кто ТС, что программа в лупе работает в цикле.

Это я знаю. Просто мне никто ни сказал, и я нигде не прочитал, что

if (condition) 
{
}

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

Это мне стало понятно только из сообщения dimax, за что ему большое спасибо.

Клапауций 070
Offline
Зарегистрирован: 26.09.2015

Тютель пишет:

Это я знаю. Просто мне никто ни сказал, и я нигде не прочитал, что

*почему мне никто никогда ничего не говорит?(риторический вопрос)

Тютель пишет:

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

выход из лупа куда?

Тютель
Offline
Зарегистрирован: 09.10.2015

Насколько я знаю, из него нельзя выйти. Он снова начнется.

 

Клапауций 070
Offline
Зарегистрирован: 26.09.2015

Тютель пишет:

Насколько я знаю, из него нельзя выйти. Он снова начнется.

ну, ты же выше писал, что тебя dimax научил выходить из лупа?

Тютель
Offline
Зарегистрирован: 09.10.2015

Прошу прощения, выходить из условия.

Клапауций 070
Offline
Зарегистрирован: 26.09.2015

Тютель пишет:

Прошу прощения, выходить из условия.

ок.

ты точно уверен, что из условия, для корректной его обработки, необходим выход?

как это происходит в ассемблере? - происходит отработка оператора if() и всё зависает?

Тютель
Offline
Зарегистрирован: 09.10.2015

В Ассемблере нет оператора IF. Есть инструкция CJNE и некоторые другие, для организации ветвления. Выходить там некуда.

Клапауций 070
Offline
Зарегистрирован: 26.09.2015

Тютель пишет:

В Ассемблере нет оператора IF. Есть инструкция CJNE и некоторые другие, для организации ветвления. Выходить там некуда.

ок.

тогда, бросай это всё нахрен и учи матчасть

http://arduino.ru/Reference

http://arduino.ru/Reference/Loop

После вызова функции setup(), которая инициализирует и устанавливает первоначальные значения, функция loop() делает точь-в-точь то, что означает её название, и крутится в цикле, позволяя вашей программе совершать вычисления и реагировать на них. Используйте её для активного управления платой Arduino.

http://arduino.ru/Reference/If

if, используется в сочетании с операторами сравнения, проверяет, достигнута ли истинность условия, например, превышает ли входное значение заданное число. Формат оператора if следующий:

if (someVariable > 50)
{
// выполнять действия
}

Программа проверяет, значение someVariable больше чем 50 или нет. Если да, то выполняются определенные действия. Говоря иначе, если выражение в круглых скобках истинно, выполняются операторы внутри фигурных скобок. Если нет, программа пропускает этот код.