Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define getBit(value, bitn) ((((value)&(1<<(bitn)))>>(bitn))?HIGH:LOW)
- int ledPin = 13; // LED connected to digital pin 13
- int clkPin = 4;
- int dataPin = 2;
- int csPin = 3;
- int delaySetup = 10;
- int delayByte = 20;
- int main_i=0;
- int push_i=0;
- byte KEY1 = 0x04;
- byte KEY2 = 0x10;
- byte KEY3 = 0x20;
- byte ET6202DIG[6];
- byte LED[10] = {
- 0x7E, // 0 a,b,c,d,e,f - 01111110
- 0x30, // 1 b+c - 00110000
- 0x6D, // 2 a+b+d+e+h - 01101101
- 0x79, // 3 a+b+c+d+h - 01111001
- 0x33, // 4 b+c+f+h - 00110011
- 0x5B, // 5 a,c,d,f,h - 01011011
- 0x5F, // 6 a,c,d,e,f,h - 01011111
- 0x70, // 7 a,b,c - 01110000
- 0x7F, // 8 01111111
- 0x7B, // 9 01111011
- };
- byte POINT[4] = {
- 0x00, // none
- 0x04, // e 00000100 1-left
- 0x02, // f 00000010 2-right
- 0x06, // e,f 00000110 1|2 = 3 - left+right
- };
- unsigned long prev_key=0;
- void setup() // run once, when the sketch starts
- {
- Serial.begin(9600);
- Serial.print('dupa');
- pinMode(ledPin, OUTPUT); // sets the digital pin as output
- pinMode(dataPin, OUTPUT);
- pinMode(clkPin, OUTPUT);
- pinMode(csPin, OUTPUT);
- digitalWrite(dataPin, HIGH);
- digitalWrite(clkPin, HIGH);
- digitalWrite(csPin, HIGH);
- initET6202();
- setDigit(LED[1], 0);
- setDigit(LED[2], 1);
- setDigit(LED[3], 2);
- setDigit(LED[4], 3);
- setDigit(LED[5], 4);
- setDigit(POINT[3], 5);
- updateET6202();
- }
- void loop() // run over and over again
- {
- order1();
- order1_init();
- // helloolga();
- // order3_init();
- //order3();
- //delay(1000);
- // Serial.print('dupa');
- // unsigned long key=0;
- //key=sendCmd(0x42, NULL, 0, 2);
- //€delay(1000);
- // if(prev_key != key){
- // prev_key = key;
- // if(key != 0){
- // if((key & KEY1) > 0){
- // push_i = push_i==0?0:push_i-1;
- // }
- // if((key & KEY2) > 0){
- // push_i = push_i+1;
- // }
- // sendCmd((0x88 | (push_i%8)), NULL, 0, false);
- // }
- // }
- }
- void helloolga(){
- if(main_i==0){
- main_i=1;
- // delay(1000);
- // order2();
- order3_2();
- //order1();
- //order4();
- digitalWrite(ledPin, LOW);
- }
- else{
- main_i=0;
- // delay(1000);
- // order2();
- order3();
- // order1();
- // order4();
- digitalWrite(ledPin, HIGH);
- }
- }
- void initET6202(){
- delay(200);
- order2_init();
- order3_init();
- order1_init();
- order4_init();
- ///delay(delayByte);
- order2();
- order3();
- order1();
- order4();
- }
- unsigned long sendCmd(int cmd, int * data, int size, int nocshigh ){
- int i=0;
- int j=0;
- noInterrupts();
- digitalWrite(csPin, LOW);
- for (i=0; i<8; i++){
- digitalWrite(clkPin, LOW);
- digitalWrite(dataPin, getBit(cmd, i));
- digitalWrite(clkPin, HIGH);
- }
- if(data != NULL){
- for(j=0; j<size; j++){
- for (i=0; i<8; i++){
- digitalWrite(clkPin, LOW);
- digitalWrite(dataPin, getBit(data[j], i));
- digitalWrite(clkPin, HIGH);
- }
- }
- }
- if(nocshigh == false){
- digitalWrite(csPin, HIGH);
- digitalWrite(dataPin, HIGH);
- digitalWrite(clkPin, HIGH);
- }
- unsigned long reskey = 0x00000000;
- int tmp = 0;
- int sh = 0;
- if(nocshigh == 2){
- pinMode(dataPin, INPUT);
- for (j=0; j<5; j++){
- for (i=0; i<8; i++){
- digitalWrite(clkPin, LOW);
- digitalWrite(clkPin, HIGH);
- if(i == 0 || i ==1 || i == 3 || i ==4){
- sh = i>2 ? i-1 : i;
- tmp = digitalRead(dataPin);
- reskey = reskey | (((unsigned long)(tmp & 0x01)) << (j*4 + sh));
- //Serial.print((j*4 + sh));
- //Serial.print(" ");
- }
- }
- }
- pinMode(dataPin, OUTPUT);
- //Serial.println(reskey, HEX);
- digitalWrite(csPin, HIGH);
- digitalWrite(dataPin, HIGH);
- digitalWrite(clkPin, HIGH);
- }
- interrupts();
- return reskey;
- }
- void order2_init(){
- int cmd = 0x40;
- sendCmd(cmd, NULL, 0, false);
- }
- void order3_init(){
- int cmd = 0xC0;
- int data[14] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0};
- sendCmd(cmd, data, 14, false);
- }
- void order1_init(){
- int cmd = 0x03;
- sendCmd(cmd, NULL, 0, false);
- }
- void order4_init(){
- int cmd = 0x80;
- sendCmd(cmd, NULL, 0, false);
- }
- void order2(){
- int cmd = 0x40; //0100 0000
- sendCmd(cmd, NULL, 0, false);
- }
- void order3(){
- int cmd = 0xC0;
- // 1(a) 2(b) 3(c) 4(d) 7(h) 6(f) 5(e)
- int data[14] = {0x12, 0, 0x11, 0, 0x11, 0, 0x1E, 0, 0x03, 0, 0x1F, 0x0, 0x1F, 0x00}; // 'HELLO'
- // This PCB has tricky layout
- // 1 - SG4, 2 - SG5, 3 - SG6, 4 - SG7, 5 - SG8
- // points - SG3, left - e(DIG7), right - f (DIG6)
- // a - DIG1, b - DIG2, c - DIG3, d - DIG4, e - DIG7, f - DIG6, h - DIG5
- sendCmd(cmd, data, 14, false);
- }
- void order3_2(){
- int cmd = 0xC0;
- int data[14] = {0x1A, 0, 0x12, 0, 0x1A, 0, 0x0E, 0, 0x10, 0, 0x1E, 0x0, 0x1E, 0x00}; // ' OLGA'
- sendCmd(cmd, data, 14, false);
- }
- void order1(){
- int cmd = 0x03;
- sendCmd(cmd, NULL, 0, false);
- }
- void order4(){
- int cmd = 0x8F;
- sendCmd(cmd, NULL, 0, false);
- }
- void readKey(){
- //2
- sendCmd(0x42, NULL, 0, 2); // normal mode, incremental, read key scan data
- //3
- //sendCmd(0xC0, NULL, 0, false); // address set to 00H
- //1
- //sendCmd(0x03, NULL, 0, false); // mode 10x7
- //4
- //sendCmd(0x80, NULL, 0, false); // display off for scaning key matrix
- }
- void setDigit(int digit, int num){
- //digit - digit for show
- // num - num of a LED where to show digit
- if(num < 0 || num > 5){ return; }
- ET6202DIG[num] = digit;
- }
- void updateET6202(){
- int mem[14] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0};
- byte i=0, j=0;
- int sh=0;
- for(i=0; i<6; i++){
- for(j=0; j<7; j++){
- // 1 2 3 4 7 6 5
- // int data[14] = {0x12, 0, 0x11, 0, 0x11, 0, 0x1E, 0, 0x03, 0, 0x1F, 0x0, 0x1F, 0x00}; // 'HELLO'
- // 0 1 2 3 4 5 6
- // 6 5 4 3 0 1 2
- sh = j==6 ? 2 : (j==4 ? 0 : 6-j); //
- mem[j*2] &= ~(1 << i); // clear bit
- mem[j*2] |= (getBit(ET6202DIG[i], sh) << i); //set bit
- }
- Serial.println(ET6202DIG[i], HEX);
- }
- sendCmd(0x40, NULL, 0, false);
- sendCmd(0xC0, mem, 14, false);
- sendCmd(0x03, NULL, 0, false);
- sendCmd(0x8F, NULL, 0, false);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement