Обсуждаем контроллеры компании Atmel.
Ответить

Часы на Adruino. Нужна "помощь зала".

Пн мар 25, 2019 09:03:09

Всем добра ! :))
Случайно попались задёшево два прекрасных отечественных индикатора КИПВ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);
Последний раз редактировалось AirCat Пн мар 25, 2019 17:58:10, всего редактировалось 1 раз.

Re: Часы на Adruino. Нужна "помощь зала".

Пн мар 25, 2019 09:30:55

ЛС.
Ответить