Некорректная работа условий ...
- Войдите на сайт для отправки комментариев
Пт, 24/07/2015 - 22:12
Необходимо обрабатывать условие при z и a равными 0,то есть просто по И, а обрабатывается по ИЛИ!!!!
В выводе отсутствуют целые десятки(!!!), то есть с одним 0. Пробовал и в скобки условия, и !=0 результат один ...
if ( z >= 1 && a >= 1){
Serial.println(q);
Serial.print(a);
Serial.println(z);
}
Впечатление, что компилер переколбашивает в с двумя вложенными условиями ...
if( 0==z && 0==a) илиif( !z && !a)Покажите весь скетч. И результат его работы
А можно и нетрадиционно подойти к задаче , долой штампы! :)
if (!(a|z)) {.....} // сработает если и a и z равны нулю
А можно и нетрадиционно подойти к задаче , долой штампы! :)
if (!(a|z)) {.....} // сработает если и a и z равны нулю
в #1 убрал текст "по ИЛИ обрабытываюся нолики , а по И - единички"
аха , if (!(a|z)) - короче :)
Все приведенный условия работают!!!
Всем большое спасибо!!!!
Последний вариант вообще убил!
ЗЫ только почему ТАК, как-то подвыподвертом??? Особенности "перевода" ардуинки???
Покажите весь скетч. И результат его работы
Пожалуйста ... Имею некий девайс, без документов. Девайс имеет 8 восьмисегментных индикатора, 4 кнопки и 5 индикаторров-диодов. Все это хозяйство управляется 4-мя проводами, не считая питания. Захотел "прикрутить" к паяльной станции. Не хочу выводить НОЛИКИ в старших сегментах. Вот теперь тренеруюсь!!! Код отладочный, так как весь функционал получаю экпериментально.
Да, девайс реализован на двух регистрах сдвига НС4094.
//Пин SH_CP int SH_CP = 12;//строб //Пин ST_CP int ST_CP = 11;//защелка //Пин DS int DS = 13;//данные //порт кнопок const int BtnPin =10; // int BtnStat = 0; long ButtMillis = 0; int value = 0; void MyShiftReg(int, int, int, int, int); //void ShiftReg(int, int); const int s[10] = { 3, 159, 37, 13, 153, 73, 65, 31, 1, 9};//символы без точки, с точкой const int r[8] = { 127, 191, 223, 239, 247, 251, 253, 255};//регистры const int b[4] = {239, 223, 191, 127};//кнопки const int l[5] ={127, 191, 223, 239, 247};//индикаторы режимов void setup() { Serial.begin(9600); // Настраиваем выходы SH_CP, ST_CP, DS pinMode(SH_CP, OUTPUT); pinMode(ST_CP, OUTPUT); pinMode(DS, OUTPUT); pinMode(BtnPin, INPUT); } void loop() { // Цикл обхода 16 светодиодов for (int d = 12; d < 16; d++) { for(int z = 0; z < 10; z++ ) { for(int y = 0; y < 10; y++ ) { for(int w = 0; w < 10; w++ ) { for(int x = 0; x < 10; x++ ) { MyShiftReg(z,y,w,x,d); MyShiftReg(z,y,w,x,d); MyShiftReg(z,y,w,x,d); } } } } // Запись в регистр // registerWrite(d, HIGH); // Задержка 0.5 с. delay(5); //обработка нажатия кнопок BtnStat = digitalRead (BtnPin); if(BtnStat == HIGH) { Serial.print("BtnStat"); Serial.println(BtnStat);// if (millis() - ButtMillis > 300) //{ // ButtMillis = millis(); value ++; //} } else { value = 0; } switch(value){ case 4: Serial.println("4");break; case 5: Serial.println("5");break; case 6: Serial.println("6");break; case 7: Serial.println("7");break; case 8: Serial.println("8");break; case 9: Serial.println("9");break; } //if(value >=5) //{ // Serial.print(value); //Serial.println ("Yes");//Button = !Button; // value = 0; // } } } // Метод для отсылки данных в регистры void registerWrite(int num, int state) { // Для хранения 16 битов используется unsigned int unsigned int bitsToSend = 0; // 0b000000000000000 // Инициализируем начало приема данных digitalWrite(ST_CP, LOW); // Устанавливаем 1 в соответствующий бит bitWrite(bitsToSend, num, state); // 16 бит необходимо разделить на два байта: // И записать каждый байт в соответствующий регистр byte register1 = r[num-12];//highByte(bitsToSend);номер сегмента byte register2 = s[num-7];//lowByte(bitsToSend); инфа сегмента // Последовательная передача данных на пин DS shiftOut(DS, SH_CP, MSBFIRST, register2); shiftOut(DS, SH_CP, MSBFIRST, register1); //Serial.println(register1); //Serial.println(register2); // Инициализируем окончание передачи данных. // Регистры подадут напряжение на указанные выходы digitalWrite(ST_CP, HIGH); } void MyShiftReg(int q, int a, int z, int e, int g) { int num = 0; if (q > 0 ) { ShiftReg(q,num);} num++; delay(8); if (!(q|a)){}else{ ShiftReg(a,num);} num++; delay(8); if (!(a|z|q)){ Serial.println(q); Serial.print(a); Serial.println(z); } else{ ShiftReg(z,num); } num++; delay(8); ShiftReg(e,num); delay(8); } void ShiftReg (int f, int t){ byte register11,register21; // Инициализируем начало приема данных digitalWrite(ST_CP, LOW); register11 = r[t];//highByte(bitsToSend);номер сегмента register21 = s[f];//lowByte(bitsToSend); инфа сегмента // Последовательная передача данных на пин DS shiftOut(DS, SH_CP, MSBFIRST, register21); shiftOut(DS, SH_CP, MSBFIRST, register11); // Инициализируем окончание передачи данных. // Регистры подадут напряжение на указанные выходы digitalWrite(ST_CP, HIGH); }только почему ТАК, как-то подвыподвертом???
с = /a * /b = /( a + b ) --->>> if ( !(a|b) )
http://schoolinfo3.ioso.ru/zakony.htm
в коде из #6 - почти все int можно заменить на byte
а строки 2, 4 , 6 , 8
intSH_CP = 12;//строб ---->>>> #defineSH_CP 12//строба строки 2, 4 , 6 , 8
intSH_CP = 12;//строб ---->>>> #defineSH_CP 12//стробСпасибо, причешу!!!
У меня засада ... Не могу отследить нажатие кнопок при цикле индикации ... Если "зажигаю" один регистр - нажатие кнопки отслеживается! А в цикле - нет ... Да, аппаратно кнопки с выходов регистра через диоды на вход. Может ошибаюсь и это не диоды маркировка A1t Вроде как сдвоенные диоды. В порт входа какой-то мусор валиться. Особенно, когда подносишь палец, как наводка.
ЗЫ На "железном" форуме нашел:"Все Atmelы не терпят крутых фронтов на входных линиях (разводка у них многослойная на кристалле). Поэтому все приходящие сигналы (особенно издалека и от быстрой логики) подаются через резистор (минимум 1 кОм) иначе будут вызываться прерывания, и запрещенные, и отсутствующие в программе". Вообщем, нужна "ПОДТЯЖКА"!!!
ЗЫЗЫ Нашел "подтяжку" !!!
Все Atmelы не терпят крутых фронтов на входных линиях (разводка у них многослойная на кристалле)
...все цЫфровые микросхемы ЛЮБЯТ-ОБОЖАЮТ фронты сигналов в 90 градусов !!!!!!!!
растянутый-пологий фронт - это горе :(
подтяжка пина - это из другой сказки :)