У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
Та я не за ТС, там помочник был, сильно помогающий. И помогай, на здоровье, сколько влезет. Ток когда критиковать начинаешь, понимай, что должен быть на порядок выше критикуемого, в обсуждаемом вопросе. ИМХО.
У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
Та я не за ТС, там помочник был, сильно помогающий. И помогай, на здоровье, сколько влезет. Ток когда критиковать начинаешь, понимай, что должен быть на порядок выше критикуемого, в обсуждаемом вопросе. ИМХО.
Странно, куда-то наивный писатель пропал. Понял, что х-ю сморозил и на Радиста, не в тему наехал?
У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
Это оказывается "заразно" .. осторожней! :)
ЗАПОСТИЛ КОД исключительно развлечения для, не проверял, чисто логически, должен работать так, как задумал, раз уж макетка собрана может XDRIVER проверит, что там у РАДИСТА не так (или так) )))
А если кнопку делаем по человечески? Что имеем? (кутить так кутить)
Если нет конденсатора на кнопке всё таки небольшую задержку в 26 строке придётся вводить видимо
bytei = 7; // в счетчике +1 номер пина с светодиодом
02
longptime = 0; // типа софт таймер
03
byteoO = 0; // для засылки в порт
04
05
voidsetup() {
06
Serial.begin(9600);
07
pinMode(11, OUTPUT);
08
pinMode(10, OUTPUT);
09
pinMode(9, OUTPUT);
10
pinMode(2, INPUT);
11
}
12
13
voidloop(){
14
15
if(i>=11 ) { // если счетчик шкалит то прыгаем на первый светодиод
16
i=8;
17
}
18
while( !(digitalRead(2)) ){ // ждем нажатия
19
Serial.println("butt0n");
20
if(digitalRead(2) == LOW){
21
if(millis() - ptime > 350){
22
i ++; // как завещали деды( так быстрее ) не !ленимся
23
Serial.println("Knock!");
24
PORTB = (1 << i - 8 ); // проталкиваю 1 на пины по портуБ
25
ptime = millis();
26
}
27
}
28
}
29
Serial.println("Knock!loop");
30
}
Друзья я очень рад что вы помогаете новичкам. Это лучший форум с хорошими темами - они реально разжованы. Благодаря вашим постам, вопросам глупым и не очень и приведенным ответам с решениями даже полный нуб - я. Смог что-то написать.
Без небольшого троллинга - тему было не оживить. А тут - АГОНЬ!
позвольте поинтересоваться сутью строк 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 '-' "
если включить все сообщения. Буду благодарен если подскажете где копать.
если включить все сообщения. Буду благодарен если подскажете где копать.
Так вот там же и копать - это то, о чём я писал в #75. Ставьте скобки, не ленитесь. Компилятор не уверен в том, что Вы написали то, что хотели, вот и подсказывает :)
«Все истинно верующие да разбивают яйца с того конца, с какого удобнее». Решение же вопроса, какой конец признать более удобным, по моему скромному суждению, должно быть предоставлено совести каждого или в крайнем случае власти верховного судьи империи.
«Все истинно верующие да разбивают яйца с того конца, с какого удобнее».
Так-то да, но есть некие соображения, которые в применении к простым типам данных носят скорее характер философский. Так что и "i=i+1" компилятор приведёт к тому же виду... Но Вы-то об этом знаете, конечно.
Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???
Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???
Избегать приёмов, в корректности которых нет уверенности. Какие могут быть варианты?
Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???
Избегать приёмов, в корректности которых нет уверенности. Какие могут быть варианты?
что за жизнь - ничему нельзя верить )))
надо переходить на ассемблерные вставки
Компилятор не оптимизирует неэквивалентными преобразованиями. Теоретически, конечно, в нём может быть ошибка, но если он такой глючный, то много чего "наоптимизировать" может. Но такие ошибки в компиляторах - большая редкость.
Все это напомнило мне ролик . Русский язык это русский загаженый славянскими словами , или славянский загаженый русским. https://www.youtube.com/watch?v=Tf6mRLuq2hE Так что такая опупея и в Си происходит. Как загадить (или очистить) язык Си(С++).
Странно, куда-то наивный писатель пропал. Понял, что х-ю сморозил и на Радиста, не в тему наехал?
У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
Та я не за ТС, там помочник был, сильно помогающий. И помогай, на здоровье, сколько влезет. Ток когда критиковать начинаешь, понимай, что должен быть на порядок выше критикуемого, в обсуждаемом вопросе. ИМХО.
У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
Та я не за ТС, там помочник был, сильно помогающий. И помогай, на здоровье, сколько влезет. Ток когда критиковать начинаешь, понимай, что должен быть на порядок выше критикуемого, в обсуждаемом вопросе. ИМХО.
я и говорю, что помошник и ТС одно лицо )))
01
byte
i = 7;
// в счетчике +1 номер пина с светодиодом
02
long
ptime = 0;
// типа софт таймер
03
byte
o = 0b111;
// мусор для засылки в порт
04
05
void
setup
() {
06
07
pinMode(10, OUTPUT);
08
pinMode(9, OUTPUT);
09
pinMode(8, OUTPUT);
10
pinMode(2, INPUT);
11
}
12
13
void
loop
(){
14
15
if
(i>=10 ) { / если счетчик шкалит то прыгаем на первый светодиод
16
i=7;
17
}
18
while
( !(digitalRead(2)) ){
19
digitalWrite(i, LOW);
// очевидно - выкл. св.диод
20
if
(digitalRead(2) == LOW){
// ждем нажатия
21
22
if
(millis() - ptime > 250){
23
i ++;
24
shiftOut(i, 2, MSBFIRST, ( o >> 2));
// знаю. просто это работает
25
ptime = millis();
26
delay(500);
27
}
28
}
29
}
30
}
Ну если я вскрою карты, то меня попросят вксрыть уже вскрытые карты. Так что я пас.
01
byte
i = 7;
// в счетчике +1 номер пина с светодиодом
02
long
ptime = 0;
// типа софт таймер
03
byte
o = 0b111;
// мусор для засылки в порт
04
05
void
setup
() {
06
07
pinMode(10, OUTPUT);
08
pinMode(9, OUTPUT);
09
pinMode(8, OUTPUT);
10
pinMode(2, INPUT);
11
}
12
13
void
loop
(){
14
15
if
(i>=10 ) { / если счетчик шкалит то прыгаем на первый светодиод
16
i=7;
17
}
18
while
( !(digitalRead(2)) ){
19
digitalWrite(i, LOW);
// очевидно - выкл. св.диод
20
if
(digitalRead(2) == LOW){
// ждем нажатия
21
22
if
(millis() - ptime > 250){
23
i ++;
24
shiftOut(i, 2, MSBFIRST, ( o >> 2));
// знаю. просто это работает
25
ptime = millis();
26
delay(500);
27
}
28
}
29
}
30
}
по задумке ТС активный уровень на кнопке высокий или нет ?
1 - ваш код не компилируется (из за банальной небрежности)
2 - ваш код будет работать неверно, в какой то момент последний светодиод не погаснет
3 - "знаю. просто это работает" не канает! что делает эта строка? порт для синхронизации shiftOut должен быть выходом.
add
не поленился, собрал макет, ваш код не@[я не работает как надо! вам видео снять ?
add
хотя мы до сих пор и сами не знаем как надо.
гоняет по кругу три светодиода по нажатию (схема от ТС), изначально все выключены.
01
uint8_t BUTTON = 2;
// кнопка
02
uint8_t state = 0;
03
uint8_t idx;
04
05
#define LED_COUNT 3
06
uint8_t LED_ARRRAY[LED_COUNT] = {
07
8,
// певый светодиод
08
9,
// второй светодиод
09
10
// третий светодиод
10
};
11
12
void
setup
() {
13
for
(idx = 0; idx < LED_COUNT; idx++)
14
{
15
pinMode(LED_ARRRAY[idx], OUTPUT);
16
}
17
pinMode(BUTTON, INPUT);
18
}
19
20
void
loop
() {
21
if
(digitalRead(BUTTON) && !state) {
22
state = !state;
23
digitalWrite(LED_ARRRAY[idx], LOW);
24
if
(++idx >= LED_COUNT) idx = 0;
25
digitalWrite(LED_ARRRAY[idx], HIGH);
26
}
27
delay(30);
28
if
(!digitalRead(BUTTON) && state) state = !state;
29
}
Странно, куда-то наивный писатель пропал. Понял, что х-ю сморозил и на Радиста, не в тему наехал?
У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
Странно, куда-то наивный писатель пропал. Понял, что х-ю сморозил и на Радиста, не в тему наехал?
У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
ЗАПОСТИЛ КОД исключительно развлечения для, не проверял, чисто логически, должен работать так, как задумал, раз уж макетка собрана может XDRIVER проверит, что там у РАДИСТА не так (или так) )))
чутка поправленый код от РАДИСТА, работает !
01
int
button = 2;
// кнопка
02
int
led1 = 8;
// первый светодиод
03
int
led2 = 9;
// второй светодиод
04
int
led3 = 10;
// третий светодиод
05
06
byte
i = 0;
// счетчик
07
byte
f_b = 0;
// флаг нажатия кнопки
08
09
void
setup
() {
10
pinMode(led1, OUTPUT);
11
pinMode(led2, OUTPUT);
12
pinMode(led3, OUTPUT);
13
pinMode(button, INPUT);
14
}
15
16
void
loop
() {
17
if
(digitalRead(button) == HIGH && f_b == 0) {
18
f_b = 1;
19
digitalWrite(i + 7, LOW);
20
i++;
21
if
(i > 3) {
22
i = 1;
23
}
24
digitalWrite(i + 7, HIGH);
25
}
26
delay(30);
27
if
(digitalRead(button) == LOW && f_b == 1) {
28
f_b = 0;
29
}
30
}
без строки 26 из-за дребезга, иногда сбоит.
чутка поправленый код от РАДИСТА, работает !
01
int
button = 2;
// кнопка
02
int
led1 = 8;
// первый светодиод
03
int
led2 = 9;
// второй светодиод
04
int
led3 = 10;
// третий светодиод
05
06
byte
i = 0;
// счетчик
07
byte
f_b = 0;
// флаг нажатия кнопки
08
09
void
setup
() {
10
pinMode(led1, OUTPUT);
11
pinMode(led2, OUTPUT);
12
pinMode(led3, OUTPUT);
13
pinMode(button, INPUT);
14
}
15
16
void
loop
() {
17
if
(digitalRead(button) == HIGH && f_b == 0) {
18
f_b = 1;
19
digitalWrite(i + 7, LOW);
20
i++;
21
if
(i > 3) {
22
i = 1;
23
}
24
digitalWrite(i + 7, HIGH);
25
}
26
delay(30);
27
if
(digitalRead(button) == LOW && f_b == 1) {
28
f_b = 0;
29
}
30
}
без строки 26 из-за дребезга, иногда сбоит.
интересно бы понять самую суть сбоя, подумал немного, похоже наводка 50 герц
интересно бы понять самую суть сбоя, подумал немного, похоже наводка 50 герц
это шутка была ? вы хоть смайлики ставьте :)
интересно бы понять самую суть сбоя, подумал немного, похоже наводка 50 герц
это шутка была ? вы хоть смайлики ставьте :)
да нее, чесслово - не понимаю природу сбоя
А если кнопку делаем по человечески? Что имеем? (кутить так кутить)
Если нет конденсатора на кнопке всё таки небольшую задержку в 26 строке придётся вводить видимо
01
int
button = 2;
// кнопка
02
int
led1 = 8;
// первый светодиод
03
int
led2 = 9;
// второй светодиод
04
int
led3 = 10;
// третий светодиод
05
06
byte
i = 0;
// счетчик
07
byte
f_b = 0;
// флаг нажатия кнопки
08
09
void
setup
() {
10
pinMode(led1, OUTPUT);
11
pinMode(led2, OUTPUT);
12
pinMode(led3, OUTPUT);
13
pinMode(button, INPUT_PULLUP);
14
}
15
16
void
loop
(){
17
if
(digitalRead(button) == LOW && f_b == 0) {
18
f_b=1; delay(1);
19
digitalWrite(i+7, LOW);
20
i++;
21
if
(i>3) {i=1;}
22
digitalWrite(i+7, HIGH);
23
}
24
if
(digitalRead(button) == HIGH && f_b == 1) {
25
f_b=0; delay(1);
26
}
27
}
//END
Если нет конденсатора на кнопке всё таки небольшую задержку в 26 строке придётся вводить видимо, тау до после второго всплеска сколько выходит?
клетка 150us
клетка 150us
можно крутнуть цикл, или delay(1) будет достаточно, в 26 строке, сразу после установки флага в 0
да можно все что угодно, хоть тригер на кнопку, мы чейто отошли от темы :)
где наш EKate, смотрю в онлайне, тока чет ниче не пишет нам :)
01
/*
02
Скетч использует 998 байт (3%) памяти устройства. Всего доступно 32256 байт.
03
Глобальные переменные используют 15 байт (0%) динамической памяти, оставляя 2033 байт для локальных переменных. Максимум: 2048 байт.
04
*/
05
06
byte
i = 7;
// в счетчике +1 номер пина с светодиодом
07
long
ptime = 0;
// типа софт таймер
08
byte
oO = 0;
// для засылки в порт
09
10
void
setup
() {
11
12
pinMode(11, OUTPUT);
13
pinMode(10, OUTPUT);
14
pinMode(9, OUTPUT);
15
pinMode(2, INPUT);
16
}
17
18
void
loop
(){
19
20
if
(i>=11 ) {
// если счетчик шкалит то прыгаем на первый светодиод
21
i=8;
22
}
23
if
( !digitalRead(2) == HIGH ){
// ждем нажатия
24
if
( ( millis() - ptime ) > 350 ){
25
i ++;
// как завещали деды( так быстрее ) не !ленимся
26
PORTB = ( 1 << i - 8 );
// проталкиваю 1 на пины по портуБ
27
ptime = millis();
28
}
29
}
30
}
ниже код не без излишеств
01
byte
i = 7;
// в счетчике +1 номер пина с светодиодом
02
long
ptime = 0;
// типа софт таймер
03
byte
oO = 0;
// для засылки в порт
04
05
void
setup
() {
06
Serial
.begin(9600);
07
pinMode(11, OUTPUT);
08
pinMode(10, OUTPUT);
09
pinMode(9, OUTPUT);
10
pinMode(2, INPUT);
11
}
12
13
void
loop
(){
14
15
if
(i>=11 ) {
// если счетчик шкалит то прыгаем на первый светодиод
16
i=8;
17
}
18
while
( !(digitalRead(2)) ){
// ждем нажатия
19
Serial
.println(
"butt0n"
);
20
if
(digitalRead(2) == LOW){
21
if
(millis() - ptime > 350){
22
i ++;
// как завещали деды( так быстрее ) не !ленимся
23
Serial
.println(
"Knock!"
);
24
PORTB = (1 << i - 8 );
// проталкиваю 1 на пины по портуБ
25
ptime = millis();
26
}
27
}
28
}
29
Serial
.println(
"Knock!loop"
);
30
}
да можно все что угодно, хоть тригер на кнопку, мы чейто отошли от темы :)
где наш EKate, смотрю в онлайне, тока чет ниче не пишет нам :)
Уже пишу. Спасибо за участие. :)
позвольте поинтересоваться сутью строк 24 и 21 первого и второго скетча
Кончай крошить батон на усато-мурлыкастых!
Як що, так відразу кіт винен!
ниже код без излишеств
01
/*
02
Скетч использует 998 байт (3%) памяти устройства. Всего доступно 32256 байт.
03
Глобальные переменные используют 15 байт (0%) динамической памяти, оставляя 2033 байт для локальных переменных. Максимум: 2048 байт.
04
*/
05
06
byte
i = 7;
// в счетчике +1 номер пина с светодиодом
07
long
ptime = 0;
// типа софт таймер
08
byte
oO = 0;
// для засылки в порт
09
10
void
setup
() {
11
12
pinMode(11, OUTPUT);
13
pinMode(10, OUTPUT);
14
pinMode(9, OUTPUT);
15
pinMode(2, INPUT);
16
}
17
18
void
loop
(){
19
20
if
(i>=11 ) {
// если счетчик шкалит то прыгаем на первый светодиод
21
i=8;
22
}
23
if
( !digitalRead(2) == HIGH ){
// ждем нажатия
24
if
( ( millis() - ptime ) > 350 ){
25
i ++;
// как завещали деды( так быстрее ) не !ленимся
26
PORTB = ( 1 << i - 8 );
// проталкиваю 1 на пины по портуБ
27
ptime = millis();
28
}
29
}
30
}
Пара скромных вопросов:
1. Строка №23. Вы уверены в том, что правильно понимаете, что там написано. Я имею в виду два варианта:
1
// Написано
2
( !digitalRead(2) == HIGH )
3
4
// Вариант 1
5
( ! (digitalRead(2) == HIGH) )
6
7
// Вариант 2
8
( (! digitalRead(2)) == HIGH )
Это ведь совсем разные коды!
2. Практически такой же вопрос по строке №26
1
// Написано
2
PORTB = ( 1 << i - 8 );
3
4
// Вариант 1
5
PORTB = (1 << i) - 8;
6
7
// Вариант 2
8
PORTB = 1 << (i - 8 );
и уменя еще один:
1
PORTB = ( 1 << i - 8 );
вы понимаете, что сносите значение всех битов в порте, кроме интересующего вас?
для локальной задачи прокатит. а куда переносить начнете...
че вы в дебри то лезите, то шифт на порт, то это ?
позвольте поинтересоваться сутью строк 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 '-' "
если включить все сообщения. Буду благодарен если подскажете где копать.
Пара скромных вопросов:
1. Строка №23. Вы уверены в том, что правильно понимаете, что там написано. Я имею в виду два варианта:
1
// Написано
2
( !digitalRead(2) == HIGH )
3
4
// Вариант 1
5
( ! (digitalRead(2) == HIGH) )
6
7
// Вариант 2
8
( (! digitalRead(2)) == HIGH )
Это ведь совсем разные коды!
2. Практически такой же вопрос по строке №26
1
// Написано
2
PORTB = ( 1 << i - 8 );
3
4
// Вариант 1
5
PORTB = (1 << i) - 8;
6
7
// Вариант 2
8
PORTB = 1 << (i - 8 );
По
1. действительно
1
if
( digitalRead(2) != HIGH ){
// так будет лучше
по 2
требует доработки. есть warning от компилятора -но работает. И да я осознаю что все пины кроме нужного перевожу в лоу
2 обдумал и исправил
1
// Вариант 2
2
PORTB = 1 << (i - 8 );
01
byte
i = 7;
// в счетчике +1 номер пина с светодиодом
02
static
long
ptime = 0;
// типа софт таймер
03
04
void
setup
() {
05
pinMode(11, OUTPUT);
06
pinMode(10, OUTPUT);
07
pinMode(9, OUTPUT);
08
pinMode(2, INPUT);
09
}
10
11
void
loop
(){
12
if
(i>=11 ) {
// если счетчик шкалит то прыгаем на первый светодиод
13
i=8;
14
}
15
if
( (digitalRead(2) != HIGH ) && (( millis() - ptime ) > 350 ) ){
// ждем нажатия
16
i ++;
// ( так быстрее ) не !ленимся
17
PORTB = 1 << ( i - 7 );
// зажигаю по одному за раз пишу 1 на пин по портуБ
18
ptime = millis();
19
}
20
}
Кончай крошить батон на усато-мурлыкастых!
Як що, так відразу кіт винен!
Я не против котика, но когда этот прораб над "Джамшудами" везде где движняк, а особенно ночью - доставляет неудобства.
Но меня смущает сообщения компилятора
"26:26: warning: suggest parentheses around '-' "
если включить все сообщения. Буду благодарен если подскажете где копать.
Так вот там же и копать - это то, о чём я писал в #75. Ставьте скобки, не ленитесь. Компилятор не уверен в том, что Вы написали то, что хотели, вот и подсказывает :)
1
if
( digitalRead(2) != HIGH ){
// так будет лучше
1
if
( !digitalRead(2)){ }
А так ещё лучше???
А так ещё лучше???
Возможно, но в плане читабельности кода, я бы предпочёл
А) полу-по-уму
1
#define IsLOW(pin) (!digitalRead(pin))
2
#define IsHIGH(pin) (digitalRead(pin)==HIGH)
Б) по-уму
1
#define IsButtonPressed(pin) (!digitalRead(pin))
2
#define IsButtonReleased(pin) (digitalRead(pin)==HIGH)
Не правда ли, намного читабельнее?
Добъём темку:
01
#define INVERTED_BUTTONS
02
03
#ifdef INVERTED_BUTTONS
04
#define BUTTON_ON HIGH
05
#define BUTTON_OFF LOW
06
#else
07
#define BUTTON_ON LOW
08
#define BUTTON_OFF HIGH
09
#endif
10
11
#define IsButtonPressed(pin) (BUTTON_ON == digitalRead(pin))
12
#define IsButtonReleased(pin) (BUTTON_OFF == digitalRead(pin))
Ну, как-то так. Направление правильное: читаться должны сутевые вещи по задаче, а не пины и стандартные функции.
А если пины не инвертованые то делаем так
01
//#define INVERTED_BUTTONS
02
03
#ifdef INVERTED_BUTTONS
04
#define BUTTON_ON HIGH
05
#define BUTTON_OFF LOW
06
#else
07
#define BUTTON_ON LOW
08
#define BUTTON_OFF HIGH
09
#endif
10
11
#define IsButtonPressed(pin) (BUTTON_ON == digitalRead(pin))
12
#define IsButtonReleased(pin) (BUTTON_OFF == digitalRead(pin))
И, кстати, ЕKate, диды завещали не "i++", а "++i". Хотя, на таких тривиальных типах данных компилятор сам разберется, как быстрее.
Так-то да, но есть некие соображения, которые в применении к простым типам данных носят скорее характер философский. Так что и "i=i+1" компилятор приведёт к тому же виду... Но Вы-то об этом знаете, конечно.
Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???
01
/*******************ПИЩАЛКА ********************/
02
void
start_Buzzer(){
03
pinMode(PIN_ZUM,OUTPUT);
04
attachInterrupt(1, Buzzer, RISING );
05
analogWrite(pinINT1,0x80);
06
}
07
08
void
end_Buzzer(){
09
detachInterrupt(1);
10
digitalWrite(PIN_ZUM,LOW);
11
}
12
13
void
Buzzer(
void
){
14
static
int
i=490/zFreq;
15
if
(!i--)
16
{
17
digitalWrite(PIN_ZUM, ! digitalRead(PIN_ZUM));
18
i=490/zFreq;
19
}
20
}
А так ещё лучше???
Возможно, но в плане читабельности кода, я бы предпочёл
А) полу-по-уму
1
#define IsLOW(pin) (!digitalRead(pin))
2
#define IsHIGH(pin) (digitalRead(pin)==HIGH)
Б) по-уму
1
#define IsButtonPressed(pin) (!digitalRead(pin))
2
#define IsButtonReleased(pin) (digitalRead(pin)==HIGH)
Не правда ли, намного читабельнее?
правда, но не люблю много букв, мне и АТС панасоник из-за это больше нравится нежели нортел (LG) (в программировании)
Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???
Избегать приёмов, в корректности которых нет уверенности. Какие могут быть варианты?
Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???
Избегать приёмов, в корректности которых нет уверенности. Какие могут быть варианты?
что за жизнь - ничему нельзя верить )))
надо переходить на ассемблерные вставки
если компилятор её соптимизирует
Компилятор не оптимизирует неэквивалентными преобразованиями. Теоретически, конечно, в нём может быть ошибка, но если он такой глючный, то много чего "наоптимизировать" может. Но такие ошибки в компиляторах - большая редкость.
То-есть, он как Мюллер, ему верить можно )))
Возможно, но в плане читабельности кода, я бы предпочёл
А) полу-по-уму
1
#define IsHIGH(pin) (digitalRead(pin)==HIGH)
Б) по-уму
1
#define IsButtonReleased(pin) (digitalRead(pin)==HIGH)
Раиса Абельская: «Вот вам любовь-морковь – не хочете, не ешьте»
Все это напомнило мне ролик . Русский язык это русский загаженый славянскими словами , или славянский загаженый русским. https://www.youtube.com/watch?v=Tf6mRLuq2hE Так что такая опупея и в Си происходит. Как загадить (или очистить) язык Си(С++).
С русским то языком как раз всё нормально )))