помогите написать код

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bwn пишет:

Странно, куда-то наивный писатель пропал. Понял, что х-ю сморозил и на Радиста, не в тему наехал?


У меня стойкое ощущение, что ТС "тихо сам с собою..." )))

 

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

ua6em пишет:

У меня стойкое ощущение, что ТС "тихо сам с собою..." )))

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bwn пишет:

ua6em пишет:

У меня стойкое ощущение, что ТС "тихо сам с собою..." )))

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


я и говорю, что помошник и ТС одно лицо )))

EKate
Offline
Зарегистрирован: 18.03.2019
Предлогаю вскрыть карты - мой код ниже.
 
byte i = 7; // в счетчике +1 номер пина с светодиодом
long ptime = 0; // типа софт таймер
byte o = 0b111; // мусор для засылки в порт

void setup() {

pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(2, INPUT);
}

void loop(){

if (i>=10 ) {  / если счетчик шкалит то прыгаем на первый светодиод
  i=7;
}
while ( !(digitalRead(2)) ){  
digitalWrite(i, LOW); // очевидно - выкл. св.диод
if (digitalRead(2) == LOW){ // ждем нажатия

      if (millis() - ptime > 250){
        i ++;
          shiftOut(i, 2, MSBFIRST, ( o >> 2)); // знаю. просто это работает
        ptime = millis();
        delay(500);
      }      
   }
 }
}

 

Жду ответочку.
Пожалуйста проверьте. Пи-с-ать коменты и сомневаться могут все.
Луп может выполняться но код можно и не выполнять.
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну если я вскрою карты, то меня попросят вксрыть уже вскрытые карты. Так что я пас.

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

EKate пишет:

Предлогаю вскрыть карты - мой код ниже.
 
byte i = 7; // в счетчике +1 номер пина с светодиодом
long ptime = 0; // типа софт таймер
byte o = 0b111; // мусор для засылки в порт

void setup() {

pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(2, INPUT);
}

void loop(){

if (i>=10 ) {  / если счетчик шкалит то прыгаем на первый светодиод
  i=7;
}
while ( !(digitalRead(2)) ){  
digitalWrite(i, LOW); // очевидно - выкл. св.диод
if (digitalRead(2) == LOW){ // ждем нажатия

      if (millis() - ptime > 250){
        i ++;
          shiftOut(i, 2, MSBFIRST, ( o >> 2)); // знаю. просто это работает
        ptime = millis();
        delay(500);
      }      
   }
 }
}

 

Жду ответочку.
Пожалуйста проверьте. Пи-с-ать коменты и сомневаться могут все.
Луп может выполняться но код можно и не выполнять.

по задумке ТС активный уровень на кнопке высокий или нет ?

1 - ваш код не компилируется (из за банальной небрежности)

2 - ваш код будет работать неверно, в какой то момент последний светодиод не погаснет

3 - "знаю. просто это работает"  не канает! что делает эта строка? порт для синхронизации shiftOut должен быть выходом.

 

add

не поленился, собрал макет, ваш код не@[я не работает как надо! вам видео снять ?

add

хотя мы до сих пор и сами не знаем как надо.

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

EKate пишет:

Предлогаю вскрыть карты - мой код ниже.

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

uint8_t BUTTON = 2; // кнопка
uint8_t state = 0;
uint8_t idx;

#define LED_COUNT 3
uint8_t LED_ARRRAY[LED_COUNT] = {
  8, // певый светодиод
  9, // второй светодиод
  10 // третий светодиод
};

void setup() {
  for (idx = 0; idx < LED_COUNT; idx++)
  {
    pinMode(LED_ARRRAY[idx], OUTPUT);
  }
  pinMode(BUTTON, INPUT);
}

void loop() {
  if (digitalRead(BUTTON) && !state) {
    state = !state;
    digitalWrite(LED_ARRRAY[idx], LOW);
    if (++idx >= LED_COUNT) idx = 0;
    digitalWrite(LED_ARRRAY[idx], HIGH);
  }
  delay(30); 
  if (!digitalRead(BUTTON) && state) state = !state; 
}

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

ua6em пишет:

bwn пишет:

Странно, куда-то наивный писатель пропал. Понял, что х-ю сморозил и на Радиста, не в тему наехал?


У меня стойкое ощущение, что ТС "тихо сам с собою..." )))

 

Это оказывается "заразно" .. осторожней! :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Arhat109-2 пишет:

ua6em пишет:

bwn пишет:

Странно, куда-то наивный писатель пропал. Понял, что х-ю сморозил и на Радиста, не в тему наехал?


У меня стойкое ощущение, что ТС "тихо сам с собою..." )))

Это оказывается "заразно" .. осторожней! :)

 ЗАПОСТИЛ КОД исключительно развлечения для, не проверял, чисто логически, должен работать так, как задумал, раз уж макетка собрана может XDRIVER проверит, что там у РАДИСТА не так (или так) )))

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

чутка поправленый код от РАДИСТА, работает !

int button = 2; // кнопка
int led1 = 8;   // первый светодиод
int led2 = 9;   // второй светодиод
int led3 = 10;  // третий светодиод

byte i = 0;     // счетчик
byte f_b = 0;   // флаг нажатия кнопки

void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(button, INPUT);
}

void loop() {
  if (digitalRead(button) == HIGH && f_b == 0) {
    f_b = 1;
    digitalWrite(i + 7, LOW);
    i++;
    if (i > 3) {
      i = 1;
    }
    digitalWrite(i + 7, HIGH);
  }
  delay(30);
  if (digitalRead(button) == LOW && f_b == 1) {
    f_b = 0;
  }
}

без строки 26 из-за дребезга, иногда сбоит.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

xDriver пишет:

чутка поправленый код от РАДИСТА, работает !

int button = 2; // кнопка
int led1 = 8;   // первый светодиод
int led2 = 9;   // второй светодиод
int led3 = 10;  // третий светодиод

byte i = 0;     // счетчик
byte f_b = 0;   // флаг нажатия кнопки

void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(button, INPUT);
}

void loop() {
  if (digitalRead(button) == HIGH && f_b == 0) {
    f_b = 1;
    digitalWrite(i + 7, LOW);
    i++;
    if (i > 3) {
      i = 1;
    }
    digitalWrite(i + 7, HIGH);
  }
  delay(30);
  if (digitalRead(button) == LOW && f_b == 1) {
    f_b = 0;
  }
}

без строки 26 из-за дребезга, иногда сбоит.

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

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

ua6em пишет:

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

это шутка была ? вы хоть смайлики ставьте :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

xDriver пишет:

ua6em пишет:

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

это шутка была ? вы хоть смайлики ставьте :)

да нее, чесслово - не понимаю природу сбоя

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

А если кнопку делаем по человечески? Что имеем? (кутить так кутить)
Если нет конденсатора на кнопке всё таки небольшую задержку в 26 строке придётся вводить видимо
 

int button = 2; // кнопка
int led1 = 8;   // первый светодиод
int led2 = 9;   // второй светодиод 
int led3 = 10;  // третий светодиод

byte i = 0;     // счетчик
byte f_b = 0;   // флаг нажатия кнопки

void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(button, INPUT_PULLUP);
}
 
void loop(){
if (digitalRead(button) == LOW && f_b == 0) {
f_b=1;  delay(1);
digitalWrite(i+7, LOW);  
i++;
if (i>3) {i=1;}
digitalWrite(i+7, HIGH);  
}
if (digitalRead(button) == HIGH && f_b == 1) {
f_b=0;  delay(1);
 }
} //END 

 

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Если нет конденсатора на кнопке всё таки небольшую задержку в 26 строке придётся вводить видимо, тау до после второго всплеска сколько выходит?

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

клетка 150us

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

xDriver пишет:

клетка 150us

можно крутнуть цикл, или delay(1) будет достаточно, в 26 строке, сразу после установки флага в 0

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

да можно все что угодно, хоть тригер на кнопку, мы чейто отошли от темы :)

где наш EKate, смотрю в онлайне, тока чет ниче не пишет нам :)

EKate
Offline
Зарегистрирован: 18.03.2019
Доброго времени. В полночь как-то не клеилось с макеткой(то кот лазит по столу, родичи спят) кароч спалил я похоже D8 по этому использовал d9 - d11. 
1. Кнопка НРазомкнута. собрал по схеме от тс.
2. не внимательность, коментил прямо в форме отправки на форуме
3. Целиком и полностью согласен.
 
И да, Спасибо за науку.
Вот - исправился, проверил. 
 
ниже код без излишеств
 
/*
Скетч использует 998 байт (3%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 15 байт (0%) динамической памяти, оставляя 2033 байт для локальных переменных. Максимум: 2048 байт.
*/

byte i = 7; // в счетчике +1 номер пина с светодиодом
long ptime = 0; // типа софт таймер
byte oO = 0; // для засылки в порт

void setup() {

pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(2, INPUT);
}

void loop(){

if (i>=11 ) {  // если счетчик шкалит то прыгаем на первый светодиод
  i=8;
}
if ( !digitalRead(2) == HIGH ){  // ждем нажатия
      if ( ( millis() - ptime ) > 350 ){
        i ++; // как завещали деды( так быстрее ) не !ленимся
        PORTB = ( 1 << i - 8 ); // проталкиваю 1 на пины по портуБ
        ptime = millis();
      }
   }
}

 

ниже код не без излишеств

 

byte i = 7; // в счетчике +1 номер пина с светодиодом
long ptime = 0; // типа софт таймер
byte oO = 0; // для засылки в порт

void setup() {
Serial.begin(9600);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(2, INPUT);
}

void loop(){

if (i>=11 ) {  // если счетчик шкалит то прыгаем на первый светодиод
  i=8;
}
while ( !(digitalRead(2)) ){ // ждем нажатия
Serial.println("butt0n");
if (digitalRead(2) == LOW){ 
      if (millis() - ptime > 350){
        i ++; // как завещали деды( так быстрее ) не !ленимся
        Serial.println("Knock!");
        PORTB = (1 << i - 8 ); // проталкиваю 1 на пины по портуБ
        ptime = millis();
      }
   }
 }
Serial.println("Knock!loop"); 
}

 

Друзья я очень рад что вы помогаете новичкам. Это лучший форум с хорошими темами - они реально разжованы. Благодаря вашим постам, вопросам глупым и не очень и приведенным ответам с решениями даже полный нуб - я. Смог что-то написать.
Без небольшого троллинга - тему было не оживить. А тут - АГОНЬ!
Спасибо.
EKate
Offline
Зарегистрирован: 18.03.2019

xDriver пишет:

да можно все что угодно, хоть тригер на кнопку, мы чейто отошли от темы :)

где наш EKate, смотрю в онлайне, тока чет ниче не пишет нам :)

Уже пишу. Спасибо за участие. :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

позвольте поинтересоваться сутью строк 24 и 21 первого и второго скетча

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

EKate пишет:
то кот лазит по столу, родичи спят) кароч спалил я похоже D8

Кончай крошить батон на усато-мурлыкастых!

Як що, так відразу кіт винен!

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

EKate пишет:

ниже код без излишеств

/*
Скетч использует 998 байт (3%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 15 байт (0%) динамической памяти, оставляя 2033 байт для локальных переменных. Максимум: 2048 байт.
*/

byte i = 7; // в счетчике +1 номер пина с светодиодом
long ptime = 0; // типа софт таймер
byte oO = 0; // для засылки в порт

void setup() {

pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(2, INPUT);
}

void loop(){

if (i>=11 ) {  // если счетчик шкалит то прыгаем на первый светодиод
  i=8;
}
if ( !digitalRead(2) == HIGH ){  // ждем нажатия
      if ( ( millis() - ptime ) > 350 ){
        i ++; // как завещали деды( так быстрее ) не !ленимся
        PORTB = ( 1 << i - 8 ); // проталкиваю 1 на пины по портуБ
        ptime = millis();
      }
   }
}

Пара скромных вопросов:

1. Строка №23. Вы уверены в том, что правильно понимаете, что там написано. Я имею в виду два варианта:

// Написано
( !digitalRead(2) == HIGH )

// Вариант 1
( ! (digitalRead(2)  == HIGH) )

// Вариант 2
( (! digitalRead(2))  == HIGH )

Это ведь совсем разные коды!

2. Практически такой же вопрос по строке №26

// Написано
PORTB = ( 1 << i - 8 );

// Вариант 1
PORTB = (1 << i) - 8;

// Вариант 2
PORTB = 1 << (i - 8 );
xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

и уменя еще один:

PORTB = ( 1 << i - 8 );

вы понимаете, что сносите значение всех битов в порте, кроме интересующего вас?

для локальной задачи прокатит. а куда переносить начнете...

че вы в дебри то лезите, то шифт на порт, то это ?

EKate
Offline
Зарегистрирован: 18.03.2019

ua6em пишет:

позвольте поинтересоваться сутью строк 24 и 21 первого и второго скетча

В строке

24 лишний раз не дергаем пин пока не прошло 350 мс от пред предидущего нажатия кнопки

25 если от предидучего нажатия прошло достаточно времени инкременируем счетчик нажатий 

26 cсогласно даташиту и картинке с распиновкой платы aduino UNO(чистопородный китаец) нам надо записать 1 в порт portD 1 - portD 3 чтобы сменить сигнал на HIGH.  ( 1 << i - 8 ) выполняет побитовый сдвиг с обнулением всех остальных битов. пишет 1 на нужную позицию портаБ  (00000010  00000100 00001000) т.е. на один бит два или три бита.

27 начинаем новый отсчет мс

Но меня смущает сообщения компилятора

"26:26: warning: suggest parentheses around '-' "

если включить все сообщения. Буду благодарен если подскажете где копать.

 

EKate
Offline
Зарегистрирован: 18.03.2019

Цитата:

Пара скромных вопросов:

1. Строка №23. Вы уверены в том, что правильно понимаете, что там написано. Я имею в виду два варианта:

// Написано
( !digitalRead(2) == HIGH )

// Вариант 1
( ! (digitalRead(2)  == HIGH) )

// Вариант 2
( (! digitalRead(2))  == HIGH )

Это ведь совсем разные коды!

2. Практически такой же вопрос по строке №26

// Написано
PORTB = ( 1 << i - 8 );

// Вариант 1
PORTB = (1 << i) - 8;

// Вариант 2
PORTB = 1 << (i - 8 );

По

1. действительно 

if ( digitalRead(2)  != HIGH ){  // так будет лучше

по 2

Цитата:

требует доработки. есть warning от компилятора -но работает. И да я осознаю что все пины кроме нужного перевожу в лоу

2 обдумал и исправил 

// Вариант 2
PORTB = 1 << (i - 8 );
byte i = 7; // в счетчике +1 номер пина с светодиодом
static long ptime = 0; // типа софт таймер

void setup() {
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(2, INPUT);
}

void loop(){
if (i>=11 ) {  // если счетчик шкалит то прыгаем на первый светодиод
  i=8;
}
if ( (digitalRead(2) != HIGH ) && (( millis() - ptime ) > 350 ) ){  // ждем нажатия
        i ++;                                                        // ( так быстрее ) не !ленимся
        PORTB =  1 << ( i - 7 );                                     // зажигаю по одному за раз пишу 1 на пин по портуБ
        ptime = millis();
 }
}
EKate
Offline
Зарегистрирован: 18.03.2019

Ворота пишет:

EKate пишет:
то кот лазит по столу, родичи спят) кароч спалил я похоже D8

Кончай крошить батон на усато-мурлыкастых!

Як що, так відразу кіт винен!

Я не против котика, но когда этот прораб над "Джамшудами" везде где движняк, а особенно ночью - доставляет неудобства.

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

EKate пишет:

Но меня смущает сообщения компилятора

"26:26: warning: suggest parentheses around '-' "

если включить все сообщения. Буду благодарен если подскажете где копать.

Так вот там же и копать - это то, о чём я писал в #75. Ставьте скобки, не ленитесь. Компилятор не уверен в том, что Вы написали то, что хотели, вот и подсказывает :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

EKate пишет:

if ( digitalRead(2)  != HIGH ){  // так будет лучше

if ( !digitalRead(2)){  }

А так ещё лучше???

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

ua6em пишет:

А так ещё лучше???

Возможно, но в плане читабельности кода, я бы предпочёл 

А) полу-по-уму

#define	IsLOW(pin)	(!digitalRead(pin))
#define	IsHIGH(pin)	(digitalRead(pin)==HIGH)

Б) по-уму

#define	IsButtonPressed(pin)	(!digitalRead(pin))
#define	IsButtonReleased(pin)	(digitalRead(pin)==HIGH)

Не правда ли, намного читабельнее?

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

Добъём темку:

#define	INVERTED_BUTTONS

#ifdef INVERTED_BUTTONS
  #define BUTTON_ON             HIGH
  #define BUTTON_OFF            LOW
#else 
  #define BUTTON_ON             LOW
  #define BUTTON_OFF            HIGH
#endif

#define	IsButtonPressed(pin)	(BUTTON_ON  == digitalRead(pin))
#define	IsButtonReleased(pin)	(BUTTON_OFF == digitalRead(pin))

 

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

Ну, как-то так. Направление правильное: читаться должны сутевые вещи по задаче, а не пины и стандартные функции.

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

А если пины не инвертованые то делаем так 

//#define	INVERTED_BUTTONS

#ifdef INVERTED_BUTTONS
  #define BUTTON_ON             HIGH
  #define BUTTON_OFF            LOW
#else 
  #define BUTTON_ON             LOW
  #define BUTTON_OFF            HIGH
#endif

#define	IsButtonPressed(pin)	(BUTTON_ON  == digitalRead(pin))
#define	IsButtonReleased(pin)	(BUTTON_OFF == digitalRead(pin))

 

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

И, кстати, ЕKate, диды завещали не "i++", а "++i". Хотя, на таких тривиальных типах данных компилятор сам разберется, как быстрее. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
«Все истинно верующие да разбивают яйца с того конца, с какого удобнее». Решение же вопроса, какой конец признать более удобным, по моему скромному суждению, должно быть предоставлено совести каждого или в крайнем случае власти верховного судьи империи.
Джонатан Свифт
sadman41
Offline
Зарегистрирован: 19.10.2016

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

«Все истинно верующие да разбивают яйца с того конца, с какого удобнее». 

Так-то да, но есть некие соображения, которые в применении к простым типам данных носят скорее характер философский. Так что и "i=i+1" компилятор приведёт к тому же виду... Но Вы-то об этом знаете, конечно.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???

/*******************ПИЩАЛКА ********************/
void start_Buzzer(){
  pinMode(PIN_ZUM,OUTPUT);
  attachInterrupt(1, Buzzer, RISING );
  analogWrite(pinINT1,0x80);
 }

void end_Buzzer(){
  detachInterrupt(1);
  digitalWrite(PIN_ZUM,LOW);
}

void Buzzer(void){
  static int i=490/zFreq;
  if(!i--)
  {
    digitalWrite(PIN_ZUM, ! digitalRead(PIN_ZUM));
    i=490/zFreq;
  }
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

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

ua6em пишет:

А так ещё лучше???

Возможно, но в плане читабельности кода, я бы предпочёл 

А) полу-по-уму

#define	IsLOW(pin)	(!digitalRead(pin))
#define	IsHIGH(pin)	(digitalRead(pin)==HIGH)

Б) по-уму

#define	IsButtonPressed(pin)	(!digitalRead(pin))
#define	IsButtonReleased(pin)	(digitalRead(pin)==HIGH)

Не правда ли, намного читабельнее?

правда, но не люблю много букв, мне и АТС панасоник из-за это больше нравится нежели нортел (LG) (в программировании)

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

ua6em пишет:

Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???

Избегать приёмов, в корректности которых нет уверенности. Какие могут быть варианты?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:

ua6em пишет:

Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???

Избегать приёмов, в корректности которых нет уверенности. Какие могут быть варианты?

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

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

ua6em пишет:

если компилятор её соптимизирует

Компилятор не оптимизирует неэквивалентными преобразованиями. Теоретически, конечно, в нём может быть ошибка, но если он такой глючный, то много чего "наоптимизировать" может. Но такие ошибки в компиляторах - большая редкость.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

То-есть, он как Мюллер, ему верить можно )))

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

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

Возможно, но в плане читабельности кода, я бы предпочёл 

А) полу-по-уму

#define	IsHIGH(pin)	(digitalRead(pin)==HIGH)

Б) по-уму

#define	IsButtonReleased(pin)	(digitalRead(pin)==HIGH)

Евгений Петрович! (интонация как "Семен Семеныч!" из киноклассики)

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

Раиса Абельская: «Вот вам любовь-морковь – не хочете, не ешьте» 

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

Все это напомнило мне ролик . Русский язык это русский загаженый славянскими словами , или славянский загаженый русским. https://www.youtube.com/watch?v=Tf6mRLuq2hE  Так что такая опупея и в Си происходит. Как загадить (или очистить) язык Си(С++).

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

С русским то языком  как раз всё нормально )))