Опытный кот |
 |
Карма: 11
Рейтинг сообщений: 506
Зарегистрирован: Пн сен 28, 2015 10:55:00 Сообщений: 846 Откуда: МО
Рейтинг сообщения: 0
|
Всем добра ! Случайно попались задёшево два прекрасных отечественных индикатора КИПВ72А. Зачесали руки собрать на них часы, аж кушать не могу  В Рунете готовых проектов не нашлось  Нашлось "там" , но с одним индикатором, а очень хочется на двух, чтобы с секундами, будильником, о термометре даже не мечтаю Собрал по проекту, Adruino PRO Mini . Фотка моего опытного изделия во вложении. Потом сделаю на отдельной плате всё красиво.  Уважаемые Коты, на сколько сложно доработать программу этого проекта? Я сам в Adruuno ноль, осваивать уже поздно  Может кто возьмётся переделать за разумную денежку под мои "хотелки" ? ссылка на проект "там" https://hackaday.io/project/163215-retr ... bug-matrixскетч Спойлер//***HDSP 2000 clock code by Patrick Hickey ph@weeblackbox.com and David Miller //***HDSP-2000 driver code written by Paul Huinink phuinink@gmail.com //***requires UDN2981 or equivalent source drivers to drive columns //***based on 2pcs 4 digit HDSP2000 or HDSP2450 displays; can be adapted to display text, or more displays //***updated 12-2018 to have 2 mode/setting buttons //***adapted 01-2019 for 4 digit dead bug style circuit - does not display seconds, no colon separators
#include <Wire.h> #include <Time.h> DS1307RTC;
int button1 = 10; // use a 10K pullup resistor int button2 = A1; int currentdigit = 0;
int column[] = { 6, 5, 4, 3, 2}; int data = 8; int myclock =7; int snelheid = 0;
String myString1; int delayValue = 3;
byte mode = 0; //Mode for time and date setting byte flash = 0; //Flag for display flashing - toggle once per update interval int tempset; //Temporary variable for setting time/date int framecount2 = 0; //Counter for number of display update periods int buttonState = 0; // variable for reading the pushbutton status char ch1 ; char ch2 ; char ch3 ; char ch4 ; char ch5 ; char ch6 ; char ch7 ; char ch8 ;
struct CharMap {
char c; int v1; byte b1; byte b2; byte b3; byte b4; byte b5;
}; const int cmap_len = 95;
struct CharMap cmap[] = { {' ',32,0x00, 0x00, 0x00, 0x00, 0x00}, {'!',33,0x00, 0x00, 0xF2, 0x00, 0x00}, //{''),34,0x00, 0xE0, 0x00, 0xE0, 0x00}, {'#',35,0x28, 0xFE, 0x28, 0xFE, 0x28}, {'$',36,0x24, 0x54, 0xFE, 0x54, 0x48}, {'%',37,0xC4, 0xC8, 0x10, 0x26, 0x46}, {'&',39,0x6C, 0x92, 0xAA, 0x44, 0x0A}, //{''',39,0x00, 0xA0, 0xC0, 0x00, 0x00}, //removed as confuses arduino IDE {'(',40,0x00, 0x38, 0x44, 0x82, 0x00}, {')',41,0x00, 0x82, 0x44, 0x38, 0x00}, {'*',42,0x28, 0x10, 0x7C, 0x10, 0x28}, {'+',43,0x10, 0x10, 0x7C, 0x10, 0x10}, {',',44,0x00, 0x0A, 0x0C, 0x00, 0x00}, {'-',45,0x10, 0x10, 0x10, 0x10, 0x10}, {'.',46,0x00, 0x06, 0x06, 0x00, 0x00}, //{'/'),47,0x04, 0x08, 0x10, 0x20, 0x40}, //removed as confuses arduino IDE {'0',48,0x7C, 0x8A, 0x92, 0xA2, 0x7C}, {'1',49,0x00, 0x42, 0xFE, 0x02, 0x00}, {'2',50,0x42, 0x86, 0x8A, 0x92, 0x62}, {'3',51,0x84, 0x82, 0xA2, 0xD2, 0x8C}, {'4',52,0x18, 0x28, 0x48, 0xFE, 0x08}, {'5',53,0xE4, 0xA2, 0xA2, 0xA2, 0x9C}, {'6',54,0x3C, 0x52, 0x92, 0x92, 0x0C}, {'7',55,0x80, 0x8E, 0x90, 0xA0, 0xC0}, {'8',56,0x6C, 0x92, 0x92, 0x92, 0x6C}, {'9',57,0x60, 0x92, 0x92, 0x94, 0x78}, {':',58,0x00, 0x00, 0x10, 0x00, 0x00}, {';',59,0x00, 0x6A, 0x6C, 0x00, 0x00}, {'<',60,0x10, 0x28, 0x44, 0x82, 0x00}, {'=',61,0x28, 0x28, 0x28, 0x28, 0x28}, {'>',62,0x00, 0x82, 0x44, 0x28, 0x10}, {'?',63,0x40, 0x80, 0x8A, 0x90, 0x60}, {'@',64,0x4C, 0x92, 0x9E, 0x82, 0x7C}, {'A',65,0x7E, 0x88, 0x88, 0x88, 0x7E}, {'B',66,0xFE, 0x92, 0x92, 0x92, 0x6C}, {'C',67,0x7C, 0x82, 0x82, 0x82, 0x44}, {'D',68,0xFE, 0x82, 0x82, 0x44, 0x38}, {'E',69,0xFE, 0x92, 0x92, 0x92, 0x82}, {'F',70,0xFE, 0x90, 0x90, 0x90, 0x80}, {'G',71,0x7C, 0x82, 0x92, 0x92, 0x5E}, {'H',72,0xFE, 0x10, 0x10, 0x10, 0xFE}, {'I',73,0x00, 0x82, 0xFE, 0x82, 0x00}, {'J',74,0x04, 0x02, 0x82, 0xFC, 0x80}, {'K',75,0xFE, 0x10, 0x28, 0x44, 0x82}, {'L',76,0xFE, 0x02, 0x02, 0x02, 0x02}, {'M',77,0xFE, 0x40, 0x30, 0x40, 0xFE}, {'N',78,0xFE, 0x20, 0x10, 0x08, 0xFE}, {'O',79,0x7C, 0x82, 0x82, 0x82, 0x7C}, {'P',80,0xFE, 0x90, 0x90, 0x90, 0x60}, {'Q',81,0x7C, 0x82, 0x8A, 0x84, 0x7A}, {'R',82,0xFE, 0x90, 0x98, 0x94, 0x62}, {'S',83,0x62, 0x92, 0x92, 0x92, 0x8C}, {'T',84,0x80, 0x80, 0xFE, 0x80, 0x80}, {'U',85,0xFC, 0x02, 0x02, 0x02, 0xFC}, {'V',86,0xF8, 0x04, 0x02, 0x04, 0xF8}, {'W',87,0xFC, 0x02, 0x0C, 0x02, 0xFC}, {'X',88,0xC6, 0x28, 0x10, 0x28, 0xC6}, {'Y',89,0xE0, 0x10, 0x0E, 0x10, 0xE0}, {'Z',90,0x86, 0x8A, 0x92, 0xA2, 0xC2}, {'[',91,0x00, 0xFE, 0x82, 0x82, 0x00}, //{'\',92,0x40, 0x20, 0x10, 0x08, 0x04}, //removed as confuses arduino IDE {']',93,0x00, 0x82, 0x82, 0xFE, 0x00}, {'^',94,0x20, 0x40, 0x80, 0x40, 0x20}, {'_',95,0x02, 0x02, 0x02, 0x02, 0x02}, //{''',96,0x00, 0x80, 0x40, 0x20, 0x00}, //removed as confuses arduino IDE {'a',97,0x04, 0x2A, 0x2A, 0x2A, 0x1E}, {'b',98,0xFE, 0x12, 0x12, 0x12, 0x0C}, {'c',99,0x1C, 0x22, 0x22, 0x22, 0x22}, {'d',100,0x0C, 0x12, 0x12, 0x12, 0xFE}, {'e',101,0x1C, 0x2A, 0x2A, 0x2A, 0x1A}, {'f',102,0x00, 0x10, 0x7E, 0x90, 0x40}, {'g',103,0x12, 0x2A, 0x2A, 0x2A, 0x3C}, {'h',104,0xFE, 0x10, 0x10, 0x10, 0x0E}, {'i',105,0x00, 0x00, 0x5E, 0x00, 0x00}, {'j',106,0x04, 0x02, 0x02, 0xBC, 0x00}, {'k',107,0x00, 0xFE, 0x08, 0x14, 0x22}, {'l',108,0x00, 0x82, 0xFE, 0x02, 0x00}, {'m',109,0x3E, 0x20, 0x1C, 0x20, 0x3E}, {'n',110,0x3E, 0x10, 0x20, 0x20, 0x1E}, {'o',111,0x1C, 0x22, 0x22, 0x22, 0x1C}, {'p',112,0x3E, 0x28, 0x28, 0x28, 0x10}, {'q',113,0x10, 0x28, 0x28, 0x28, 0x3E}, {'r',114,0x3E, 0x10, 0x20, 0x20, 0x10}, {'s',115,0x12, 0x2A, 0x2A, 0x2A, 0x24}, {'t',116,0x20, 0x20, 0xFC, 0x22, 0x24}, {'u',117,0x3C, 0x02, 0x02, 0x02, 0x3C}, {'v',118,0x38, 0x04, 0x02, 0x04, 0x38}, {'w',119,0x3C, 0x02, 0x0C, 0x02, 0x3C}, {'x',120,0x22, 0x14, 0x08, 0x14, 0x22}, {'y',121,0x20, 0x12, 0x0C, 0x10, 0x20}, {'z',122,0x22, 0x26, 0x2A, 0x32, 0x22}, {'{',123,0x00, 0x10, 0x6C, 0x82, 0x82}, {'|',124,0x00, 0x00, 0xEE, 0x00, 0x00}, {'}',125,0x82, 0x82, 0x6C, 0x10, 0x00}, {'~',126,0x20, 0x40, 0x40, 0x40, 0x80} }; void setup(){ Serial.begin(115200); Wire.begin(); RTC.begin();
// for (int i = 0; i < 5; i++){ pinMode(column[i], OUTPUT); } for (int i = 0; i < 5; i++){ digitalWrite(column[i], LOW); }
pinMode(data, OUTPUT); pinMode(myclock, OUTPUT); digitalWrite(data, LOW); digitalWrite(myclock, HIGH); pinMode (17, OUTPUT); pinMode (16, OUTPUT); digitalWrite(17,HIGH); digitalWrite(16,LOW); pinMode(button1, INPUT); //Set pin for time/date mode button to input digitalWrite(button1, HIGH); //Turn on pullup resistors
pinMode(button2, INPUT); //Set pin for time/date set button to input digitalWrite(button2, HIGH); //Turn on pullup resistors
// display a welcome message
for (int d =0; d <30; d++) { ShowWord('L', 'E', 'D', ' ', ' ', ' ', ' ', ' '); }
for (int d =0; d <30; d++) { ShowWord('t', 'i', 'm', 'e', ' ', ' ', ' ', ' '); } //second line of message:
//end of welcome message }
void loop(){ //displayTime(); setTime();
}
void displayTime() { // get time from rtc DateTime now = RTC.now(); byte h1 = 0; byte h2 = 0; byte m1 = 0; byte m2 = 0; byte s1 = 0; byte s2 = 0; String myString = ""; int myStringlen = 0;
if (now.hour() >= 0 && now.hour() < 10) { myString = myString + "0"; } myString = myString + now.hour(); myString = myString +":"; if (now.minute() >= 0 && now.minute() < 10) { myString = myString + "0"; } myString = myString + now.minute(); myString = myString +":"; if (now.second() >= 0 && now.second() < 10) { myString = myString + "0"; } myString = myString + now.second(); // myString = __TIME__; myStringlen = myString.length(); for (int p = 0; p < (myStringlen-7); p++) { ch1 = myString.charAt(p); ch2 = myString.charAt(p+1); ch3 = myString.charAt(p+3); // SWAPPED THESE TO MAKE 4 DIGIT CLOCK ch4 = myString.charAt(p+4); // SWAPPED THESE TO MAKE 4 DIGIT CLOCK ch5 = myString.charAt(p+2); // SWAPPED THESE TO MAKE 4 DIGIT CLOCK ch6 = myString.charAt(p+5); ch7 = myString.charAt(p+6); ch8 = myString.charAt(p+7); for (int w = 0; w < delayValue; w++) { ShowWord(ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8); } } }
void displayDate() { // get time from rtc DateTime now = RTC.now(); byte h1 = 0; byte h2 = 0; byte m1 = 0; byte m2 = 0; byte s1 = 0; byte s2 = 0;
String myString = ""; int myStringlen = 0;
if (now.day() >= 0 && now.day() < 10) { myString = myString + "0"; } myString = myString + now.day(); myString = myString +":"; if (now.month() >= 0 && now.month() < 10) { myString = myString + "0"; } myString = myString + now.month(); myString = myString +":"; myString = myString + (now.year()%100/10); myString = myString + (now.year()%10);
// currentdigit = (now.year()%100/10); // displayDigit((currentdigit),2,0); // currentdigit = (now.year()%10); // displayDigit((currentdigit),1,0); // myString = __TIME__; myStringlen = myString.length(); for (int p = 0; p < (myStringlen-7); p++) { ch1 = myString.charAt(p); ch2 = myString.charAt(p+1); ch3 = myString.charAt(p+3); ch4 = myString.charAt(p+4); ch5 = myString.charAt(p+2); ch6 = myString.charAt(p+5); ch7 = myString.charAt(p+6); ch8 = myString.charAt(p+7); for (int w = 0; w < delayValue; w++) { ShowWord(ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8); } } } void setTime() {
//Time/Date setting button processing and cursor flashing //CURSOR COORDINATES ARE SET TO MATCH TIME/DATE FIELD - DO NOT CHANGE!! //Digital and analog time/date display updates with new settings at 5Hz as settings are changed DateTime now = RTC.now(); //Serial.print("Current mode = "); //Serial.println(mode); ch3 = ":"; ch6 = ":"; String myString = ""; int myStringlen = 0; switch(mode) { case 0: //show time displayTime(); break; case 1: // show date displayDate(); break;
case 2: //Hour setting if (now.hour() >= 0 && now.hour() < 10) { myString = myString + "0"; } myString = myString + now.hour(); myString = myString +" "; myString = myString + " "; myString = myString +" "; myString = myString + " "; myStringlen = myString.length(); for (int p = 0; p < (myStringlen-7); p++) { ch1 = myString.charAt(p); ch2 = myString.charAt(p+1); ch3 = myString.charAt(p+3); ch4 = myString.charAt(p+4); ch5 = myString.charAt(p+2); ch6 = myString.charAt(p+5); ch7 = myString.charAt(p+6); ch8 = myString.charAt(p+7); for (int w = 0; w < delayValue; w++) { ShowWord(ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8); } } if(!digitalRead(button2) && (!flash)){ //Update setting at 5Hz rate if button held down ; tempset = now.hour(); //Get the current hour and save in temporary variable tempset = tempset + 1; //Increment the hour at 5Hz rate delay(200); if(tempset > 23){tempset = 0;} //Roll over hour after 23rd hour (setting done in 24-hour mode) RTC.adjust(DateTime(now.year(), now.month(), now.day(), tempset, now.minute(), now.second())); //now.hour() = tempset; //After each update, write the hour back to the time structure //set_rtc_field(t, hourset); //Write the set field only back to the real time clock module after each update } break;
case 3: //Minute setting myString = myString + " "; myString = myString +" "; if (now.minute() >= 0 && now.minute() < 10) { myString = myString + "0"; } myString = myString + now.minute(); myString = myString +" "; myString = myString + " "; // myString = __TIME__; myStringlen = myString.length(); for (int p = 0; p < (myStringlen-7); p++) { ch1 = myString.charAt(p); ch2 = myString.charAt(p+1); ch3 = myString.charAt(p+3); ch4 = myString.charAt(p+4); ch5 = myString.charAt(p+2); ch6 = myString.charAt(p+5); ch7 = myString.charAt(p+6); ch8 = myString.charAt(p+7); for (int w = 0; w < delayValue; w++) { ShowWord(ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8); } }
if(!digitalRead(button2) && (!flash)){ //Update setting at 5Hz rate if button held down tempset = now.minute(); //Get the current minute and save in temporary variable tempset = tempset + 1; //Increment the minute at 5Hz rate delay(200); if(tempset > 59){tempset = 0;} //Roll over minute to zero after 59th minute RTC.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), tempset, now.second())); } break; //Set clock + 1 minute, then press and hold to freeze second setting. //Release button at 00 seconds to synchronize clock to external time source. case 4: //Second synchronization myString = myString + " "; myString = myString +" "; myString = myString + " "; myString = myString +" "; if (now.second() >= 0 && now.second() < 10) { myString = myString + "0"; } myString = myString + now.second(); // myString = __TIME__; myStringlen = myString.length(); for (int p = 0; p < (myStringlen-7); p++) { ch1 = myString.charAt(p); ch2 = myString.charAt(p+1); ch3 = myString.charAt(p+3); ch4 = myString.charAt(p+4); ch5 = myString.charAt(p+2); ch6 = myString.charAt(p+5); ch7 = myString.charAt(p+6); ch8 = myString.charAt(p+7); for (int w = 0; w < delayValue; w++) { ShowWord(ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8); } } if(!digitalRead(button2) && (!flash)){ //Reset second to zero at 5Hz rate if button held down RTC.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), now.minute(), 0)); } break;
case 5: //day setting if (now.day() >= 0 && now.day() < 10) { myString = myString + "0"; } myString = myString + now.day(); myString = myString +" "; myString = myString + " "; myString = myString +" "; myString = myString + " "; myStringlen = myString.length(); for (int p = 0; p < (myStringlen-7); p++) { ch1 = myString.charAt(p); ch2 = myString.charAt(p+1); ch3 = myString.charAt(p+3); ch4 = myString.charAt(p+4); ch5 = myString.charAt(p+2); ch6 = myString.charAt(p+5); ch7 = myString.charAt(p+6); ch8 = myString.charAt(p+7); for (int w = 0; w < delayValue; w++) { ShowWord(ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8); } } if(!digitalRead(button2) && (!flash)){ //Update setting at 5Hz rate if button held down ; tempset = now.day(); //Get the current hour and save in temporary variable tempset = tempset + 1; //Increment the hour at 5Hz rate delay(200); if(tempset > 31){tempset = 0;} //Roll over hour after 23rd hour (setting done in 24-hour mode) RTC.adjust(DateTime(now.year(), now.month(), tempset, now.hour(), now.minute(), now.second())); //now.hour() = tempset; //After each update, write the hour back to the time structure //set_rtc_field(t, hourset); //Write the set field only back to the real time clock module after each update } break; case 6: //Month setting myString = myString + " "; myString = myString +" "; if (now.month() >= 0 && now.month() < 10) { myString = myString + "0"; } myString = myString + now.month(); myString = myString +" "; myString = myString + " "; myStringlen = myString.length(); for (int p = 0; p < (myStringlen-7); p++) { ch1 = myString.charAt(p); ch2 = myString.charAt(p+1); ch3 = myString.charAt(p+3); ch4 = myString.charAt(p+4); ch5 = myString.charAt(p+2); ch6 = myString.charAt(p+5); ch7 = myString.charAt(p+6); ch8 = myString.charAt(p+7); for (int w = 0; w < delayValue; w++) { ShowWord(ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8); } } if(!digitalRead(button2) && (!flash)){ //Update setting at 5Hz rate if button held down ; tempset = now.month(); //Get the current hour and save in temporary variable tempset = tempset + 1; //Increment the hour at 5Hz rate delay(200); if(tempset > 12){tempset = 0;} //Roll over hour after 23rd hour (setting done in 24-hour mode) RTC.adjust(DateTime(now.year(), tempset, now.day(), now.hour(), now.minute(), now.second())); //now.hour() = tempset; //After each update, write the hour back to the time structure //set_rtc_field(t, hourset); //Write the set field only back to the real time clock module after each update } break; case 7: //Year setting myString = myString + " "; myString = myString +" "; myString = myString + " "; myString = myString +" "; myString = myString + (now.year()%100/10); myString = myString + (now.year()%10); myStringlen = myString.length(); for (int p = 0; p < (myStringlen-7); p++) { ch1 = myString.charAt(p); ch2 = myString.charAt(p+1); ch3 = myString.charAt(p+3); ch4 = myString.charAt(p+4); ch5 = myString.charAt(p+2); ch6 = myString.charAt(p+5); ch7 = myString.charAt(p+6); ch8 = myString.charAt(p+7); for (int w = 0; w < delayValue; w++) { ShowWord(ch1,ch2,ch3,ch4,ch5,ch6,ch7,ch8); } } if(!digitalRead(button2) && (!flash)){ //Update setting at 5Hz rate if button held down ; tempset = now.year(); //Get the current hour and save in temporary variable tempset = tempset + 1; //Increment the hour at 5Hz rate delay(200); if(tempset > 2099){tempset = 2016;} //Roll over hour after 23rd hour (setting done in 24-hour mode) RTC.adjust(DateTime(tempset, now.month(), now.day(), now.hour(), now.minute(), now.second())); //now.hour() = tempset; //After each update, write the hour back to the time structure //set_rtc_field(t, hourset); //Write the set field only back to the real time clock module after each update } break; } // prev = now; //Reset variable for display and time update rate
//Clock setting mode set - outside time/display update processing for faster button response
if(!digitalRead(button1)){ //Read setting mode button Serial.println("button pressed"); delay(25); //100ms debounce time if(!digitalRead(button1)){ //Activate setting mode change after 100ms button press mode = mode + 1; //Increment the time setting mode on each button press
delay(200); framecount2 = 0; //Reset cycle counter if button pressed to delay auto return to normal mode if(mode > 7){mode = 0;} //Roll the mode setting after 7th mode while(!digitalRead(button1)){} //Wait for button release (freezes all display processing and time updates while button held, but RTC continues to keep time) Serial.println("Button released"); } }
// buttonState = digitalRead(button1); // Serial.println(buttonState); // if(buttonState == HIGH){ //Read setting mode button // delay(25); //100ms debounce time // buttonState = digitalRead(button1); // // if(buttonState == HIGH){ //Activate setting mode change after 100ms button press // // mode = mode + 1; //Increment the time setting mode on each button press // Serial.print("button pressed"); // delay(200); // framecount2 = 0; //Reset cycle counter if button pressed to delay auto return to normal mode // if(mode > 7){mode = 0;} //Roll the mode setting after 7th mode // while(buttonState == HIGH){ // buttonState = digitalRead(button1); // } //Wait for button release (freezes all display processing and time updates while button held, but RTC continues to keep time) // } // } }
void ShowWord(char c8, char c7, char c6, char c5, char c4, char c3, char c2, char c1) { // for each column //Serial.println("Starting to look for data"); for (int i = 0; i < 5; i++) // 5 columns { // display the first column in 0, 1, 2, 3, 4, 5, 6, 7 // case i = 0 // look up column i(0) for char 1 byte thisCharData; thisCharData = getCode1(c1,i); // write 8 values for (int j = 1; j<8; j++) { digitalWrite(myclock, HIGH); //Serial.println(thisCharData & (1<<j)); digitalWrite(data, (thisCharData & (1<<j))); // first binary value character 8, reads for right to left, binary from left to right digitalWrite(myclock, LOW); } thisCharData = getCode1(c2,i); // write 8 values for (int j = 1; j<8; j++) { digitalWrite(myclock, HIGH); digitalWrite(data, (thisCharData & (1<<j))); // first binary value character 8, reads for right to left, binary from left to right digitalWrite(myclock, LOW); } thisCharData = getCode1(c3,i); // write 8 values for (int j = 1; j<8; j++) { digitalWrite(myclock, HIGH); digitalWrite(data, (thisCharData & (1<<j))); // first binary value character 8, reads for right to left, binary from left to right digitalWrite(myclock, LOW); } thisCharData = getCode1(c4,i); // write 8 values for (int j = 1; j<8; j++) { digitalWrite(myclock, HIGH); digitalWrite(data, (thisCharData & (1<<j))); // first binary value character 8, reads for right to left, binary from left to right digitalWrite(myclock, LOW); } thisCharData = getCode1(c5,i); // write 8 values for (int j = 1; j<8; j++) { digitalWrite(myclock, HIGH); digitalWrite(data, (thisCharData & (1<<j))); // first binary value character 8, reads for right to left, binary from left to right digitalWrite(myclock, LOW); } thisCharData = getCode1(c6,i); // write 8 values for (int j = 1; j<8; j++) { digitalWrite(myclock, HIGH); digitalWrite(data, (thisCharData & (1<<j))); // first binary value character 8, reads for right to left, binary from left to right digitalWrite(myclock, LOW); } thisCharData = getCode1(c7,i); // write 8 values for (int j = 1; j<8; j++) { digitalWrite(myclock, HIGH); digitalWrite(data, (thisCharData & (1<<j))); // first binary value character 8, reads for right to left, binary from left to right digitalWrite(myclock, LOW); } thisCharData = getCode1(c8,i); // write 8 values for (int j = 1; j<8; j++) { digitalWrite(myclock, HIGH); digitalWrite(data, (thisCharData & (1<<j))); // first binary value character 8, reads for right to left, binary from left to right digitalWrite(myclock, LOW); } digitalWrite(column[i], HIGH); delayMicroseconds(2000); digitalWrite(column[i], LOW); }
}
byte getCode1(char c, int k) { byte chardata ; //Serial.print ("the letter is - "); //Serial.print (c); for (int i = 0 ; i < cmap_len ; i++) { //Serial.print (" i= "); //Serial.print (i); //Serial.print (" char = "); //Serial.println (cmap[i].c); if (c == cmap[i].c) { switch (k) { case 0: chardata = cmap[i].b1; break; case 1: chardata = cmap[i].b2; break; case 2: chardata = cmap[i].b3; break; case 3: chardata = cmap[i].b4; break; case 4: chardata = cmap[i].b5; break; }
//Serial.print("found it - "); //Serial.println(chardata, BIN); break; } } //Serial.print ( "char data = "); //Serial.println (chardata, BIN); return chardata; }
void print2digits(int number) { if (number >= 0 && number < 10) { Serial.write('0'); } Serial.print(number);
_________________ Мои поделки часов https://www.youtube.com/channel/UC2qfoz ... subscriber На Рутубе https://rutube.ru/channel/64515754/ Куплю корпус от калькулятора ЭКВМ 24-71 , он же Электроника 24-71 , или указанный калькулятор с целым корпусом.
Последний раз редактировалось AirCat Пн мар 25, 2019 17:58:10, всего редактировалось 1 раз.
|
|