/**********************************************************
   UZURATTER v2.1 (TWEET FROM ARDUINO MEGA 2560)
   UZURA-SAN-TEAM @uzurannn
   
   -- THIS SKETCH IS IN THE PUBLIC DOMAIN --
/**********************************************************/

#include <SPI.h>
#include <Ethernet.h>
#include <Twitter.h>

byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF }; //Your MAC Address
byte ip[]  = { 192, 168, 0, 117 }; //Your Local IP Address
Twitter twitter("Your Token");

#include <LiquidCrystal.h>
#include <TimerOne.h>

LiquidCrystal lcd(14,15,16,17,18,19,20);

byte tilde[8] = {
  B01000,
  B10101,
  B00010,
  B00000,
  B00000,
  B00000,
  B00000,
};

byte cCnt;
unsigned char c[101];

volatile int     ti;
volatile int     clrTi;
volatile boolean enTiCnt;

void setup()
{
        int i;
        
        delay(1000);
        Ethernet.begin(mac, ip);
        
        Timer1.initialize();
        Timer1.attachInterrupt(timer1_interrupt, 1000);
        
        for(i = 22; i < 45; i++) //IO22-IO44
        {
                digitalWrite(i, HIGH); //INTERNAL PULL UP
        }

        lcd.createChar(0, tilde);
        lcd.begin(20, 2);
        lcd.setCursor(0, 0);
        lcd.noCursor();
        lcd.print("UZURATTER 2.1");
        delay(1000);
        lcd.clear();
        lcd.setCursor(0, 1);
        lcd.print('A');
        lcd.setCursor(2, 1);
        lcd.print('0');
        lcd.setCursor(19, 0);
        lcd.cursor();
}

void timer1_interrupt(void)
{
        if(enTiCnt == 1)
        {
                if(ti < 1500)
                {
                        ti++;
                }
        }
        if(clrTi < 2000)
        {
                clrTi ++;
        }
}

void lcdUpperLine(void)
{
        int i;
        
        for(i = 0; i < 20; i++)
        {
                lcd.setCursor(i, 0);
                lcd.print(' ');
        }
        
        if(cCnt <= 19)
        {
                lcd.setCursor(19 - cCnt, 0);
                for(i = 0; i < cCnt; i++)
                {
                        if(c[i] == '~')
                        {
                                lcd.write(byte(0));
                        }
                        else
                        {
                                lcd.print((char)c[i]);
                        }
                }
        }
        else
        {
                lcd.setCursor(0, 0);
                for(i = 0; i < 19; i++)
                {
                        if(c[cCnt - 19 + i] == '~')
                        {
                                lcd.write(byte(0));
                        }
                        else
                        {
                                lcd.print((char)c[cCnt - 19 + i]);
                        }
                }
        }
}

void keyPushedErr1(int keyPin)
{
        tone(13, 400);
        delay(80);
        noTone(13);
        while(digitalRead(keyPin) == 0){}
        delay(80);
}

void keyPushedErr2(int keyPin)
{
        tone(13, 400);
        delay(80);
        noTone(13);
        while(digitalRead(keyPin) == 0){}
        ti = 0;
        delay(80);
}

void loop()
{
        static boolean ovf;
        static boolean snd;
        static boolean allCl;
        static int x;
        static int y;
        static int j;
        static unsigned char ch;
        static byte key;
        static byte wheel;
        static byte cSel;
        
        int i;
        
        while(1)
        {
                //-----key1-----
                
                if(digitalRead(22) == 0)
                {
                        if(ovf == 1)
                        {
                                keyPushedErr1(22);
                        }
                        else
                        {
                                tone(13, 800);
                                delay(80);
                                noTone(13);
                                if(key != 0 && key != 1)
                                {
                                        wheel = 0;
                                        lcdUpperLine();
                                        j++;
                                        lcd.setCursor(19, 0);
                                }
                                else if(key == 1)
                                {
                                        wheel++;
                                        if(cSel == 0 || cSel == 2)
                                        {
                                                if(wheel == 5)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                        else if(cSel == 1)
                                        {
                                                if(wheel == 2)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                }
                                if(cSel == 0)
                                {
                                             if(wheel == 0){ch = '@';}
                                        else if(wheel == 1){ch = '#';}
                                        else if(wheel == 2){ch = '/';}
                                        else if(wheel == 3){ch = '&';}
                                        else if(wheel == 4){ch = '_';}
                                }
                                else if(cSel == 1)
                                {
                                             if(wheel == 0){ch = '1';}
                                        else if(wheel == 1){ch = '~';}
                                }
                                else if(cSel == 2)
                                {
                                             if(wheel == 0){ch = 177;}
                                        else if(wheel == 1){ch = 178;}
                                        else if(wheel == 2){ch = 179;}
                                        else if(wheel == 3){ch = 180;}
                                        else if(wheel == 4){ch = 181;}
                                }
                                cCnt = j + 1;
                                if(cCnt > 100)
                                {
                                        ovf     = 1;
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                        lcd.cursor();
                                        while(digitalRead(23) == 0){}
                                        delay(80);
                                }
                                else
                                {
                                        c[j] = ch;
                                        lcd.noCursor();
                                        if(ch == '~')
                                        {
                                                lcd.write(byte(0));
                                        }
                                        else
                                        {
                                                lcd.print((char)ch);
                                        }
                                        lcd.setCursor(2, 1);
                                        lcd.print(cCnt);
                                        lcd.setCursor(19, 0);
                                        while(digitalRead(22) == 0){}
                                        if(enTiCnt == 0)
                                        {
                                                enTiCnt = 1;
                                        }
                                        ti  = 0;
                                        delay(80);
                                        key = 1;
                                }
                        }
                }
                
                //-----key2-----
                
                if(digitalRead(23) == 0)
                {
                        if(ovf == 1)
                        {
                                keyPushedErr1(23);
                        }
                        else
                        {
                                tone(13, 800);
                                delay(80);
                                noTone(13);
                                if(key != 0 && key != 2)
                                {
                                        wheel = 0;
                                        lcdUpperLine();
                                        j++;
                                        lcd.setCursor(19, 0);
                                }
                                else if(key == 2)
                                {
                                        wheel++;
                                        if(cSel == 0 || cSel == 1)
                                        {
                                                if(wheel == 3)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                        else if(cSel == 2)
                                        {
                                                if(wheel == 5)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                }
                                if(cSel == 0)
                                {
                                             if(wheel == 0){ch = 'a';}
                                        else if(wheel == 1){ch = 'b';}
                                        else if(wheel == 2){ch = 'c';}
                                }
                                else if(cSel == 1)
                                {
                                             if(wheel == 0){ch = '2';}
                                        else if(wheel == 1){ch = '\\';}
                                        else if(wheel == 2){ch = '$';}
                                }
                                else if(cSel == 2)
                                {
                                             if(wheel == 0){ch = 182;}
                                        else if(wheel == 1){ch = 183;}
                                        else if(wheel == 2){ch = 184;}
                                        else if(wheel == 3){ch = 185;}
                                        else if(wheel == 4){ch = 186;}
                                }
                                cCnt = j + 1;
                                if(cCnt > 100)
                                {
                                        ovf     = 1;
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                        lcd.cursor();
                                        while(digitalRead(23) == 0){}
                                        delay(80);
                                }
                                else
                                {
                                        c[j] = ch;
                                        lcd.noCursor();
                                        lcd.print((char)ch);
                                        lcd.setCursor(2, 1);
                                        lcd.print(cCnt);
                                        lcd.setCursor(19, 0);
                                        while(digitalRead(23) == 0){}
                                        if(enTiCnt == 0)
                                        {
                                                enTiCnt = 1;
                                        }
                                        ti  = 0;
                                        delay(80);
                                        key = 2;
                                }
                        }
                }
                
                //-----key3-----
                
                if(digitalRead(24) == 0)
                {
                        if(ovf == 1)
                        {
                                keyPushedErr1(24);
                        }
                        else
                        {
                                tone(13, 800);
                                delay(80);
                                noTone(13);
                                if(key != 0 && key != 3)
                                {
                                        wheel = 0;
                                        lcdUpperLine();
                                        j++;
                                        lcd.setCursor(19, 0);
                                }
                                else if(key == 3)
                                {
                                        wheel++;
                                        if(cSel == 0 || cSel == 1)
                                        {
                                                if(wheel == 3)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                        else if(cSel == 2)
                                        {
                                                if(wheel == 5)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                }
                                if(cSel == 0)
                                {
                                             if(wheel == 0){ch = 'd';}
                                        else if(wheel == 1){ch = 'e';}
                                        else if(wheel == 2){ch = 'f';}
                                }
                                else if(cSel == 1)
                                {
                                             if(wheel == 0){ch = '3';}
                                        else if(wheel == 1){ch = '%';}
                                        else if(wheel == 2){ch = '#';}
                                }
                                else if(cSel == 2)
                                {
                                             if(wheel == 0){ch = 187;}
                                        else if(wheel == 1){ch = 188;}
                                        else if(wheel == 2){ch = 189;}
                                        else if(wheel == 3){ch = 190;}
                                        else if(wheel == 4){ch = 191;}
                                }
                                cCnt = j + 1;
                                if(cCnt > 100)
                                {
                                        ovf     = 1;
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                        lcd.cursor();
                                        while(digitalRead(24) == 0){}
                                        delay(80);
                                }
                                else
                                {
                                        c[j] = ch;
                                        lcd.noCursor();
                                        lcd.print((char)ch);
                                        lcd.setCursor(2, 1);
                                        lcd.print(cCnt);
                                        lcd.setCursor(19, 0);
                                        while(digitalRead(24) == 0){}
                                        if(enTiCnt == 0)
                                        {
                                                enTiCnt = 1;
                                        }
                                        ti  = 0;
                                        delay(80);
                                        key = 3;
                                }
                        }
                }
                
                //-----key4-----
                
                if(digitalRead(25) == 0)
                {
                        if(ovf == 1)
                        {
                                keyPushedErr1(25);
                        }
                        else
                        {
                                tone(13, 800);
                                delay(80);
                                noTone(13);
                                if(key != 0 && key != 4)
                                {
                                        wheel = 0;
                                        lcdUpperLine();
                                        j++;
                                        lcd.setCursor(19, 0);
                                }
                                else if(key == 4)
                                {
                                        wheel++;
                                        if(cSel == 0 || cSel == 1)
                                        {
                                                if(wheel == 3)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                        else if(cSel == 2)
                                        {
                                                if(wheel == 5)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                }
                                if(cSel == 0)
                                {
                                             if(wheel == 0){ch = 'g';}
                                        else if(wheel == 1){ch = 'h';}
                                        else if(wheel == 2){ch = 'i';}
                                }
                                else if(cSel == 1)
                                {
                                             if(wheel == 0){ch = '4';}
                                        else if(wheel == 1){ch = '*';}
                                        else if(wheel == 2){ch = '/';}
                                }
                                else if(cSel == 2)
                                {
                                             if(wheel == 0){ch = 192;}
                                        else if(wheel == 1){ch = 193;}
                                        else if(wheel == 2){ch = 194;}
                                        else if(wheel == 3){ch = 195;}
                                        else if(wheel == 4){ch = 196;}
                                }
                                cCnt = j + 1;
                                if(cCnt > 100)
                                {
                                        ovf     = 1;
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                        lcd.cursor();
                                        while(digitalRead(25) == 0){}
                                        delay(80);
                                }
                                else
                                {
                                        c[j] = ch;
                                        lcd.noCursor();
                                        lcd.print((char)ch);
                                        lcd.setCursor(2, 1);
                                        lcd.print(cCnt);
                                        lcd.setCursor(19, 0);
                                        while(digitalRead(25) == 0){}
                                        if(enTiCnt == 0)
                                        {
                                                enTiCnt = 1;
                                        }
                                        ti  = 0;
                                        delay(80);
                                        key = 4;
                                }
                        }
                }
                
                //-----key5-----
                
                if(digitalRead(26) == 0)
                {
                        if(ovf == 1)
                        {
                                keyPushedErr1(26);
                        }
                        else
                        {
                                tone(13, 800);
                                delay(80);
                                noTone(13);
                                if(key != 0 && key != 5)
                                {
                                        wheel = 0;
                                        lcdUpperLine();
                                        j++;
                                        lcd.setCursor(19, 0);
                                }
                                else if(key == 5)
                                {
                                        wheel++;
                                        if(cSel == 0 || cSel == 1)
                                        {
                                                if(wheel == 3)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                        else if(cSel == 2)
                                        {
                                                if(wheel == 5)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                }
                                if(cSel == 0)
                                {
                                             if(wheel == 0){ch = 'j';}
                                        else if(wheel == 1){ch = 'k';}
                                        else if(wheel == 2){ch = 'l';}
                                }
                                else if(cSel == 1)
                                {
                                             if(wheel == 0){ch = '5';}
                                        else if(wheel == 1){ch = '+';}
                                        else if(wheel == 2){ch = '-';}
                                }
                                else if(cSel == 2)
                                {
                                             if(wheel == 0){ch = 197;}
                                        else if(wheel == 1){ch = 198;}
                                        else if(wheel == 2){ch = 199;}
                                        else if(wheel == 3){ch = 200;}
                                        else if(wheel == 4){ch = 201;}
                                }
                                cCnt = j + 1;
                                if(cCnt > 100)
                                {
                                        ovf     = 1;
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                        lcd.cursor();
                                        while(digitalRead(26) == 0){}
                                        delay(80);
                                }
                                else
                                {
                                        c[j] = ch;
                                        lcd.noCursor();
                                        lcd.print((char)ch);
                                        lcd.setCursor(2, 1);
                                        lcd.print(cCnt);
                                        lcd.setCursor(19, 0);
                                        while(digitalRead(26) == 0){}
                                        if(enTiCnt == 0)
                                        {
                                                enTiCnt = 1;
                                        }
                                        ti  = 0;
                                        delay(80);
                                        key = 5;
                                }
                        }
                }
                
                //-----key6-----
                
                if(digitalRead(27) == 0)
                {
                        if(ovf == 1)
                        {
                                keyPushedErr1(27);
                        }
                        else
                        {
                                tone(13, 800);
                                delay(80);
                                noTone(13);
                                if(key != 0 && key != 6)
                                {
                                        wheel = 0;
                                        lcdUpperLine();
                                        j++;
                                        lcd.setCursor(19, 0);
                                }
                                else if(key == 6)
                                {
                                        wheel++;
                                        if(cSel == 0)
                                        {
                                                if(wheel == 3)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                        else if(cSel == 1)
                                        {
                                                if(wheel == 4)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                        else if(cSel == 2)
                                        {
                                                if(wheel == 5)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                }
                                if(cSel == 0)
                                {
                                             if(wheel == 0){ch = 'm';}
                                        else if(wheel == 1){ch = 'n';}
                                        else if(wheel == 2){ch = 'o';}
                                }
                                else if(cSel == 1)
                                {
                                             if(wheel == 0){ch = '6';}
                                        else if(wheel == 1){ch = '<';}
                                        else if(wheel == 2){ch = '=';}
                                        else if(wheel == 3){ch = '>';}
                                }
                                else if(cSel == 2)
                                {
                                             if(wheel == 0){ch = 202;}
                                        else if(wheel == 1){ch = 203;}
                                        else if(wheel == 2){ch = 204;}
                                        else if(wheel == 3){ch = 205;}
                                        else if(wheel == 4){ch = 206;}
                                }
                                cCnt = j + 1;
                                if(cCnt > 100)
                                {
                                        ovf     = 1;
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                        lcd.cursor();
                                        while(digitalRead(27) == 0){}
                                        delay(80);
                                }
                                else
                                {
                                        c[j] = ch;
                                        lcd.noCursor();
                                        lcd.print((char)ch);
                                        lcd.setCursor(2, 1);
                                        lcd.print(cCnt);
                                        lcd.setCursor(19, 0);
                                        while(digitalRead(27) == 0){}
                                        if(enTiCnt == 0)
                                        {
                                                enTiCnt = 1;
                                        }
                                        ti  = 0;
                                        delay(80);
                                        key = 6;
                                }
                        }
                }
                
                //-----key7-----
                
                if(digitalRead(28) == 0)
                {
                        if(ovf == 1)
                        {
                                keyPushedErr1(28);
                        }
                        else
                        {
                                tone(13, 800);
                                delay(80);
                                noTone(13);
                                if(key != 0 && key != 7)
                                {
                                        wheel = 0;
                                        lcdUpperLine();
                                        j++;
                                        lcd.setCursor(19, 0);
                                }
                                else if(key == 7)
                                {
                                        wheel++;
                                        if(cSel == 0)
                                        {
                                                if(wheel == 4)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                        else if(cSel == 1)
                                        {
                                                if(wheel == 3)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                        else if(cSel == 2)
                                        {
                                                if(wheel == 5)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                }
                                if(cSel == 0)
                                {
                                             if(wheel == 0){ch = 'p';}
                                        else if(wheel == 1){ch = 'q';}
                                        else if(wheel == 2){ch = 'r';}
                                        else if(wheel == 3){ch = 's';}
                                }
                                else if(cSel == 1)
                                {
                                             if(wheel == 0){ch = '7';}
                                        else if(wheel == 1){ch = 162;}
                                        else if(wheel == 2){ch = 163;}
                                }
                                else if(cSel == 2)
                                {
                                             if(wheel == 0){ch = 207;}
                                        else if(wheel == 1){ch = 208;}
                                        else if(wheel == 2){ch = 209;}
                                        else if(wheel == 3){ch = 210;}
                                        else if(wheel == 4){ch = 211;}
                                }
                                cCnt = j + 1;
                                if(cCnt > 100)
                                {
                                        ovf     = 1;
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                        lcd.cursor();
                                        while(digitalRead(28) == 0){}
                                        delay(80);
                                }
                                else
                                {
                                        c[j] = ch;
                                        lcd.noCursor();
                                        lcd.print((char)ch);
                                        lcd.setCursor(2, 1);
                                        lcd.print(cCnt);
                                        lcd.setCursor(19, 0);
                                        while(digitalRead(28) == 0){}
                                        if(enTiCnt == 0)
                                        {
                                                enTiCnt = 1;
                                        }
                                        ti  = 0;
                                        delay(80);
                                        key = 7;
                                }
                        }
                }
                
                //-----key8-----
                
                if(digitalRead(29) == 0)
                {
                        if(ovf == 1)
                        {
                                keyPushedErr1(29);
                        }
                        else
                        {
                                tone(13, 800);
                                delay(80);
                                noTone(13);
                                if(key != 0 && key != 8)
                                {
                                        wheel = 0;
                                        lcdUpperLine();
                                        j++;
                                        lcd.setCursor(19, 0);
                                }
                                else if(key == 8)
                                {
                                        wheel++;
                                        if(wheel == 3)
                                        {
                                                wheel = 0;
                                        }
                                }
                                if(cSel == 0)
                                {
                                             if(wheel == 0){ch = 't';}
                                        else if(wheel == 1){ch = 'u';}
                                        else if(wheel == 2){ch = 'v';}
                                }
                                else if(cSel == 1)
                                {
                                             if(wheel == 0){ch = '8';}
                                        else if(wheel == 1){ch = '&';}
                                        else if(wheel == 2){ch = '@';}
                                }
                                else if(cSel == 2)
                                {
                                             if(wheel == 0){ch = 212;}
                                        else if(wheel == 1){ch = 213;}
                                        else if(wheel == 2){ch = 214;}
                                }
                                cCnt = j + 1;
                                if(cCnt > 100)
                                {
                                        ovf     = 1;
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                        lcd.cursor();
                                        while(digitalRead(29) == 0){}
                                        delay(80);
                                }
                                else
                                {
                                        c[j] = ch;
                                        lcd.noCursor();
                                        lcd.print((char)ch);
                                        lcd.setCursor(2, 1);
                                        lcd.print(cCnt);
                                        lcd.setCursor(19, 0);
                                        while(digitalRead(29) == 0){}
                                        if(enTiCnt == 0)
                                        {
                                                enTiCnt = 1;
                                        }
                                        ti  = 0;
                                        delay(80);
                                        key = 8;
                                }
                        }
                }
                
                //-----key9-----
                
                if(digitalRead(30) == 0)
                {
                        if(ovf == 1)
                        {
                                keyPushedErr1(30);
                        }
                        else
                        {
                                tone(13, 800);
                                delay(80);
                                noTone(13);
                                if(key != 0 && key != 9)
                                {
                                        wheel = 0;
                                        lcdUpperLine();
                                        j++;
                                        lcd.setCursor(19, 0);
                                }
                                else if(key == 9)
                                {
                                        wheel++;
                                        if(cSel == 0 || cSel == 1)
                                        {
                                                if(wheel == 4)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                        else if(cSel == 2)
                                        {
                                                if(wheel == 5)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                }
                                if(cSel == 0)
                                {
                                             if(wheel == 0){ch = 'w';}
                                        else if(wheel == 1){ch = 'x';}
                                        else if(wheel == 2){ch = 'y';}
                                        else if(wheel == 3){ch = 'z';}
                                }
                                else if(cSel == 1)
                                {
                                             if(wheel == 0){ch = '9';}
                                        else if(wheel == 1){ch = '^';}
                                        else if(wheel == 2){ch = '|';}
                                        else if(wheel == 3){ch = '`';}
                                }
                                else if(cSel == 2)
                                {
                                             if(wheel == 0){ch = 215;}
                                        else if(wheel == 1){ch = 216;}
                                        else if(wheel == 2){ch = 217;}
                                        else if(wheel == 3){ch = 218;}
                                        else if(wheel == 4){ch = 219;}
                                }
                                cCnt = j + 1;
                                if(cCnt > 100)
                                {
                                        ovf     = 1;
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                        lcd.cursor();
                                        while(digitalRead(30) == 0){}
                                        delay(80);
                                }
                                else
                                {
                                        c[j] = ch;
                                        lcd.noCursor();
                                        lcd.print((char)ch);
                                        lcd.setCursor(2, 1);
                                        lcd.print(cCnt);
                                        lcd.setCursor(19, 0);
                                        while(digitalRead(30) == 0){}
                                        if(enTiCnt == 0)
                                        {
                                                enTiCnt = 1;
                                        }
                                        ti  = 0;
                                        delay(80);
                                        key = 9;
                                }
                        }
                }
                
                //-----key10(Blue1)-----
                
                if(digitalRead(31) == 0)
                {
                        if(cSel == 0)
                        {
                                if(ovf == 1)
                                {
                                        keyPushedErr1(31);
                                }
                                else
                                {
                                        if(key == 0)
                                        {
                                                keyPushedErr2(31);
                                        }
                                        else
                                        {
                                                if(ch >= 97 && ch <= 122)
                                                {
                                                        tone(13, 800);
                                                        delay(80);
                                                        noTone(13);
                                                        ch = ch - 32;
                                                        c[j] = ch;
                                                        lcd.print((char)ch);
                                                        lcd.setCursor(19, 0);
                                                        while(digitalRead(31) == 0){}
                                                        ti = 0;
                                                        delay(80);
                                                }
                                                else if(ch >= 65 && ch <= 90)
                                                {
                                                        tone(13, 800);
                                                        delay(80);
                                                        noTone(13);
                                                        ch = ch + 32;
                                                        c[j] = ch;
                                                        lcd.print((char)ch);
                                                        lcd.setCursor(19, 0);
                                                        while(digitalRead(31) == 0){}
                                                        ti = 0;
                                                        delay(80);
                                                }
                                                else
                                                {
                                                        keyPushedErr2(31);
                                                }
                                        }
                                }
                        }
                        else if(cSel == 1)
                        {
                                if(ovf == 1)
                                {
                                        keyPushedErr1(31);
                                }
                                else
                                {
                                        tone(13, 800);
                                        delay(80);
                                        noTone(13);
                                        if(key != 0 && key != 10)
                                        {
                                                wheel = 0;
                                                lcdUpperLine();
                                                j++;
                                                lcd.setCursor(19, 0);
                                        }
                                        else if(key == 10)
                                        {
                                                wheel++;
                                                if(wheel == 4)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                             if(wheel == 0){ch = '(';}
                                        else if(wheel == 1){ch = ')';}
                                        else if(wheel == 2){ch = '[';}
                                        else if(wheel == 3){ch = ']';}
                                        cCnt = j + 1;
                                        if(cCnt > 100)
                                        {
                                                ovf     = 1;
                                                enTiCnt = 0;
                                                ti      = 0;
                                                key     = 0;
                                                wheel   = 0;
                                                lcd.cursor();
                                                while(digitalRead(31) == 0){}
                                                delay(80);
                                        }
                                        else
                                        {
                                                c[j] = ch;
                                                lcd.noCursor();
                                                lcd.print((char)ch);
                                                lcd.setCursor(2, 1);
                                                lcd.print(cCnt);
                                                lcd.setCursor(19, 0);
                                                while(digitalRead(31) == 0){}
                                                if(enTiCnt == 0)
                                                {
                                                        enTiCnt = 1;
                                                }
                                                ti  = 0;
                                                delay(80);
                                                key = 10;
                                        }
                                }
                        }
                        else if(cSel == 2)
                        {
                                if(ovf == 1)
                                {
                                        keyPushedErr1(31);
                                }
                                else
                                {
                                        if(key == 0)
                                        {
                                                keyPushedErr2(31);
                                        }
                                        else
                                        {
                                                if(ch >= 177 && ch <= 181)
                                                {
                                                        tone(13, 800);
                                                        delay(80);
                                                        noTone(13);
                                                        ch = ch - 10;
                                                        c[j] = ch;
                                                        lcd.print((char)ch);
                                                        lcd.setCursor(19, 0);
                                                        while(digitalRead(31) == 0){}
                                                        ti = 0;
                                                        delay(80);
                                                }
                                                else if(ch >= 167 && ch <= 171)
                                                {
                                                        tone(13, 800);
                                                        delay(80);
                                                        noTone(13);
                                                        ch = ch + 10;
                                                        c[j] = ch;
                                                        lcd.print((char)ch);
                                                        lcd.setCursor(19, 0);
                                                        while(digitalRead(31) == 0){}
                                                        ti = 0;
                                                        delay(80);
                                                }
                                                else if(ch == 194)
                                                {
                                                        tone(13, 800);
                                                        delay(80);
                                                        noTone(13);
                                                        ch = 175;
                                                        c[j] = ch;
                                                        lcd.print((char)ch);
                                                        lcd.setCursor(19, 0);
                                                        while(digitalRead(31) == 0){}
                                                        ti = 0;
                                                        delay(80);
                                                }
                                                else if(ch == 175)
                                                {
                                                        tone(13, 800);
                                                        delay(80);
                                                        noTone(13);
                                                        ch = 194;
                                                        c[j] = ch;
                                                        lcd.print((char)ch);
                                                        lcd.setCursor(19, 0);
                                                        while(digitalRead(31) == 0){}
                                                        ti = 0;
                                                        delay(80);
                                                }
                                                else if(ch >= 212 && ch <= 214)
                                                {
                                                        tone(13, 800);
                                                        delay(80);
                                                        noTone(13);
                                                        ch = ch - 40;
                                                        c[j] = ch;
                                                        lcd.print((char)ch);
                                                        lcd.setCursor(19, 0);
                                                        while(digitalRead(31) == 0){}
                                                        ti = 0;
                                                        delay(80);
                                                }
                                                else if(ch >= 172 && ch <= 174)
                                                {
                                                        tone(13, 800);
                                                        delay(80);
                                                        noTone(13);
                                                        ch = ch + 40;
                                                        c[j] = ch;
                                                        lcd.print((char)ch);
                                                        lcd.setCursor(19, 0);
                                                        while(digitalRead(31) == 0){}
                                                        ti = 0;
                                                        delay(80);
                                                }
                                                else
                                                {
                                                        keyPushedErr2(31);
                                                }
                                        }
                                }
                        }
                }
                
                //-----key11-----
                
                if(digitalRead(32) == 0)
                {
                        if(ovf == 1)
                        {
                                keyPushedErr1(32);
                        }
                        else
                        {
                                tone(13, 800);
                                delay(80);
                                noTone(13);
                                if(key != 0 && key !=11)
                                {
                                        wheel = 0;
                                        lcdUpperLine();
                                        j++;
                                        lcd.setCursor(19, 0);
                                }
                                else if(key == 11)
                                {
                                        wheel++;
                                        if(cSel == 0)
                                        {
                                                if(wheel == 4)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                        else if(cSel == 1)
                                        {
                                                if(wheel == 5)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                        else if(cSel == 2)
                                        {
                                                if(wheel == 6)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                }
                                if(cSel == 0)
                                {
                                             if(wheel == 0){ch = ':';}
                                        else if(wheel == 1){ch = ';';}
                                        else if(wheel == 2){ch = '\'';}
                                        else if(wheel == 3){ch = '"';}
                                }
                                else if(cSel == 1)
                                {
                                             if(wheel == 0){ch = '0';}
                                        else if(wheel == 1){ch = ':';}
                                        else if(wheel == 2){ch = ';';}
                                        else if(wheel == 3){ch = '\'';}
                                        else if(wheel == 4){ch = '"';}
                                }
                                else if(cSel == 2)
                                {
                                             if(wheel == 0){ch = 220;}
                                        else if(wheel == 1){ch = 166;}
                                        else if(wheel == 2){ch = 221;}
                                        else if(wheel == 3){ch = 176;}
                                        else if(wheel == 4){ch = 162;}
                                        else if(wheel == 5){ch = 163;}
                                }
                                cCnt = j + 1;
                                if(cCnt > 100)
                                {
                                        ovf     = 1;
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                        lcd.cursor();
                                        while(digitalRead(32) == 0){}
                                        delay(80);
                                }
                                else
                                {
                                        c[j] = ch;
                                        lcd.noCursor();
                                        lcd.print((char)ch);
                                        lcd.setCursor(2, 1);
                                        lcd.print(cCnt);
                                        lcd.setCursor(19, 0);
                                        while(digitalRead(32) == 0){}
                                        if(enTiCnt == 0)
                                        {
                                                enTiCnt = 1;
                                        }
                                        ti  = 0;
                                        delay(80);
                                        key = 11;
                                }
                        }
                }
                
                //-----key12-----
                
                if(digitalRead(33) == 0)
                {
                        if(ovf == 1)
                        {
                                keyPushedErr1(33);
                        }
                        else
                        {
                                tone(13, 800);
                                delay(80);
                                noTone(13);
                                if(key != 0 && key !=12)
                                {
                                        wheel = 0;
                                        lcdUpperLine();
                                        j++;
                                        lcd.setCursor(19, 0);
                                }
                                else if(key == 12)
                                {
                                        wheel++;
                                        if(cSel == 0 || cSel == 1)
                                        {
                                                if(wheel == 4)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                        else if(cSel == 2)
                                        {
                                                if(wheel == 6)
                                                {
                                                        wheel = 0;
                                                }
                                        }
                                }
                                if(cSel == 0)
                                {
                                             if(wheel == 0){ch = '.';}
                                        else if(wheel == 1){ch = ',';}
                                        else if(wheel == 2){ch = '?';}
                                        else if(wheel == 3){ch = '!';}
                                }
                                else if(cSel == 1)
                                {
                                             if(wheel == 0){ch = '.';}
                                        else if(wheel == 1){ch = ',';}
                                        else if(wheel == 2){ch = '?';}
                                        else if(wheel == 3){ch = '!';}
                                }
                                else if(cSel == 2)
                                {
                                             if(wheel == 0){ch = 222;}
                                        else if(wheel == 1){ch = 223;}
                                        else if(wheel == 2){ch = 164;}
                                        else if(wheel == 3){ch = 161;}
                                        else if(wheel == 4){ch = '?';}
                                        else if(wheel == 5){ch = '!';}
                                }
                                cCnt = j + 1;
                                if(cCnt > 100)
                                {
                                        ovf     = 1;
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                        lcd.cursor();
                                        while(digitalRead(33) == 0){}
                                        delay(80);
                                }
                                else
                                {
                                        c[j] = ch;
                                        lcd.noCursor();
                                        lcd.print((char)ch);
                                        lcd.setCursor(2, 1);
                                        lcd.print(cCnt);
                                        lcd.setCursor(19, 0);
                                        while(digitalRead(33) == 0){}
                                        if(enTiCnt == 0)
                                        {
                                                enTiCnt = 1;
                                        }
                                        ti  = 0;
                                        delay(80);
                                        key = 12;
                                }
                        }
                }
                
                //-----keyGreen-----
                
                if(digitalRead(40) == 0)
                {
                        if(ovf == 1)
                        {
                                keyPushedErr1(40);
                        }
                        else
                        {
                                if(key == 0)
                                {
                                        keyPushedErr1(40);
                                }
                                else
                                {
                                        tone(13, 800);
                                        delay(80);
                                        noTone(13);
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                        lcdUpperLine();
                                        j++;
                                        cCnt = j + 1;
                                        if(cCnt > 100)
                                        {
                                                ovf = 1;
                                        }
                                        lcd.setCursor(19, 0);
                                        lcd.cursor();
                                        while(digitalRead(40) == 0){}
                                        delay(80);
                                }
                        }
                }
                
                //-----keyRed-----
                
                if(digitalRead(41) == 0)
                {
                        if(cCnt == 0)
                        {
                                tone(13, 400);
                                delay(80);
                                noTone(13);
                                clrTi = 0;
                                while(digitalRead(41) == 0)
                                {
                                        if(clrTi > 1300)
                                        {
                                                allCl = 1;
                                                goto LABEL1;
                                        }
                                }
                                delay(80);
                        }
                        else
                        {
                                tone(13, 800);
                                delay(80);
                                noTone(13);
                                if(key == 0)
                                {
                                        j--;
                                        cCnt = j;
                                        c[j] = '\0';
                                        if(ovf == 1)
                                        {
                                                ovf = 0;
                                        }
                                        lcd.noCursor();
                                        lcdUpperLine();
                                }
                                else
                                {
                                        lcd.print(' ');
                                        c[j] = '\0';
                                        cCnt--;
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                }
                                lcd.setCursor(2, 1);
                                lcd.print("   ");
                                lcd.setCursor(2, 1);
                                lcd.print(cCnt);
                                lcd.setCursor(19, 0);
                                lcd.cursor();
                                clrTi = 0;
                                while(digitalRead(41) == 0)
                                {
                                        if(clrTi > 1300)
                                        {
                                                allCl = 1;
                                                goto LABEL1;
                                        }
                                }
                                delay(80);
                        }
                }
                
                //-----keyWhite-----
                
                if(digitalRead(42) == 0)
                {
                        if(ovf == 1)
                        {
                                keyPushedErr1(42);
                        }
                        else
                        {
                                tone(13, 800);
                                delay(80);
                                noTone(13);
                                if(key > 0)
                                {
                                        lcdUpperLine();
                                        j++;
                                        lcd.setCursor(19, 0);
                                }
                                ch = ' ';
                                cCnt = j + 1;
                                if(cCnt > 100)
                                {
                                        c[j] = ch;
                                        ovf     = 1;
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                        lcd.cursor();
                                        while(digitalRead(23) == 0){}
                                        delay(80);
                                }
                                else
                                {
                                        c[j] = ch;
                                        lcd.noCursor();
                                        lcd.print((char)ch);
                                        lcd.setCursor(2, 1);
                                        lcd.print(cCnt);
                                        lcdUpperLine();
                                        j++;
                                        cCnt = j + 1;
                                        if(cCnt > 100)
                                        {
                                                ovf = 1;
                                        }
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                        lcd.setCursor(19, 0);
                                        lcd.cursor();
                                        while(digitalRead(42) == 0){}
                                        delay(80);
                                }
                        }
                }
                
                //-----keyOrange-----
                
                if(digitalRead(43) == 0)
                {
                        if(ovf == 1)
                        {
                                keyPushedErr1(43);
                        }
                        else
                        {
                                tone(13, 800);
                                delay(80);
                                noTone(13);
                                if(key > 0)
                                {
                                        enTiCnt = 0;
                                        ti      = 0;
                                        key     = 0;
                                        wheel   = 0;
                                        lcdUpperLine();
                                        j++;
                                        cCnt = j + 1;
                                        if(cCnt > 100)
                                        {
                                                ovf = 1;
                                        }
                                }
                                cSel++;
                                if(cSel == 3)
                                {
                                        cSel = 0;
                                }
                                lcd.noCursor();
                                lcd.setCursor(0, 1);
                                if(cSel == 0)
                                {
                                        lcd.print('A');
                                }
                                else if(cSel == 1)
                                {
                                        lcd.print('N');
                                }
                                else if(cSel == 2)
                                {
                                        lcd.print('K');
                                }
                                lcd.setCursor(19, 0);
                                lcd.cursor();
                                while(digitalRead(43) == 0){}
                                delay(80);
                        }
                }
                
                //-----timeOut-----
                
                if(ti > 1000)
                {
                        enTiCnt = 0;
                        ti      = 0;
                        key     = 0;
                        wheel   = 0;
                        lcdUpperLine();
                        j++;
                        cCnt = j + 1;
                        if(cCnt > 100)
                        {
                                ovf = 1;
                        }
                        lcd.setCursor(19, 0);
                        lcd.cursor();
                }
                
                //-----keyTweet-----
                
                if(digitalRead(44) == 0)
                {
                        tone(13, 400);
                        delay(80);
                        tone(13, 800);
                        delay(80);
                        noTone(13);
                        while(digitalRead(44) == 0){}
                        delay(80);
                        snd = 1;
                        goto LABEL1;
                }
        }
        
        LABEL1:
        if(allCl == 1)
        {
                lcd.noCursor();
                lcd.clear();
                lcd.setCursor(0, 1);
                lcd.print('A');
                lcd.setCursor(2, 1);
                lcd.print('0');
                tone(13, 800);
                delay(1000);
                noTone(13);
                for(i = 0; i < 100; i++)
                {
                        c[i] = '\0';
                }
                j       = 0;
                cCnt    = 0;
                ovf     = 0;
                enTiCnt = 0;
                ti      = 0;
                key     = 0;
                wheel   = 0;
                cSel    = 0;
                allCl   = 0;
                while(digitalRead(41) == 0){}
                lcd.setCursor(19, 0);
                lcd.cursor();
        }
        else if(snd == 1)
        {
                unsigned char sBuf[301];
                
                for(i = 0; i < 300; i++)
                {
                        sBuf[i] = '\0';
                }
                i = 0;
                j = 0;
                while(c[j] != '\0')
                {
                        if(c[j] >= 21 && c[j] <= 126)
                        {
                                sBuf[i] = c[j];
                                i++;
                                j++;
                        }
                        else if(c[j] >= 161 && c[j] <= 191) //CONVERT TO UTF8
                        {
                                sBuf[i] = 0xEF;
                                i++;
                                sBuf[i] = 0xBD;
                                i++;
                                sBuf[i] = c[j];
                                i++;
                                j++;
                        }
                        else if(c[j] >= 192 && c[j] <= 223) //CONVERT TO UTF8
                        {
                                sBuf[i] = 0xEF;
                                i++;
                                sBuf[i] = 0xBE;
                                i++;
                                sBuf[i] = c[j];
                                sBuf[i] = sBuf[i] - 0x40;
                                i++;
                                j++;
                        }
                        else
                        {
                                j++;
                        }
                }
                lcd.noCursor();
                for(i = 6; i < 20; i++)
                {
                        lcd.setCursor(i, 1);
                        lcd.print(' ');
                }
                lcd.setCursor(6, 1);
                lcd.print("CONNECT");
                delay(1000);
                if (twitter.post((char*)sBuf))
                {
                        int status = twitter.wait();
                        if (status == 200)
                        {
                                for(i = 6; i < 20; i++)
                                {
                                        lcd.setCursor(i, 1);
                                        lcd.print(' ');
                                }
                                lcd.setCursor(6, 1);
                                lcd.print("TWEET OK");
                                delay(1000);
                                lcd.clear();
                                lcd.setCursor(0, 1);
                                lcd.print('A');
                                lcd.setCursor(2, 1);
                                lcd.print('0');
                                for(i = 0; i < 100; i++)
                                {
                                        c[i] = '\0';
                                }
                                j       = 0;
                                cCnt    = 0;
                                ovf     = 0;
                                enTiCnt = 0;
                                ti      = 0;
                                key     = 0;
                                wheel   = 0;
                                cSel    = 0;
                        }
                        else
                        {
                                for(i = 6; i < 20; i++)
                                {
                                        lcd.setCursor(i, 1);
                                        lcd.print(' ');
                                }
                                lcd.setCursor(6, 1);
                                lcd.print("ERROR: ");
                                lcd.print(status);
                                delay(1000);
                                for(i = 6; i < 20; i++)
                                {
                                        lcd.setCursor(i, 1);
                                        lcd.print(' ');
                                }
                        }
                }
                else
                {
                        for(i = 6; i < 20; i++)
                        {
                                lcd.setCursor(i, 1);
                                lcd.print(' ');
                        }
                        lcd.setCursor(6, 1);
                        lcd.print("CONNECT ERROR");
                        delay(1000);
                        for(i = 6; i < 20; i++)
                        {
                                lcd.setCursor(i, 1);
                                lcd.print(' ');
                        }
                }
                snd = 0;
                lcd.setCursor(19, 0);
                lcd.cursor();
        }
}