Advertisement
CaReCoiN

Monitor PC Patentado

Feb 17th, 2023
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Wire.h> // Comes with Arduino IDE
  2. #include <LiquidCrystal_I2C.h> // von F Malpartida LiquidCrystal_V1.2.1.zip
  3.  
  4. LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
  5.  
  6.  
  7.  
  8. void setup()   /*----( SETUP: RUNS ONCE )----*/
  9. {
  10.   Serial.begin(9600);  // Used to type in characters
  11.   lcd.begin(20,4);   // initialize the lcd for 16 chars 2 lines
  12.   lcd.backlight(); // backlight on
  13.  
  14.   lcd.setCursor(0,0);
  15.   lcd.print("Monitor PC Patentado");
  16.   lcd.setCursor(0,1);
  17.   lcd.print("WUE HON | para idkzx");
  18.   lcd.setCursor(0,2);
  19.   lcd.print("  RS232 9600 8.N.1");
  20.   lcd.setCursor(0,3);
  21.   lcd.print("     compmun.do");
  22.   delay(2000);
  23.   lcd.clear();
  24. }
  25.   byte serial_getch(){
  26.  
  27.   int incoming;
  28.  
  29.   while(Serial.available()==0){} // read the incoming byte:
  30.   incoming = Serial.read();
  31.  
  32.   return (byte) (incoming &0xff);
  33. }
  34.  
  35. void loop()
  36. {
  37.   byte rxbyte;
  38.   byte temp;
  39.   byte col;
  40.   byte row;
  41.   uint8_t location;
  42.   uint8_t charMap[7];
  43.  
  44.  
  45.   rxbyte = serial_getch();
  46.  
  47.   if (rxbyte == 254) // Matrix Orbital uses 254 prefix for commands
  48.   {
  49.     switch (serial_getch())
  50.     {
  51.       case 66: //backlight on (at previously set brightness)
  52.       lcd.backlight();     // Backlight on
  53.       break;
  54.      
  55.       case 70: //backlight off
  56.       lcd.noBacklight();     // Backlight off
  57.       break;
  58.      
  59.       case 71:  //set cursor position
  60.                 col = (serial_getch() - 1);  //get column byte
  61.                                 row = (serial_getch());
  62.                                
  63. /*
  64.         switch (serial_getch())  //get row byte
  65.         {
  66.           //line 1 is already set up
  67.           case 2:
  68.           temp += 0x40;
  69.           break;
  70.           case 3:
  71.           temp += 0x14;
  72.           break;
  73.           case 4:
  74.           temp += 0x54;
  75.           break;
  76.           default:
  77.           break;
  78.         }
  79. */
  80.         lcd.setCursor(col,row-1);
  81.         break;
  82.        
  83.         case 72:  //cursor home (reset display position)
  84.         lcd.home (); // go to home position
  85.         break;
  86.        
  87.         case 74:  //show underline cursor
  88.         lcd.cursor(); // Turns the underline cursor on
  89.         break;
  90.        
  91.         case 75:  //underline cursor off
  92.         lcd.noCursor(); // Turns the underline cursor off
  93.         break;
  94.        
  95.         case 76:  //move cursor left
  96.         lcd.moveCursorLeft();
  97.         break;
  98.        
  99.         case 77:  //move cursor right
  100.         lcd.moveCursorRight();
  101.         break;
  102.        
  103.         case 78:  //define custom char
  104.         //location = 64+serial_getch()*8;
  105.         location = serial_getch();
  106.         for (temp = 0; temp < 8; temp++)
  107.         {
  108.           charMap[temp] = serial_getch(); //get each pattern byte
  109.         }
  110.         lcd.createChar(location, charMap);
  111.         break;
  112.        
  113.         case 81: //auto scroll on
  114.         lcd.autoscroll();
  115.         break;
  116.        
  117.         case 82: //auto scroll off
  118.         lcd.noAutoscroll();
  119.         break;
  120.        
  121.         case 83:  //show blinking block cursor
  122.         lcd.blink();
  123.         break;
  124.        
  125.         case 84:  //block cursor off
  126.         lcd.noBlink(); // Turns the underline cursor off
  127.         break;
  128.        
  129.         case 86:  //GPO OFF
  130.         //implement later
  131.         break;
  132.         case 87:  //GPO ON
  133.         /*temp = serial_getch();
  134.         if (temp == 1)
  135.         {
  136.           GPO1 = GPO_ON;
  137.         }*/
  138.         break;
  139.        
  140.         case 88:  //clear display, cursor home
  141.         lcd.clear(); // clear display,
  142.         break;
  143.        
  144.         case 152: //set and remember (doesn't save value, though)
  145.         break;
  146.        
  147.         case 153: //set backlight brightness
  148.         //not implemented
  149.         break;
  150.        
  151.         //these commands ignored (no parameters)
  152.         case 35: //read serial number
  153.         case 36: //read version number
  154.         case 55: //read module type
  155.         case 59: //exit flow-control mode
  156.         case 65: //auto transmit keypresses
  157.         case 96: //auto-repeat mode off (keypad)
  158.         case 67: //auto line-wrap on
  159.         case 68: //auto line-wrap off
  160.         case 104: //init horiz bar graph
  161.         case 109: //init med size digits
  162.         case 115: //init narrow vert bar graph
  163.         case 118: //init wide vert bar graph
  164.         break;
  165.         default:
  166.         //all other commands ignored and parameter byte discarded
  167.         temp = serial_getch();  //dump the command code
  168.         break;
  169.       }
  170.       return;
  171.     }   //END OF COMMAND HANDLER
  172.    
  173.     //change accented char to plain, detect and change descenders
  174.     //NB descenders only work on 5x10 displays. This lookup table works
  175.     //  with my DEM-20845 (Display Elektronik GmbH) LCD using KS0066 chip.
  176.     switch (rxbyte)
  177.     {
  178.     //chars that have direct equivalent in LCD charmap
  179.     /*    
  180.             case 0x67: //g
  181.                 rxbyte = 0xE7;
  182.                 break;
  183.             case 0x6A: //j
  184.                 rxbyte = 0xEA;
  185.                 break;
  186.             case 0x70: //p
  187.                 rxbyte = 0xF0;
  188.                 break;
  189.             case 0x71: //q
  190.                 rxbyte = 0xF1;
  191.                 break;
  192.             case 0x79: //y
  193.                 rxbyte = 0xF9;
  194.                 break;
  195.      */
  196.      case 0xE4: //ASCII "a" umlaut
  197.     rxbyte = 0xE1;
  198.     break;
  199.    
  200.     case 0xF1: //ASCII "n" tilde
  201.     rxbyte = 0xEE;
  202.     break;
  203.    
  204.     case 0xF6: //ASCII "o" umlaut
  205.     rxbyte = 0xEF;
  206.     break;
  207.    
  208.     case 0xFC: //ASCII "u" umlaut
  209.     rxbyte = 0xF5;
  210.     break;
  211.  
  212.     //accented -> plain equivalent
  213.     //and misc symbol translation
  214.     case 0xA3: //sterling (pounds)
  215.     rxbyte = 0xED;
  216.     break;
  217.    
  218.     case 0x00: //degrees symbol
  219.     rxbyte = 0xDF;
  220.     break;
  221.    
  222.     case 0x01: // full Block
  223.     rxbyte = 0xFF;
  224.     break;
  225.    
  226.     case 0xB5: //mykro
  227.     rxbyte = 0xE4;
  228.     break;
  229.    
  230.     case 0xC0: //"A" variants
  231.     case 0xC1:
  232.     case 0xC2:
  233.     case 0xC3:
  234.     case 0xC4:
  235.     case 0xC5:
  236.     rxbyte = 0x41;
  237.     break;
  238.    
  239.     case 0xC8: //"E" variants
  240.     case 0xC9:
  241.     case 0xCA:
  242.     case 0xCB:
  243.     rxbyte = 0x45;
  244.     break;
  245.    
  246.     case 0xCC: //"I" variants
  247.     case 0xCD:
  248.     case 0xCE:
  249.     case 0xCF:
  250.     rxbyte = 0x49;
  251.     break;
  252.    
  253.     case 0xD1: //"N" tilde -> plain "N"
  254.     rxbyte = 0x43;
  255.     break;
  256.    
  257.     case 0xD2: //"O" variants
  258.     case 0xD3:
  259.     case 0xD4:
  260.     case 0xD5:
  261.     case 0xD6:
  262.     case 0xD8:
  263.     rxbyte = 0x4F;
  264.     break;
  265.    
  266.     case 0xD9: //"U" variants
  267.     case 0xDA:
  268.     case 0xDB:
  269.     case 0xDC:
  270.     rxbyte = 0x55;
  271.     break;
  272.    
  273.     case 0xDD: //"Y" acute -> "Y"
  274.     rxbyte = 0x59;
  275.     break;
  276.    
  277.     case 0xDF: // -- ß --
  278.     rxbyte = 0xE2;
  279.     break;
  280.    
  281.     case 0xE0: //"a" variants except umlaut
  282.     case 0xE1:
  283.     case 0xE2:
  284.     case 0xE3:
  285.     case 0xE5:
  286.     rxbyte = 0x61;
  287.     break;
  288.    
  289.     case 0xE7: //"c" cedilla -> "c"
  290.     rxbyte = 0x63;
  291.     break;
  292.    
  293.     case 0xE8: //"e" variants
  294.     case 0xE9:
  295.     case 0xEA:
  296.     case 0xEB:
  297.     rxbyte = 0x65;
  298.     break;
  299.    
  300.     case 0xEC: //"i" variants
  301.     case 0xED:
  302.     case 0xEE:
  303.     case 0xEF:
  304.     rxbyte = 0x69;
  305.     break;
  306.    
  307.     case 0xF2: //"o" variants except umlaut
  308.     case 0xF3:
  309.     case 0xF4:
  310.     case 0xF5:
  311.     case 0xF8:
  312.     rxbyte = 0x6F;
  313.     break;
  314.    
  315.     case 0xF7: //division symbol
  316.     rxbyte = 0xFD;
  317.     break;
  318.    
  319.     case 0xF9: //"u" variants except umlaut
  320.     case 0xFA:
  321.     case 0xFB:
  322.     rxbyte = 0x75;
  323.     break;
  324.     default:
  325.     break;
  326.     }
  327.     lcd.print((char)rxbyte);  //otherwise a plain char so we print it to lcd
  328.     return;
  329.     }
  330.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement