Xscs проблема настройки
- Войдите на сайт для отправки комментариев
Пнд, 24/09/2012 - 00:03
сделал часы http://arduino.ru/forum/apparatnye-voprosy/led-2-tsifry-8-kontaktov-prik...
если код в начальном виде все нормально как только добавляю переменную все сбивается и начинается отсчет после 60 в минутах.
unsigned long time; int latchPin = 10;//Пин подключен к ST_CP входу 74HC595 int clockPin = 6;//Пин подключен к SH_CP входу 74HC595 int dataPin = 7;//Пин подключен к DS входу 74HC595 int dir = 1; ;// задержка int led1 = 8; int led2 = 9; //мин int led3 =11; int led4 =12; //часы int led5 = 4; //сек int led6 = 5; //сек int min1=59; // настройка минут int cas2 = 23; //настройка часов boolean catod = 0; void setup() { //устанавливаем режим OUTPUT pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); Serial.begin(9600); } byte mask[10] = { B11010111, //0 B00010001,//1 B01100111,//2 B01110101,//3 B10110001,//4 B11110100,//5 B11110110,//6 B01010001,//7 B11110111,//8 B11110101//9 /* B11111001, // 0 B01100000, // 1 B10101011, // 2 B01101011, // 3 B01110010, // 4 B01011011, // 5 B11011011, // 6 B01101000, // 7 B11111011, // 8 B01111011 // 9 */ }; byte maskSek[10] = { B11111001, // 0 B01100000, // 1 B10101011, // 2 B01101011, // 3 B01110010, // 4 B01011011, // 5 B11011011, // 6 B01101000, // 7 B11111011, // 8 B01111011 // 9 }; void loop() { time = millis(); int sek = time/1000; int minyt = (time/1000)/60; int cas = (minyt/60); int minyt2 = minyt; if(cas>0) minyt2 =(minyt-60*cas); if((time/1000)>60) sek =(sek-60*minyt); // настройка времени Serial.print(cas); Serial.print("c."); Serial.print(minyt2); Serial.print("m:"); Serial.print(sek); Serial.println("s:"); // точка digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, B00001000); // передаем последовательно на dataPin digitalWrite(latchPin, HIGH); //"защелкиваем" регистр digitalWrite(led3, 1); delay(dir); // пауза перед следующей итерацией digitalWrite(led3, 0); // ждет секунду, перед следующей итерацией цикла. // минуты digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, mask[(minyt2)/10]); // целые digitalWrite(latchPin, HIGH); //"защелкиваем" регистр digitalWrite(led2, 1); delay(dir);// пауза перед следующей итерацией digitalWrite(led2, 0); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, mask[(minyt2)%10]); // десятые digitalWrite(latchPin, HIGH); //"защелкиваем" регистр digitalWrite(led1, 1); delay(dir); // пауза перед следующей итерацией digitalWrite(led1, 0); /////////// // часы digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, mask[(cas)%10]); // передаем последовательно на dataPin digitalWrite(latchPin, HIGH); //"защелкиваем" регистр digitalWrite(led3, 1); delay(dir); // пауза перед следующей итерацией digitalWrite(led3, 0); // digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, mask[(cas)/10]); // передаем последовательно на dataPin digitalWrite(latchPin, HIGH); //"защелкиваем" регистр digitalWrite(led4, 1); delay(dir); // пауза перед следующей итерацией digitalWrite(led4, 0); // второй экран секунды digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, maskSek[sek/10]); // передаем последовательно на dataPin digitalWrite(latchPin, HIGH); //"защелкиваем" регистр digitalWrite(led6, 1); delay(dir);// пауза перед следующей итерацией digitalWrite(led6, 0); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, maskSek[sek%10]); // передаем последовательно на dataPin digitalWrite(latchPin, HIGH); //"защелкиваем" регистр digitalWrite(led5, 1); delay(dir); // пауза перед следующей итерацией digitalWrite(led5, 0); }
не могу вставить переменные чтоб можно было настраивать часы
Для начала по коду, что бы не плодить одни и теже куски кода, нужно создать функцию, которая выводит цыфру на дисплей.
Единственная глобальная переменная у вас это time, вот к ней и можно плюсовать настройку.
не понял. с минутами разобрался счас мучаю часы чтоб после 23 в 0 уходили
вроде все работает
осталось узнать какое отставание или опережение с точными часами и внести поправки
Смотрите сообщение #2, я его подредактировал.
86 строкой добавить if(cas > 23) cas =cas-24; чтоб после 23 шло не 24 а 0. код у вас пограмотней написан и занимает на 200кб меньше а так оба работают нормально.
может разжуете - unsigned long time, time_setup; ??
и воид loop после точки буду благодарен!!!
В 20 строке расчитываются миллисекунды time_setup изходя из min1 и cas2, и плюсуется к глобальной переменной time.
а так объявляются переменные одного типа, то есть так тоже самое:
я имею ввиду в самом верху. первая строка.
а и вроде и остальное понял. кроме 114 и 116
я имею ввиду в самом верху. первая строка.
unsigned long time, time_setup;
а так объявляются переменные одного типа, то есть так тоже самое:
unsigned long time;
unsigned long time_setup;
а и вроде и остальное понял. кроме 114 и 116
Функции