У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
Та я не за ТС, там помочник был, сильно помогающий. И помогай, на здоровье, сколько влезет. Ток когда критиковать начинаешь, понимай, что должен быть на порядок выше критикуемого, в обсуждаемом вопросе. ИМХО.
У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
Та я не за ТС, там помочник был, сильно помогающий. И помогай, на здоровье, сколько влезет. Ток когда критиковать начинаешь, понимай, что должен быть на порядок выше критикуемого, в обсуждаемом вопросе. ИМХО.
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);
}
}
}
}
Жду ответочку.
Пожалуйста проверьте. Пи-с-ать коменты и сомневаться могут все.
Луп может выполняться но код можно и не выполнять.
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
не поленился, собрал макет, ваш код не@[я не работает как надо! вам видео снять ?
Странно, куда-то наивный писатель пропал. Понял, что х-ю сморозил и на Радиста, не в тему наехал?
У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
Это оказывается "заразно" .. осторожней! :)
ЗАПОСТИЛ КОД исключительно развлечения для, не проверял, чисто логически, должен работать так, как задумал, раз уж макетка собрана может XDRIVER проверит, что там у РАДИСТА не так (или так) )))
А если кнопку делаем по человечески? Что имеем? (кутить так кутить)
Если нет конденсатора на кнопке всё таки небольшую задержку в 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
Доброго времени. В полночь как-то не клеилось с макеткой(то кот лазит по столу, родичи спят) кароч спалил я похоже 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");
}
Друзья я очень рад что вы помогаете новичкам. Это лучший форум с хорошими темами - они реально разжованы. Благодаря вашим постам, вопросам глупым и не очень и приведенным ответам с решениями даже полный нуб - я. Смог что-то написать.
Без небольшого троллинга - тему было не оживить. А тут - АГОНЬ!
/*
Скетч использует 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 );
позвольте поинтересоваться сутью строк 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. Вы уверены в том, что правильно понимаете, что там написано. Я имею в виду два варианта:
// Написано
( !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();
}
}
если включить все сообщения. Буду благодарен если подскажете где копать.
Так вот там же и копать - это то, о чём я писал в #75. Ставьте скобки, не ленитесь. Компилятор не уверен в том, что Вы написали то, что хотели, вот и подсказывает :)
«Все истинно верующие да разбивают яйца с того конца, с какого удобнее». Решение же вопроса, какой конец признать более удобным, по моему скромному суждению, должно быть предоставлено совести каждого или в крайнем случае власти верховного судьи империи.
«Все истинно верующие да разбивают яйца с того конца, с какого удобнее».
Так-то да, но есть некие соображения, которые в применении к простым типам данных носят скорее характер философский. Так что и "i=i+1" компилятор приведёт к тому же виду... Но Вы-то об этом знаете, конечно.
Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???
Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???
Избегать приёмов, в корректности которых нет уверенности. Какие могут быть варианты?
Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???
Избегать приёмов, в корректности которых нет уверенности. Какие могут быть варианты?
что за жизнь - ничему нельзя верить )))
надо переходить на ассемблерные вставки
Компилятор не оптимизирует неэквивалентными преобразованиями. Теоретически, конечно, в нём может быть ошибка, но если он такой глючный, то много чего "наоптимизировать" может. Но такие ошибки в компиляторах - большая редкость.
Все это напомнило мне ролик . Русский язык это русский загаженый славянскими словами , или славянский загаженый русским. https://www.youtube.com/watch?v=Tf6mRLuq2hE Так что такая опупея и в Си происходит. Как загадить (или очистить) язык Си(С++).
Странно, куда-то наивный писатель пропал. Понял, что х-ю сморозил и на Радиста, не в тему наехал?
У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
Та я не за ТС, там помочник был, сильно помогающий. И помогай, на здоровье, сколько влезет. Ток когда критиковать начинаешь, понимай, что должен быть на порядок выше критикуемого, в обсуждаемом вопросе. ИМХО.
У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
Та я не за ТС, там помочник был, сильно помогающий. И помогай, на здоровье, сколько влезет. Ток когда критиковать начинаешь, понимай, что должен быть на порядок выше критикуемого, в обсуждаемом вопросе. ИМХО.
я и говорю, что помошник и ТС одно лицо )))
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); } } } }Ну если я вскрою карты, то меня попросят вксрыть уже вскрытые карты. Так что я пас.
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
хотя мы до сих пор и сами не знаем как надо.
гоняет по кругу три светодиода по нажатию (схема от ТС), изначально все выключены.
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; }Странно, куда-то наивный писатель пропал. Понял, что х-ю сморозил и на Радиста, не в тему наехал?
У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
Странно, куда-то наивный писатель пропал. Понял, что х-ю сморозил и на Радиста, не в тему наехал?
У меня стойкое ощущение, что ТС "тихо сам с собою..." )))
ЗАПОСТИЛ КОД исключительно развлечения для, не проверял, чисто логически, должен работать так, как задумал, раз уж макетка собрана может 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 из-за дребезга, иногда сбоит.
чутка поправленый код от РАДИСТА, работает !
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 герц
интересно бы понять самую суть сбоя, подумал немного, похоже наводка 50 герц
это шутка была ? вы хоть смайлики ставьте :)
интересно бы понять самую суть сбоя, подумал немного, похоже наводка 50 герц
это шутка была ? вы хоть смайлики ставьте :)
да нее, чесслово - не понимаю природу сбоя
А если кнопку делаем по человечески? Что имеем? (кутить так кутить)
Если нет конденсатора на кнопке всё таки небольшую задержку в 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Если нет конденсатора на кнопке всё таки небольшую задержку в 26 строке придётся вводить видимо, тау до после второго всплеска сколько выходит?
клетка 150us
клетка 150us
можно крутнуть цикл, или delay(1) будет достаточно, в 26 строке, сразу после установки флага в 0
да можно все что угодно, хоть тригер на кнопку, мы чейто отошли от темы :)
где наш 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(); } } }ниже код не без излишеств
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, смотрю в онлайне, тока чет ниче не пишет нам :)
Уже пишу. Спасибо за участие. :)
позвольте поинтересоваться сутью строк 24 и 21 первого и второго скетча
Кончай крошить батон на усато-мурлыкастых!
Як що, так відразу кіт винен!
ниже код без излишеств
/* Скетч использует 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. Вы уверены в том, что правильно понимаете, что там написано. Я имею в виду два варианта:
Это ведь совсем разные коды!
2. Практически такой же вопрос по строке №26
и уменя еще один:
вы понимаете, что сносите значение всех битов в порте, кроме интересующего вас?
для локальной задачи прокатит. а куда переносить начнете...
че вы в дебри то лезите, то шифт на порт, то это ?
позвольте поинтересоваться сутью строк 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. Вы уверены в том, что правильно понимаете, что там написано. Я имею в виду два варианта:
Это ведь совсем разные коды!
2. Практически такой же вопрос по строке №26
По
1. действительно
if ( digitalRead(2) != HIGH ){ // так будет лучшепо 2
требует доработки. есть warning от компилятора -но работает. И да я осознаю что все пины кроме нужного перевожу в лоу
2 обдумал и исправил
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(); } }Кончай крошить батон на усато-мурлыкастых!
Як що, так відразу кіт винен!
Я не против котика, но когда этот прораб над "Джамшудами" везде где движняк, а особенно ночью - доставляет неудобства.
Но меня смущает сообщения компилятора
"26:26: warning: suggest parentheses around '-' "
если включить все сообщения. Буду благодарен если подскажете где копать.
Так вот там же и копать - это то, о чём я писал в #75. Ставьте скобки, не ленитесь. Компилятор не уверен в том, что Вы написали то, что хотели, вот и подсказывает :)
if ( digitalRead(2) != HIGH ){ // так будет лучшеif ( !digitalRead(2)){ }А так ещё лучше???
А так ещё лучше???
Возможно, но в плане читабельности кода, я бы предпочёл
А) полу-по-уму
Б) по-уму
Не правда ли, намного читабельнее?
Добъём темку:
Ну, как-то так. Направление правильное: читаться должны сутевые вещи по задаче, а не пины и стандартные функции.
А если пины не инвертованые то делаем так
И, кстати, ЕKate, диды завещали не "i++", а "++i". Хотя, на таких тривиальных типах данных компилятор сам разберется, как быстрее.
Так-то да, но есть некие соображения, которые в применении к простым типам данных носят скорее характер философский. Так что и "i=i+1" компилятор приведёт к тому же виду... Но Вы-то об этом знаете, конечно.
Это всё конечно хорошо, но если в функции 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; } }А так ещё лучше???
Возможно, но в плане читабельности кода, я бы предпочёл
А) полу-по-уму
Б) по-уму
Не правда ли, намного читабельнее?
правда, но не люблю много букв, мне и АТС панасоник из-за это больше нравится нежели нортел (LG) (в программировании)
Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???
Избегать приёмов, в корректности которых нет уверенности. Какие могут быть варианты?
Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???
Избегать приёмов, в корректности которых нет уверенности. Какие могут быть варианты?
что за жизнь - ничему нельзя верить )))
надо переходить на ассемблерные вставки
если компилятор её соптимизирует
Компилятор не оптимизирует неэквивалентными преобразованиями. Теоретически, конечно, в нём может быть ошибка, но если он такой глючный, то много чего "наоптимизировать" может. Но такие ошибки в компиляторах - большая редкость.
То-есть, он как Мюллер, ему верить можно )))
Возможно, но в плане читабельности кода, я бы предпочёл
А) полу-по-уму
Б) по-уму
Раиса Абельская: «Вот вам любовь-морковь – не хочете, не ешьте»
Все это напомнило мне ролик . Русский язык это русский загаженый славянскими словами , или славянский загаженый русским. https://www.youtube.com/watch?v=Tf6mRLuq2hE Так что такая опупея и в Си происходит. Как загадить (или очистить) язык Си(С++).
С русским то языком как раз всё нормально )))