CUBING AND ELECTRONICS STARTS HERE



Girl in a jacket
star

Oled Displaying images


  
  
  In this project an SPI OLED (128 X 64) monochrome display is used 
  along with arduino to display images
  For that the images were converted into HEX code
  Adafruit SSD1306 library was used for this purpose
  
  

Visitor Hit Counter

Clock and Calendar on Raspberry Pi using Java



 This is the tutorial for displaying clock and calendar on Raspberry Pi 3b+ 
 along with weather updates  using a java and
   3.5 inch TFT arduino shied
  
 
 
  
 
 
  
project diagram
  For this project I have used   Raspberry Pi 3B+ module 
  3.5 inch TFT arduino shield having controller    ili9486   
   and connecting wires
  
  
  
 
  The pin connection is based on wiring4j 
  
  
  The  diagram shows how to connect Raspberry Pi pins with tft arduino shield


project diagram

 After the connections are done.
 	
 Download the pi4j Library  with the help of the link given below	
 	

 pi4j library





  
 
  Install   openjdk11 on your raspberry pi..the same jdk version should be on your laptop
  You can refer the link given below 
  install openjdk11
 
  
  Download the following softwares on your laptop 
   WinSCP (for transferring files from laptop to raspi)
   RealVNC (for virtually connecting laptop and raspi)
     
  
  
  
  
  Open Eclipse ide on laptop
  
  File --> New --> Java Project-->In Project name --> Raspi -->Finish
  
  Add all  the downloaded  pi4j jarfiles in the project
  
  
project diagram
  
  Open the Project
  
  
  src --> New -->Package -->controller-->Finish
 
  controller--> New --> Class --> TFT -->Finish 
  
  
project diagram
  
  
  Refer the code given in the link and use that in your   class
 
  github link 
  
  Scroll to the TFT.java -->Right click--> Run as-->Java Application
  
  The console will show error ignore it for now as we are going to transfer our file to Raspberry Pi
  
  Right Click on the Raspi Project-->Export -->Java--> Runnable JAR file -->Next
  
  Launch configuration -->   TFT -Raspi
  
  Export designation --> C:\User...\tft96.jar
  
  
  
project diagram
  
  
  
  
  
  Open the    WinSCP software
  login Screen will appear
  
  Host Name : 192.168.0.21  WinSCP  (your assigned ip address)
  User Name :   pi (your assigned username) Password:  123456  (your assigned password)
  Drag the file  tft96.jar and bird.csv   from laptop to Raspberry Pi
  
  
  
  
   
project diagram
  
  
  Open the   RealVNC Software
  
  
  File -->New Connection
  VNC Server : 192.168.0.21  192.168.0.21  (ip address of pi)
  Name :   pi@21 click OK
  
  A new window will appear click on the icon pi@21
  Username:     Pi  (your assigned username for pi)
  Password :  123456 (your assigned password for pi)
  
  
project diagram
   
   You will see Raspberry Pi   screen on VNC
   Click on the Raspberry Pi   icon --->Accessories -->Terminal


    After it opens type 
   
                      cd Desktop    
                                                  
                      ls
                      sudo java -jar tft96.jar
                     
                     
                     Note: Type the name of your jar file instead of tft96.jar
                                                  Press Enter   
   
   
project diagram

Oled on Raspberrypi using java                                  



  This is the tutorial for interfacing oled on Raspberry pi using java 
  Most tutorials on the web are python based  so I thought why not 
  give it a try using java
  
  
  For this project I have used   Raspberry Pi 3B+ module 
  6 pin oled (128x64) and connecting wires
  
  
  
 
  The pin connection is based on wiring4j 
  Please visit pi4j website for downloading the libraries and pin description
 	
 Download the pi4j Library for the same with the help of the link given below	
 	

 pi4j library

  
circuit diagram
  Its a prerequisite that you visit tutorials on oled 
  Install   openjdk11 on your raspberry pi..the same jdk version should be on your laptop
  You can refer the link given below 
  install openjdk11
 
  
  Download the following softwares on your laptop 
   WinSCP (for transferring files from laptop to raspi)
   RealVNC (for virtually connecting laptop and raspi)
     
  
  
  
  
  Open Eclipse ide on laptop
  
  File --> New --> Java Project-->In Project name --> Raspi -->Finish
  
  
project diagram
  
  Open the Project
  
  
  src --> New -->Package -->controller1-->Finish
 
  controller1--> New --> Class --> Oled -->Finish 
  
  
project diagram
  
  
  Refer the code given below and use that in your   class
  
  
  Scroll to the Oled.java -->Right click--> Run as-->Java Application
  
  The console will show error ignore it for now as we are going to transfer our file to Raspberry Pi
  
  Right Click on the Raspi Project-->Export -->Java--> Runnable JAR file -->Next
  
  Launch configuration -->   oled -Raspi
  
  Export designation --> C:\User...\oled102.jar
  
  
  
project diagram
CODE

 package controller;


import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.concurrent.TimeUnit;

import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.RaspiPin;








public class oled {     

	
	static int count=0;
	
	
	static GpioController gpioController= GpioFactory.getInstance();
	
	static GpioPinDigitalOutput DC= gpioController.provisionDigitalOutputPin(RaspiPin.GPIO_04);
	static GpioPinDigitalOutput SDK= gpioController.provisionDigitalOutputPin(RaspiPin.GPIO_05);
	static GpioPinDigitalOutput SCLK= gpioController.provisionDigitalOutputPin(RaspiPin.GPIO_06);
	static GpioPinDigitalOutput RESET= gpioController.provisionDigitalOutputPin(RaspiPin.GPIO_03);
	static GpioPinDigitalOutput led= gpioController.provisionDigitalOutputPin(RaspiPin.GPIO_02);
	
	
	
	
	static String SSD1306_PIXEL_WIDTH=inttohex(128);
	static String  SSD1306_PIXEL_HEIGHT=inttohex(64);
	static String  SSD1306_PAGE_COUNT=inttohex(8);
	static String  SSD1306_PAGE_HEIGHT= inttohex(2);
	//static String  SSD1306_SEGMENT_COUNT= inttohex(7808);//7808 //check
	static String  SSD1306_FONT_WIDTH=inttohex(1);

	
	//fundamental commands
	

	static String  SSD1306_SET_CONTRAST        =inttohex(129);
	static String  SSD1306_CONTRAST_DEFAULT    = inttohex(127);  //  0b01111111
	static String  SSD1306_DISPLAY             =inttohex(164); //           0b10100100
	static String  SSD1306_DISPLAY_RESET       =inttohex(164); //         SSD1306_DISPLAY
	static String  SSD1306_DISPLAY_ALLON       =inttohex(165); //        SSD1306_DISPLAY | 0b01
	static String  SSD1306_DISPLAY_NORMAL      =inttohex(166); //       SSD1306_DISPLAY | 0b10
	static String  SSD1306_DISPLAY_INVERSE     =inttohex(166); //      SSD1306_DISPLAY | 0b11
	static String  SSD1306_DISPLAY_SLEEP       =inttohex(174); //      SSD1306_DISPLAY | 0b1110
	static String  SSD1306_DISPLAY_ON          =inttohex(175); //     SSD1306_DISPLAY | 0b1111
	static String  SSD1306_DISPLAYALLON_RESUME =inttohex(164); // 0xA4

	// addressing
	static String  SSD1306_ADDRESSING              = inttohex(32);  // 0x20
	static String  SSD1306_ADDRESSING_HORIZONTAL   = inttohex(0);  //
	static String  SSD1306_ADDRESSING_VERTICAL     = inttohex(1);  //
	static String  SSD1306_ADDRESSING_PAGE         = inttohex(2);  //
	static String  SSD1306_SET_COLUMN              = inttohex(33);  // 0x21
	static String  SSD1306_SET_PAGE               = inttohex(34);  // 0x22

	// hardware configuration
	static String  SSD1306_SET_START_LINE          = inttohex(64);  // 0x40
	static String  SSD1306_START_LINE_DEFAULT       = inttohex(0);  //
	static String  SSD1306_SET_SEG_SCAN             = inttohex(160);  // 0xA0
	static String  SSD1306_SET_SEG_SCAN_DEFAULT    = inttohex(160);  // SSD1306_SET_SEG_SCAN | 0b00
	static String  SSD1306_SET_SEG_SCAN_REVERSE     = inttohex(161);  //SSD1306_SET_SEG_SCAN | 0b01
	static String  SSD1306_SET_MULTIPLEX_RATIO      = inttohex(168);  //0b10101000 // 0xA8
	static String  SSD1306_MULTIPLEX_RATIO_DEFAULT = inttohex(63);  // 0b00111111
	static String  SSD1306_SET_COM_SCAN             = inttohex(192);  // 0xC0
	static String  SSD1306_SET_COM_SCAN_DEFAULT     = inttohex(192);  //SSD1306_SET_COM_SCAN | 0b0000
	static String  SSD1306_SET_COM_SCAN_REVERSE     = inttohex(200);  //SSD1306_SET_COM_SCAN | 0b1000
	static String  SSD1306_SET_DISPLAY_OFFSET       = inttohex(211);  // // 0xD3
	static String  SSD1306_DISPLAY_OFFSET_DEFAULT  = inttohex(0);  // 0b00000000
	static String  SSD1306_SET_COM_PINS             = inttohex(218);  //// 0xDA
	static String  SSD1306_COM_PINS_DEFAULT         = inttohex(18);  //

	// timing and driving
	static String  SSD1306_SET_CLOCK_FREQUENCY    = inttohex(213);  // 0xD5
	static String  SSD1306_CLOCK_FREQUENCY_DEFAULT = inttohex(128);  //
	static String  SSD1306_SET_PRECHARGE           = inttohex(217);  //0xD9
	static String  SSD1306_PRECHARGE_DEFAULT       = inttohex(34);  //
	static String  SSD1306_SET_VCOMH_DESELECT      = inttohex(219);  // 0xDB
	static String  SSD1306_VCOMH_DESELECT_DEFAULT  = inttohex(32);  //
	static String  SSD1306_SET_CHARGE_PUMP         = inttohex(141);  // 0x8D
	static String  SSD1306_CHARGE_PUMP_ENABLE      = inttohex(20);  //
	static String  SSD1306_NOP = inttohex(227);  //0xE3
	
	
   
	
	
	
	
	
	
	public static void main(String[] args) 
	
	
	{
		
		
		System.out.println("oled code started");
		
		
		led.high();
		try {
			TimeUnit.MICROSECONDS.sleep(1000000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		
		led.low();
		
		try {
			TimeUnit.MICROSECONDS.sleep(1000000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
		
		
		
		
		OledInit();
		System.out.println("oled initialization done");
		oledClear();
		System.out.println("oled cleared");
		
		
		//oledClearAgain();
		//System.out.println("oled cleared again");
		
		while(true)
		{
			 
			
			
         
		   
		    
		       

		        
	        
		     oledWriteString(1,1,"hello world");
			
			      

		   
			
	     
	      

			
		}
		

	}
	
	
	
	public static String inttohex(int data)
	{
		
		
String val2= Integer.toHexString(data);
		
		
		if(val2.equals("0"))
			val2="00";
		
		
		if(val2.equals("1"))
			val2="01";
		
		if(val2.equals("2"))
			val2="02";
		
		
		if(val2.equals("3"))
			val2="03";
		
		if(val2.equals("4"))
			val2="04";
		
		
		if(val2.equals("5"))
			val2="05";
		
		if(val2.equals("6"))
			val2="06";
		
		if(val2.equals("7"))
			val2="07";
		
		if(val2.equals("8"))
			val2="08";
		
		if(val2.equals("9"))
			val2="09";
		
		
		
		if(val2.equals("a"))
			val2="0a";
		
		if(val2.equals("b"))
			val2="0b";
		
		if(val2.equals("c"))
			val2="0c";
		
		if(val2.equals("d"))
			val2="0d";
		
		if(val2.equals("e"))
			val2="0e";
		
		if(val2.equals("f"))
			val2="0f";
		
		
		return val2;
		
		
	}
	
	
	
	
	
	 static void oledWriteCmd(String ledcmd)
	 {
	   
		 DC.low();
		 String part1=ledcmd.substring(0, 1);
		 String part2=ledcmd.substring(1, 2);
		 
		 
		 //System.out.println("part1 is : "+part1);   
		 
		 
		 //System.out.println("part2 is : "+part2);   
		 
		 
		 String finalpart1=intto4bit(part1);
		 String finalpart2=intto4bit(part2);
		 
		 String finalpart= finalpart1+ finalpart2;
		 
	
		
		 
		  int countcmd=0;
		 while(countcmd<8)
		 {
			
			 
			 int sdkcmd= Integer.parseInt(finalpart.substring(countcmd, countcmd+1));
			 
			 //System.out.println("sdk is : "+sdkdata);
			 
			 
			 if(sdkcmd==1)
			 {
				 SDK.high();
				 
			 }
			 
			 
			 else
				 
			 {
				 
				 SDK.low();
			 }
			 
			 
			 
              SCLK.high();
			 
			 try {
				TimeUnit.MICROSECONDS.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			 
			 
			 SCLK.low();
			 
			 try {
					TimeUnit.MICROSECONDS.sleep(100);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			 
			 countcmd++;
			 
		 }
		 
		 
		 

	   
	 }
	
	
	
	 static void oledWriteData(String leddata)
	 {
	   
		 DC.high();
		 String part1=leddata.substring(0, 1);
		 String part2=leddata.substring(1, 2);
		 
		 
		 //System.out.println("part1 is : "+part1);   
		 
		 
		 //System.out.println("part2 is : "+part2);   
		 
		 
		 String finalpart1=intto4bit(part1);
		 String finalpart2=intto4bit(part2);
		 
		 String finalpart= finalpart1+ finalpart2;
		 
	
		
		 
		 count=0;
		 while(count<8)
		 {
			
			 
			 int sdkdata= Integer.parseInt(finalpart.substring(count, count+1));
			 
			 //System.out.println("sdk is : "+sdkdata);
			 
			 
			 if(sdkdata==1)
			 {
				 SDK.high();
				 led.high();
				  //System.out.println("reached here sdkdata high");
				 
			 }
			 
			 
			 else
				 
			 {
				 
				 SDK.low();
				 led.low();
				  //System.out.println("reached here sdk data low");
			 }
			 
			 
                 SCLK.high();
			 
			 try {
				TimeUnit.MICROSECONDS.sleep(200);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			 
			 
			 SCLK.low(); 
		
			 
			 try {
					TimeUnit.MICROSECONDS.sleep(200);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			 
			 count++;
			 
		 }
		 
		 
		 

	   
	 }
	 
	 
	 
	 
	 
	 
	static void OledInit()
	 {
	   
	  
	  RESET.low();
	   
	  try {
			TimeUnit.MICROSECONDS.sleep(5);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    
	   RESET.high();

	   oledWriteCmd(SSD1306_SET_MULTIPLEX_RATIO);
	   System.out.println("reached here 1");
	   oledWriteCmd(SSD1306_MULTIPLEX_RATIO_DEFAULT); 
	   System.out.println("reached here 2");
	   oledWriteCmd(SSD1306_DISPLAY_RESET); 
	   System.out.println("reached here 3");
	   oledWriteCmd(SSD1306_SET_DISPLAY_OFFSET);
	   System.out.println("reached here 4");
	   oledWriteCmd(SSD1306_DISPLAY_OFFSET_DEFAULT); 
	   System.out.println("reached here 5");
	   oledWriteCmd(SSD1306_START_LINE_DEFAULT); //check
	   System.out.println("reached here 6");
	   
	   oledWriteCmd(SSD1306_SET_SEG_SCAN_REVERSE);
	   System.out.println("reached here 7");
	   oledWriteCmd(SSD1306_SET_COM_SCAN_REVERSE);
	   System.out.println("reached here 8");
	   oledWriteCmd(SSD1306_SET_COM_PINS); 
	   
	   oledWriteCmd(SSD1306_COM_PINS_DEFAULT);
	

	   oledWriteCmd(SSD1306_SET_CONTRAST); 
	 
	   
	   String var1=  inttohex(255);
	 
	   
	   oledWriteCmd(var1); 
	 
	   
	   
       String var2=   inttohex(164);
       
	   
	   oledWriteCmd(var2); 
	   
	   
       String var3=   inttohex(166);
      
	   
	   oledWriteCmd(var3); 
	   

	 
	    

	   oledWriteCmd(SSD1306_SET_CLOCK_FREQUENCY);  
	  
        String var4=   inttohex(242);
	   
	   
	   oledWriteCmd(var4); 

	  
	   
	   oledWriteCmd(SSD1306_SET_CHARGE_PUMP); 
	   oledWriteCmd(SSD1306_CHARGE_PUMP_ENABLE); 
   
	 

	   oledWriteCmd(SSD1306_SET_PRECHARGE);  
	   oledWriteCmd(SSD1306_PRECHARGE_DEFAULT); 

	   
	  
	   oledWriteCmd(SSD1306_SET_VCOMH_DESELECT);
	   oledWriteCmd(SSD1306_VCOMH_DESELECT_DEFAULT); 
	   
	  

	   oledWriteCmd(SSD1306_DISPLAY_ON); 
	   oledWriteCmd(SSD1306_DISPLAY_RESET);
	   System.out.println("completed initialization");

	 }
	 
	 
	

	
	
    static	void oledClear() {
		  oledWriteCmd(SSD1306_DISPLAY_SLEEP);            
		  oledWriteCmd(SSD1306_ADDRESSING);               
		  oledWriteCmd(SSD1306_ADDRESSING_HORIZONTAL);   
		 // String var5=inttohex(0);
		 for(int i=0; i<1024; i++) 
		  oledWriteData(inttohex(0));    
		  
		  oledWriteCmd(SSD1306_ADDRESSING);               
		  oledWriteCmd(SSD1306_ADDRESSING_PAGE);         
		  oledWriteCmd(SSD1306_DISPLAY_ON);               
		  oledWriteCmd(SSD1306_DISPLAY_RESET);           
		  }

	 
	 
	
    

static void oledSetXY(int x, int y) {
  oledWriteCmd(SSD1306_SET_COLUMN);
  
  String var6=inttohex(x);
  
  String var7=inttohex(y);
  
  
  oledWriteCmd(var6);      
  oledWriteCmd(inttohex(127));    
  oledWriteCmd(SSD1306_SET_PAGE);            
  oledWriteCmd(var7);                           
  oledWriteCmd(inttohex(63));     
}

    



static void oledWriteChar(String string)
{

    switch(string)
    {


         case "!":
        
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(95));
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(0));
        
         break;

/*
        case '"':
      
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(7));
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(7));
          oledWriteData(inttohex(0));
        
         break;
  */     
          case "#":
      
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(20));
        
         break;

        case "$":
      
          oledWriteData(inttohex(36));
          oledWriteData(inttohex(42));
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(42));
          oledWriteData(inttohex(18));
        
         break;

         case "%":
      
          oledWriteData(inttohex(35));
          oledWriteData(inttohex(19));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(100));
          oledWriteData(inttohex(98));
        
         break;


          case "&":
      
          oledWriteData(inttohex(54));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(85));
          oledWriteData(inttohex(34));
          oledWriteData(inttohex(80));
        
         break;

         
         case "(":
      
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(28));
          oledWriteData(inttohex(34));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(0));
        
         break;
     
         case ")":
      
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(34));
          oledWriteData(inttohex(28));
          oledWriteData(inttohex(0));
        
         break;
       
          case "*":
      
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(62));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(20));
        
         break;
    
          case "+":
      
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(62));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(8));
        
         break;

         

          case ",":
      
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(80));
          oledWriteData(inttohex(48));
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(0));
        
         break;

          
           case "-":
      
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(8));
        
         break;
     
     
           case ".":
      
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(96));
          oledWriteData(inttohex(96));
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(0));
        
         break;

        
            case "/":
      
          oledWriteData(inttohex(32));
          oledWriteData(inttohex(16));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(4));
          oledWriteData(inttohex(2));
        
         break;


           case "0":
      
          oledWriteData(inttohex(62));
          oledWriteData(inttohex(81));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(69));
          oledWriteData(inttohex(62));
        
         break;


          
           case "1":
      
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(66));
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(0));
        
         break;

          case "2":
      
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(66));
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(0));
        
         break;



        case "3":
      
          oledWriteData(inttohex(33));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(69));
          oledWriteData(inttohex(75));
          oledWriteData(inttohex(49));
        
         break;

       
        case "4":
      
          oledWriteData(inttohex(24));
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(18));
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(16));
        
         break;

   


          case "5":
      
          oledWriteData(inttohex(39));
          oledWriteData(inttohex(69));
          oledWriteData(inttohex(69));
          oledWriteData(inttohex(69));
          oledWriteData(inttohex(57));
        
         break;


        

          case "6":
      
          oledWriteData(inttohex(60));
          oledWriteData(inttohex(74));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(48));
        
         break;

     

          case "7":
      
          oledWriteData(inttohex(1));
          oledWriteData(inttohex(113));
          oledWriteData(inttohex(9));
          oledWriteData(inttohex(5));
          oledWriteData(inttohex(3));
        
         break;


          case "8":
      
          oledWriteData(inttohex(54));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(54));
        
         break;

     
          case "9":
      
          oledWriteData(inttohex(6));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(41));
          oledWriteData(inttohex(30));
        
         break;

         case ":":
        
           oledWriteData(inttohex(0));
          oledWriteData(inttohex(54));
          oledWriteData(inttohex(54));
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(0));
        
         break;


          case ";":
        
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(86));
          oledWriteData(inttohex(54));
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(0));
        
         break;
    
      
          case "<":
        
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(34));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(0));
        
         break;

           case "=":
        
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(20));
        
         break;


        


           case ">":
        
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(34));
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(8));
        
         break;
        
          case "?":
        
          oledWriteData(inttohex(2));
          oledWriteData(inttohex(1));
          oledWriteData(inttohex(81));
          oledWriteData(inttohex(9));
          oledWriteData(inttohex(6));
        
         break;

   

         case "@":
        
          oledWriteData(inttohex(50));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(121));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(62));
        
         break;


         






       

          case "A":
        
          oledWriteData(inttohex(126));
          oledWriteData(inttohex(17));
          oledWriteData(inttohex(17));
          oledWriteData(inttohex(17));
          oledWriteData(inttohex(126));
        
         break;

         
        
          case "B":
        
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(54));
        
         break;

       
         case "C":
        
          oledWriteData(inttohex(62));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(34));
        
         break;

        
         case "D":
        
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(34));
          oledWriteData(inttohex(28));
        
         break;

         
          case "E":
        
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(65));
        
         break;
    

          case "F":
        
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(9));
          oledWriteData(inttohex(9));
          oledWriteData(inttohex(9));
          oledWriteData(inttohex(1));
        
         break;

      


            case "G":
        
          oledWriteData(inttohex(62));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(122));
        
         break;

       
           case "H":
        
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(127));
        
         break;

         
          case "I":
        
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(0));
        
         break;


         case "J":
        
          oledWriteData(inttohex(32));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(63));
          oledWriteData(inttohex(1));
        
         break;

        
          case "K":
        
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(34));
          oledWriteData(inttohex(65));
        
         break;


        case "L":
        
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(64));
        
         break;


        case "M":
        
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(2));
          oledWriteData(inttohex(12));
          oledWriteData(inttohex(2));
          oledWriteData(inttohex(127));
        
         break;


        case "N":
        
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(4));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(16));
          oledWriteData(inttohex(127));
        
         break;

          
    
           case "O":
        
          oledWriteData(inttohex(62));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(62));
        
         break;

     


         case "P":
        
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(9));
          oledWriteData(inttohex(9));
          oledWriteData(inttohex(9));
          oledWriteData(inttohex(6));
        
         break;


         case "Q":
        
          oledWriteData(inttohex(62));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(81));
          oledWriteData(inttohex(33));
          oledWriteData(inttohex(94));
        
         break;

         
        case "R":
        
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(9));
          oledWriteData(inttohex(25));
          oledWriteData(inttohex(41));
          oledWriteData(inttohex(70));
        
         break;


         case "S":
        
          oledWriteData(inttohex(70));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(49));
        
         break;


         case "T":
        
          oledWriteData(inttohex(1));
          oledWriteData(inttohex(1));
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(1));
          oledWriteData(inttohex(1));
        
         break;



          case "U":
        
          oledWriteData(inttohex(63));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(63));
        
         break;
   
          case "V":
        
          oledWriteData(inttohex(31));
          oledWriteData(inttohex(32));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(32));
          oledWriteData(inttohex(31));
        
         break;

           case "W":
        
          oledWriteData(inttohex(63));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(56));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(63));
        
         break;


          case "X":
        
          oledWriteData(inttohex(99));
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(99));
           break;

          case "Y":
        
          oledWriteData(inttohex(7));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(112));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(7));

           break;

          case "Z":
        
          oledWriteData(inttohex(97));
          oledWriteData(inttohex(81));
          oledWriteData(inttohex(73));
          oledWriteData(inttohex(69));
          oledWriteData(inttohex(67));

           break;
         
          case "[":
        
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(0));

          break;


         
          case "]":
        
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(0));

          break;
  
          
          case "^":
        
          oledWriteData(inttohex(4));
          oledWriteData(inttohex(2));
          oledWriteData(inttohex(1));
          oledWriteData(inttohex(2));
          oledWriteData(inttohex(4));

          break;
  

         
          case "_":
        
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(64));

          break;



          case "`":
        
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(1));
          oledWriteData(inttohex(2));
          oledWriteData(inttohex(4));
          oledWriteData(inttohex(0));

          break;
          
          

           case "a":
        
        	    oledWriteData(inttohex(32)); //0x20
		        oledWriteData(inttohex(84)); //0x54 
		        oledWriteData(inttohex(84)); //0x54
		        oledWriteData(inttohex(84)); //0x54
		        oledWriteData(inttohex(120)); //0x78

          break;


             case "b":
        
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(72));
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(56));

          break;


             case "c":
        
          oledWriteData(inttohex(56));
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(32));

          break;


            case "d":
        
          oledWriteData(inttohex(56));
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(72));
          oledWriteData(inttohex(127));

          break;

         
            case "e":
        
          oledWriteData(inttohex(56));
          oledWriteData(inttohex(84));
          oledWriteData(inttohex(84));
          oledWriteData(inttohex(84));
          oledWriteData(inttohex(24));

          break;


         
            case "f":
        
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(126));
          oledWriteData(inttohex(9));
          oledWriteData(inttohex(1));
          oledWriteData(inttohex(2));

          break;

            case "g":
        
          oledWriteData(inttohex(12));
          oledWriteData(inttohex(82));
          oledWriteData(inttohex(82));
          oledWriteData(inttohex(82));
          oledWriteData(inttohex(62));

          break;

           case "h":
        
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(4));
          oledWriteData(inttohex(4));
          oledWriteData(inttohex(120));

          break;

           case "i":
        
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(125));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(0));

          break;

            case "j":
        
          oledWriteData(inttohex(32));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(61));
          oledWriteData(inttohex(0));

          break;

            case "k":
        
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(16));
          oledWriteData(inttohex(40));
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(0));

          break;

           case "l":
        
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(0));

          break;


           case "m":
        
          oledWriteData(inttohex(124));
          oledWriteData(inttohex(4));
          oledWriteData(inttohex(24));
          oledWriteData(inttohex(4));
          oledWriteData(inttohex(120));

          break;


          case "n":
        
          oledWriteData(inttohex(124));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(4));
          oledWriteData(inttohex(4));
          oledWriteData(inttohex(120));

          break;

          case "o":
        
          oledWriteData(inttohex(56));
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(56));

          break;

          case "p":
        
          oledWriteData(inttohex(124));
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(8));

          break;


           case "q":
        
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(20));
          oledWriteData(inttohex(24));
          oledWriteData(inttohex(124));

          break;

             case "r":
        
          oledWriteData(inttohex(124));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(4));
          oledWriteData(inttohex(4));
          oledWriteData(inttohex(8));

          break;


               case "s":
        
          oledWriteData(inttohex(72));
          oledWriteData(inttohex(84));
          oledWriteData(inttohex(84));
          oledWriteData(inttohex(84));
          oledWriteData(inttohex(32));

          break;


            case "t":
        
          oledWriteData(inttohex(4));
          oledWriteData(inttohex(63));
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(32));

          break;

             case "u":
        
          oledWriteData(inttohex(60));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(32));
          oledWriteData(inttohex(124));

          break;


              case "v":
        
          oledWriteData(inttohex(28));
          oledWriteData(inttohex(32));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(32));
          oledWriteData(inttohex(24));

          break;


               case "w":
        
          oledWriteData(inttohex(60));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(48));
          oledWriteData(inttohex(64));
          oledWriteData(inttohex(60));

          break;


               case "x":
        
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(40));
          oledWriteData(inttohex(16));
          oledWriteData(inttohex(40));
          oledWriteData(inttohex(68));

          break;

         
            case "y":
        
          oledWriteData(inttohex(12));
          oledWriteData(inttohex(80));
          oledWriteData(inttohex(80));
          oledWriteData(inttohex(80));
          oledWriteData(inttohex(60));

          break;


            case "z":
        
          oledWriteData(inttohex(68));
          oledWriteData(inttohex(100));
          oledWriteData(inttohex(84));
          oledWriteData(inttohex(76));
          oledWriteData(inttohex(68));

          break;

              case "{":
        
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(54));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(0));

          break;


             case "|":
        
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(127));
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(0));

          break;

          
             case "}":
        
          oledWriteData(inttohex(0));
          oledWriteData(inttohex(65));
          oledWriteData(inttohex(54));
          oledWriteData(inttohex(8));
          oledWriteData(inttohex(0));

          break;

   
       
    }

  
}





static void oledWriteString(int x,int y,String characters)
{
	
	
	for(int k=0;k <=characters.length();k++)
	{
		
		 oledSetXY(x,y);
	     oledWriteChar(characters.substring(k, k+1));
	     x=x+7;
	}
	
}



    
    
	
	static String intto4bit(String part)
	{
		
		String convertedpart = null;
		
		
		if(part.equals("0"))
		{
			convertedpart="0000";	
			
		}
	
		if(part.equals("1"))
		{
			convertedpart="0001";	
			
		}
		
		if(part.equals("2"))
		{
			convertedpart="0010";	
			
		}
		
		
		if(part.equals("3"))
		{
			convertedpart="0011";	
			
		}
		
		if(part.equals("4"))
		{
			convertedpart="0100";	
			
		}
		
		
		if(part.equals("5"))
		{
			convertedpart="0101";	
			
		}
		
		
		if(part.equals("6"))
		{
			convertedpart="0110";	
			
		}
		
		
		if(part.equals("7"))
		{
			convertedpart="0111";	
			
		}
		
		
		if(part.equals("8"))
		{
			convertedpart="1000";	
			
		}
		
		
		if(part.equals("9"))
		{
			convertedpart="1001";	
			
		}
		
		
		if(part.equals("a"))
		{
			convertedpart="1010";	
			
		}
		
		if(part.equals("b"))
		{
			convertedpart="1011";	
			
		}
		
		if(part.equals("c"))
		{
			convertedpart="1100";	
			
		}
		
		if(part.equals("d"))
		{
			convertedpart="1101";	
			
		}
		
		if(part.equals("e"))
		{
			convertedpart="1110";	
			
		}
		
		
		
		if(part.equals("f"))
		{
			convertedpart="1111";	
			
		}
		
		return convertedpart;
		
	}
	
	

}
 
  
  

  
  
  
  
  
  Open the    WinSCP software
  login Screen will appear
  
  Host Name : 192.168.0.21  WinSCP  (your assigned ip address)
  User Name :   pi (your assigned username) Password:  123456  (your assigned password)
  Drag the file from laptop to Raspberry Pi
   
project diagram
  
  
  Open the   RealVNC Software
  
  
  File -->New Connection
  VNC Server : 192.168.0.21  192.168.0.21  (ip address of pi)
  Name :   pi@21 click OK
  
  A new window will appear click on the icon pi@21
  Username:     Pi  (your assigned username for pi)
  Password :  123456 (your assigned password for pi)
  
  
project diagram
   
   You will see Raspberry Pi   screen on VNC
   Click on the Raspberry Pi   icon --->Accessories -->Terminal


    After it opens type 
   
                      cd Desktop                                      
                      ls
                      sudo java -jar oled102.jar
                     
                     
                     Note: Type the name of your jar file instead of oled102.jar
                                                  Press Enter   
   
   
project diagram

Bluetooth Tutorial for Oled using Arduino



  This is the tutorial for connecting bluetooth with oled using Arduino
  As most tutorials on youtube are just for switching the led on/off
  which are not that useful.
  
  There are 4 pins on bluetooth
  The connetions are as follows
  
  VCC  ----> VCC of arduino
  GND  ----> GND of arduino
  TX   ----> RX of arduino
  RX   ----> TX of arduino
  
  Its a prerequisite that you visit tutorials on oled 
  Though This tutorial is for oled you can use it for LCD as well
  

CODE

  #include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(13,11,10,9,8);
int times,hours,mins,hoursf,minsf;

void setup(void)
{
Serial.begin(9600);
hours=6;
mins=15;
}

void loop(void)
{

if(Serial.available()>0)
  {
     times=Serial.read();
  }

 Switch(times)
 { 
   Case 1:
   { 
      if(hours>12)
        hours=0;
        else
         delay(500);
        hours=hours+1;
        u8g.firstPage();
      do{
              draw1();
           }while(u8g.nextPage());
}break;

Case 2:
{
if(mins>60)
mins=0;
else
delay(500);
mins=mins+5;
}break;


Case 3:
{
 if(mins<0)
mins=60;
else
delay(500);
mins=mins-5;
}break;

Case 4:
{
if(mins>60)
mins=0;
else
delay(500);
mins=mins+1;
}break;



Case 5:
{
if(mins<0)
mins=60;
else
delay(500);
mins=mins-1;
}break;



Case 6:
{
if(hours<0)
hours=12;
else
delay(500);
hours=hours-1;
}break;


Case 7:
{
hoursf=hours;
minsf=mins;
}break;


Serial.print(times);
delay(1000);

u8g.firstPage();
do{
   draw();
}while(u8g.nextPage());
delay(50);



}



void draw(void)
{

u8g.setFont(u8g_font_unifont);
u8g.drawStr(0,22,"blue");
u8g.drawStr(0,32,"tooth");
u8g.setPrintPos(107,20);
u8g.print(hours);
u8g.drawStr(72,35,"min");
u8g.setPrintPos(107,25);
u8g.print(mins);
u8g.drawStr(72,50,"hf");
u8g.setPrintPos(107,50);
u8g.print(hoursf);
u8g.drawStr(72,65,"mf");
u8g.setPrintPos(107,65);
u8g.print(minsf);



}


void draw1(void)
{
u8g.setFont(u8g_font_unifont);
u8g.drawStr(0,40,"connected");

}
  
  

As the led of the bluetooth is blinking very fast i.e it is not connected Download the Robo Bluetooth App press the button on the upper right most corner and connect the bluetooth module by selecting the option which has name of the module and pair it. Now when it blinks twice every second that means it is connected Now go back to oled As you can see on the screen of the oled in the video hours 6 mins 15 While uploading the code please remove the Rx and Tx pins otherwise the code will not be uploaded As you press F1 (CASE 1 is executed) in delay of 1 sec the hour is incrementing by 1 upto 12 and then resets at 1 after it exceeds 12 Similarly as you press F4 the mins will start incrementing and hours will stay where it were Now when you press F7 (CASE 7 is executed) the hours final (hoursf) and mins final(minsf) are set to the latest values.

Oled Clock Tutorial



 This is the tutorial on OLED Clock for this you require an OLED and arduino uno
 The Clock displays calendar and time as this is an analog clock 
 we are going to use 3 hands hours,mins and seconds.
  

CODE


#include "U8glib.h"
int i,rs[30],rm[30],x[30],y[30],
p[30],q[30],a[50],b[50],rh[50];

int j,th1,th2,th3,k;
int hours,mins,seconds,sec_angle,min_angle,
hour_angle,times,hoursf,minsf;
int ha=hour_angle;
int ma=min_angle;
int sa=sec_angle;

float pi =3.1416;
int screenshift_x,screenshift_y;



U8GLIB_SSD1306_128x64 u8g(13,11,10,7,6);

void draw(void)
{

for(i=1;i<22;i++)
{
u8g.drawPixel(x[i],y[i]);
}


for(j=1;j<26;j++)
{
u8g.drawCircle(p[j],q[j]);
}



for(k=1;k<10;k++)
{
u8g.drawCircle(a[k],b[k]);
}

}


void setup(void)

{

hours=7;
mins=55;
seconds=0;

for(i=1;i<23;i++)
{
rs[i]=i;
}


for(j=1;j<26;j++)
{
rm[j]=j;
}



for(k=1;k<13;k++)
{
rh[k]=k;
}


}



void loop(void)
{

u8g.setFont(u8g_font,u8g_unifont)
hour_angle=hours*30;
mins_angle=mins*6;
sec_angle=seconds*6;

//picture loop

for(th3=ha-90;th3=ha+270;th3=th3+90)



{


for(th3=ma-90;th2=ma+270;th2=th2+6)



{

for(th1=sa-90;th1=sa+270;th1=th1+6)
{

for(i=1;i<23;i++)
{

x[i]=(rs[i]*cos(th1*pi/180))+64+32;

y[i]=(rs[i]*sin(th1*pi/180))+32;
}

for(j=1;j<26;j++)
{

p[j]=(rm[j]*cos(th1*pi/180))+64+32;

q[j]=(rm[j]*sin(th1*pi/180))+32;
}

for(k=1;k<13;j++)
{

a[k]=(rh[k]*cos(th1*pi/180))+64+32;


b[k]=(rh[k]*sin(th1*pi/180))+32;
}


delay(838);
u8g.firstPage();
do
{

draw();
u8g.drawStr(10,20,"THU");
u8g.drawStr(10,35,"21 JUL");

u8g.drawStr(10,50,"2016");
u8g.drawCircle(96,32,31);

u8g.drawCircle(110,7,1); //1

u8g.drawCircle(121,19,1); //2

u8g.drawCircle(121,46,1); //4


u8g.drawCircle(110,57,1); //5


u8g.drawCircle(82,57,1); //7
u8g.drawCircle(71,46,1); //8

u8g.drawCircle(71,19,1); //10

u8g.drawCircle(82,7,1); //11



u8g.drawStr(88,13,"12");

u8g.drawStr(93,62,"6");

u8g.drawStr(66,37,"9");

u8g.drawStr(119,37,"3");

}while(u8g.nextPage());
delay(5);
delay(100);

}

}

}


}


  
  

  The U8glib is the library we require ,the draw() function draws the hours,mins and 
  secs hand of the respective length.
  
  The void setup is used to set the time we have choosen hours=7
  mins=55 and secs=0.
  
  
  The 3 for loops following it are just for drawing are for drawing the
  following hands.Now inside the main loop the hour_angle is defined as
  hours*30,it is 30 because the hour hand has to travel 5 degree and each degree
  is of 6 units.Similarly for mins_angle and secs_angle they have to travel 
  just a degree which is of 6 units each.Hence mins*6 and secs*6.
  
  Now for drawing the analog clock The outermost loop is for hours and the innermost 
  is for seconds hand.The code inside this loop is to set the timer at 12
  Inside the inner most for loop we are drawing all the 3 hands.
  
  We are giving a delay of 838 secs because while executing the loop lags a bit
  
  The code following it is for drawing the calendar and outlet of the
  Analog clock and the numbers on it.
  
  

UART Communication between Raspberrypi and Arduino



 This is a basic demonstration for  UART communication 
 between  Raspberry Pi and  Arduino
 
 
 The UART communication is simple but Arduino and Raspberry Pi works on different potential levels
 Arduino uno operates on 5V whereas Raspberry Pi operates on 3.3 V so when we are connecting 
 Tx of Arduino to Rx of Raspberry Pi we have to use Potential divider
 
 
  The connections can be done as seen in the diagram shown below
  Tx of Raspberry Pi going to Rx of Arduino
  Tx of Arduino is going to R1 and the common point between R1 and R2 is going to Rx of Raspberry Pi 
 
  
circuit diagram
 
 For Programming I have used Arduino ide  for Arduino
 and Eclipse ide for RaspberryPi
 
 In this Project Arduino transmits a string hipi$ continuously with a delay of 2 seconds..
 until the contactflag is 0 and simultaneously its checking if the stringComplete becomes true
 if the stringComplete becomes true it prints the String which is received from Raspberry Pi
 
 To receive data from Raspberry Pi I have used SerialEvent so whenever it will receives string 
 ending with # it sets the stringComplete as true and sets contactflag to 1 which stops the transmission 
 of hipi$
 
 
 
  Upload the code on Arduino and open Serial Monitor. 
 

CODE FOR Arduino


int led=8;
int i=0;
int k=0;
String finaldata="";
String leddata="";
int contactflag;

String inputString = "";         // a String to hold incoming data
bool stringComplete = false;  // whether the string is complete

void setup() {
  Serial.begin(9600); // define baud rate
 pinMode(led, OUTPUT);
 digitalWrite(led, HIGH);
 contactflag=0;


}

void loop() {

      
     

         
          if(contactflag==0)
          {

             Serial.write("hipi$");
             delay(2000);
             //contactflag=1;
          }

          
         
         if (stringComplete) 
         {


            Serial.println("the msg from pi is");
            Serial.println(inputString);
          
             
           
             
            
             inputString = "";
             
             
               
            stringComplete = false;
          }

       
        


}


void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
   
    if (inChar == '#') {
      
      stringComplete = true;
       contactflag=1;
    
    }
  }
}

  
  


  Its a prerequisite that you visit tutorials to 
  Install   openjdk11 on your raspberry pi..the same jdk version should be on your laptop
  You can refer the link given below 
  install openjdk11
 
  
  Download the following softwares on your laptop 
   WinSCP (for transferring files from laptop to raspi)
   RealVNC (for virtually connecting laptop and raspi)
     
  
    The pin connection is based on wiring4j 
  Please visit pi4j website for downloading the libraries and pin description
 	
 Download the pi4j Library for the same with the help of the link given below	
 	

 pi4j library
  
  
  Open Eclipse ide on laptop
  
  File --> New --> Java Project-->In Project name --> Raspi -->Finish
  
  
project diagram
  
  Open the Project
  
  src --> New -->Package -->controller1-->Finish
 
  controller1--> New --> Class --> serialnew -->Finish 
  
  
project diagram
  
  
  Refer the code given below and use that in your   class
  
  
  Scroll to the serialnew.java -->Right click--> Run as-->Java Application
  
  The console will show error ignore it for now as we are going to transfer our file to Raspberry Pi
  
  Right Click on the Raspi Project-->Export -->Java--> Runnable JAR file -->Next
  
  Launch configuration -->   serialnew -Raspi
  
  Export designation --> C:\User...\serialnew.jar
  
  
  
project diagram
 
 I have also used their  SerialExample and modified it to use their code
 
 This is a link for the reference of their code
 Serial Example
 
 Serial and console object has been created and initialized accordingly 
 In a continuously running while loop  actionListener has been called on serial object 
 which triggers an  event and calls  dataReceived method if the received data 
 is hipi$ and contactflag is 0 it transmits  hiuno# and 
 sets the contact flag to 1
 
 
 
  
CODE FOR RaspberryPi

package controller;


import com.pi4j.io.serial.*;
import com.pi4j.util.CommandArgumentParser;
import com.pi4j.util.Console;

import java.io.IOException;
import java.util.Date;


public class serialnew 




{

	static int flag=0;
	static int contactflag=0;
	 public static void main(String args[]) throws InterruptedException, IOException
	 
	 
	 {
	
		 
		 System.out.println("hello uart 4");
		 final Serial serial = SerialFactory.createInstance();
		 SerialConfig config = new SerialConfig();
	        // create and register the serial data listener
	       
	        
	        
	        
	        try {
	            // create serial config object
	           

	            config.device("/dev/ttyS0")
	                  .baud(Baud._9600)
	                  .dataBits(DataBits._8)
	                  .parity(Parity.NONE)
	                  .stopBits(StopBits._1)
	                  .flowControl(FlowControl.NONE);

	            // parse optional command argument options to override the default serial settings.
	            if(args.length > 0){
	                config = CommandArgumentParser.getSerialConfig(config, args);
	            }

	           
	            serial.open(config);

	          
	           
	           
	            while(true)
	            {
	            	
	            	 //System.out.println("reached here 0");
	            	
	            	 serial.addListener(new SerialDataEventListener() {
	     	            @Override
	     	            public void dataReceived(SerialDataEvent event) {
	     	            	 System.out.println("reached here 1");
	     	                // NOTE! - It is extremely important to read the data received from the
	     	                // serial port.  If it does not get read from the receive buffer, the
	     	                // buffer will continue to grow and consume memory.

	     	                // print out the data received to the console
	     	                try {
	     	                	
	     	                	System.out.println("reached here 2");
    	                    //System.out.println("[HEX DATA]   " + event.getHexByteString());
	     	                   // System.out.println("[ASCII DATA] " + event.getAsciiString());
	     	                    
	     	                    
	     	                   	
	     	                   String   receiveddata1= event.getAsciiString();
	     	                  System.out.println(" data is" + receiveddata1 );
	     		                
	    	                   
	    	                  
	    	                   //serial.write("$SecondLine#\r\n");
	     	                  
	     	                  if(receiveddata1.contains("hipi$")&&(contactflag==0))
	     	                  {   
	     	                	 System.out.println("data received");
	     	                	 contactflag=1;  
	     	                	  serial.write("hiuno#");
	     	                	  System.out.println("data transmitted"); 
		    	                 
	    	                  
	     	                  }
	    	                   
	    	                   
	    	                  
	     	                    
	     	                } catch (IOException e) {
	     	                    e.printStackTrace();
	     	                }
	     	            }
	     	        });
	            	 
	            	
	            	 
	            }

	        }
	        catch(IOException ex) {
	            System.out.println(" ==>> SERIAL SETUP FAILED : " + ex.getMessage());
	            return;
	        }
	        
	        
	        
	 }
	
}


  

  Open the    WinSCP software
  login Screen will appear
  
  Host Name : 192.168.0.21  WinSCP  (your assigned ip address)
  User Name :   pi (your assigned username) Password:  123456  (your assigned password)
  Drag the file from laptop to Raspberry Pi
   
project diagram
  
  
  Open the   RealVNC Software
  
  
  File -->New Connection
  VNC Server : 192.168.0.21  192.168.0.21  (ip address of pi)
  Name :   pi@21 click OK
  
  A new window will appear click on the icon pi@21
  Username:     Pi  (your assigned username for pi)
  Password :  123456 (your assigned password for pi)
  
  
project diagram
   
   You will see Raspberry Pi   screen on VNC
   Click on the Raspberry Pi   icon --->Accessories -->Terminal


  If the serial port is transmitting   random data to arduino
  open the  terminal of Raspberry Pi type 
   sudo raspi-config Press Enter
   A pop up screen will appear
   
   Select Interfacing option
   
   Select Serial
  A question will pop up : Would you like a login shell to be
                                      accessible over serial?
  Select  No                         
  
 After that go back to the termial window
    
   
                      cd Desktop                                      
                      ls
                      sudo java -jar serialnew.jar
                     
                     
                     Note: Type the name of your jar file instead of serialnew.jar
                                                  Press Enter   
                                                  
   
project diagram
  
  

Weighing scale using Arduino


  
  #include 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int clk=2;
const int adc_data_pin=3;
const int key1=8;
const int key2=9;

unsigned int a,b,c,d,i,j,knownwt,sh,ch,mode;

unsigned long adc_val=0.00;
float adc_avg=0.00,tares=0.00,conv;
float b_adc,b_adc_kg,b_adc_pound,adc_act;
String mystring,msg1,msg2,msg3,msg5,msg6,msg7,msg8,msg9,msg10;



void setup() 
{
 pinMode(key1,INPUT);
 pinMode(key2,INPUT);
 pinMode(clk,OUTPUT);
 pinMode(adc_data_pin,INPUT_PULLUP);
 Serial.begin(9600);
 lcd.begin(16,2);
 msg1=String("CALIBRATION");
 msg2=String("loadcell");
 msg3=String("TARE");
 msg5=String("PLACE wt");
 msg6=String("REMOVE wt");
 msg7=String("g");
 msg8=String("kg");
 msg9=String("lbs");
 msg10=String("tola");
 
 
 
 
}

void loop() 

{
  
               int key1state = digitalRead(key1);
               int key2state = digitalRead(key2);
               
              lcd.setCursor(1,2);
              lcd.print(msg2);
 
              while(1)
              {

              

                   adc_act=52428;
                   adc_read();
                   mode=1;
                   switch(mode)
                   {
                        case 1:
                        {
                             b_adc=(knownwt*(adc_avg-tares))/(adc_act);
                             lcd.setCursor(1,4);
                             lcd.print(msg7);
                             mystring=String(b_adc);
                             lcd.setCursor(2,4);
                             lcd.print(mystring);
                        }break;

                          case 2:
                        {
                            b_adc=(knownwt*(adc_avg-tares))/(adc_act);
                            b_adc_kg=(b_adc/1000);
                            lcd.setCursor(1,4);
                            lcd.print(msg8);
                         
                            mystring=String(b_adc_kg,2.00);
                            lcd.setCursor(2,4);
                            lcd.print(mystring);
                           
                          
                        }break;

                        case 3:

                       {
                            b_adc=(knownwt*(adc_avg-tares))/(adc_act);
                            b_adc_pound=(b_adc/454);
                            lcd.setCursor(1,4);
                            lcd.print(msg9);
                           
                            mystring=String(b_adc_pound,2.00);
                            lcd.setCursor(2,4);
                            lcd.print(mystring);
                        }break;

                       default:
                       {
                       }
                       
                   }

                   key ();


              }

  
}


void adc_read()
{
int i,j,read_no;

  unsigned long adc_val;
  data_read=digitalRead(adc_data_pin);

 
             digitalWrite(clk,0);
              
   
             while(data_read==1);

            
                 read_no=0;
                 adc_val=0;
              digitalWrite(clk,1);
                adc_val=adc_val<<1;
               digitalWrite(clk,0);

                if(data_read)

            {
                        adc_val++;
                        read_no++;


                    if(read_no>=26)
                    {

                     digitalWrite(clk,1);
                    adc_avg=(double)adc_val;
                      digitalWrite(clk,0);
                     }
            }

   }
   
   
   void tare(double tares)



{

    tares=0.00;
    tares=adc_avg;


}


void conversion(double conv)

{

    sh=1;
  

    switch(sh)

    {
        case 1:
        {
            delay(200);
            mode=1;
            if(key1state==0)
                sh=2;


         }  break;

         case 2:
        {
            delay(200);
            mode=2;
            if(key1state==0)
                sh=3;


         }  break;

         case 3:
        {
            delay(200);
            mode=3;
            if(key1state==0)
                sh=1;


         }  break;

        default:
        {
        }

     }
 }
 
 
void calibration(unsigned int knownwt)

{

              getnumber();
             knownwt =(a*1000+b*100+c*10+d);
            
             mystring=String(knownwt);
             lcd.setCursor(2,1);
             lcd.print(mystring);


}



void key()

{

    if(key1state==0)

    {
       lcd.setCursor(1,1);
       lcd.print(msg3);

       conversion (conv);

    }


  if(key2state==0)

    {
     lcd.setCursor(1,1);
       lcd.print(msg2);
     tare (tares);

    }



    if((key1state==0)&&(key2state==0))
  {
       lcd.setCursor(1,1);
       lcd.print(msg1);
     calibration (knownwt);

  }


}




void getnumber()
{



    ch=1;

    switch (ch)
    {

        case 1:
        {


            i=0;
            while(key2state==0 && i<=9)
            {

                i++;
                
                
              mystring=String(i);
              lcd.setCursor(2,1);
              lcd.print(mystring);

            }


              a=i;
             ch=2;

         }


       break;

        case 2:

        {
                 delay(500);
                 i=0;
                 while(key2state==0)
            {

                i++;
                delay(200);
                mystring=String(i);
                lcd.setCursor(2,2);
                lcd.print(mystring);

                if(i>=10)
                    i=0;


            }


              b=i;
              ch=3;


         }
         break;


          case 3:

        {
           delay(500);
           i=0;
            while(key2state==0)
            {


                i++;
                delay(200);
                 mystring=String(i);
                lcd.setCursor(2,3);
                lcd.print(mystring);



            }


              c=i;
              ch=4;


         }


    break;

       case 4:

        {
           delay(500);
           i=0;
            while(key2state==0 && i<=9)
            {


                i++;
                delay(200);
                mystring=String(i);
              lcd.setCursor(2,4);
              lcd.print(mystring);



            }


              d=i;



         }
       break;


        default:
        {

        }

    }
}
  

  
  
  This video demonstrates how to measure weights from 50 g to 10 Kg
  using 20 bit ADC HX710 and the result is displayed using LCD
  
  

Rubik's cube Solver Code


  
  
     The code written in java solves the Rubik's cube using   Blind cubing
     method.
     Its a prerequisite that you get information on how to solve a cube using blind cubing
     For Brief in blind cubing method the  corners are solved first followed by 
      edges
   
   
  	 Only  two algorithms are required to solve the cube Ya for the corners and T for the edges 
  
     For solving the cube the green center faces the front and white center faces the top
     The cube is never rotated
    
     Starting with solving the corners first..the corner  White-Green-Red (WGR) in its buffer 
     location of corner as seen in the diagram is solved to its correct  position as well
     as   orientation doing   F2R' Ya RF2
    
     
     Similarly all the corners are solved
    
     Starting with the edges first .. the corner   Yellow-Orange (YO) in its buffer location 
     of edge as seen in the diagram is solved to its correct  position as well as
      orientation doing  L2 T L2 
    
    
      Similarly all the edges are solved which finally solves the cube
    
project diagram
 
    
Click on the link given below to access code on github github
After downloading open the src folder you will find package named model Inside model you need two classes for this project Cube.java and drawingUpdate.java
     
     
    For the project -->Open Eclipse ide
    
    File-->New--> Java Project
    
    Project Name:  RubiksCube -->Finish
    
    Open the project inside  src folder-->New -->Package
    Name :  model
    
    
    Create two classes namely  Cube and  drawingUpdate 
    
    
    Open the model -->New-->Class
    Name :  Cube
    
    Open the model -->New-->Class
    Name :  drawingUpdate
    
     
     
    
project diagram
  
     Now proceeding with the code
     
     
     Cube.java is  the class that contains the  main class
      swing Technology of java is used for 2D graphics 
     All the 6 faces are divided into  3x3 matrix and initialized
     
       data7 =  Cube.CheckPosCor();
      
      Stores the String of the corner located in the buffer location
      after that inside a while loop a method  Cube.getPosCor(data7) 
      is called until all the   cornersare solved
      
      
      In   getPosCor() a matrix   rubcor is updated..which is further used 
      in a while loop where   data13=CheckCor()  is called
      for displaying the moves to solve all the corners
      
      Similarly
      
       data9 =  Cube.CheckPosEd()
       Stores the String of the edge located in the buffer location
       after that inside a while loop a method Cube.getPosEd(data9)
       is called until all the edges are solved
       
       In  getPosEdgetPosEd a matrix rubed is updated...which is further used
       in a while loop where  data14=CheckEd() is called 
       for displaying the moves to solve all the edges
       
       
       Cube.displayUpdate()  is used for graphics
       
       Which ultimately  solves the cube
     
  
  
project diagram

Rubik's cube solver using ARM


  
  This video shows a bot and it solves any given scramble in less
  than 1 min 30 secs using  CFOP method.We have used ARM micro
  controller for this which instructs 6 stepper motors according 
  to the moves generated in the algorithm to solve the cube

  
  

LED Rubik's cube theme decoration


  
  In this project we  made a LED Rubik's cube which depicts actual moves in the cube.
  It scrambles itself,resolves itself and also shows 20 different patterns that can be done
  on actual  Rubik's  cube.
  
  Its not only mesmerizing but also easy to make
  
  To make this project simple..lets divide it into 3 parts
  
project diagram
  
  
   Electronics  Part:
  
 
  
  For our project we have used   Arduino Mega 
  WS2812B Addressable Led Strip 1 Meter 60 Led/1 m
  We need a total of 486 led's so we have used
  approximately 8.5 m strip
  
  
project diagram
  
  As you can see in the diagram for one side of a cube we have 9 squares
  consisting of 1 center 4 edge pieces and 4 corners
  Each square piece has 9 led's so total led's required on single side
  are 81 led's
  
project diagram
  If you closely look at the ledstrip it has 3 inputs 5v,gnd and a
  data, The connections are done as seen in the diagram for a single side
  
  
  You have to repeat this for all 6  sides.
  After all the connections are done you will have a  5V  wire,
  a  gnd  wire and a  data  wire attached to the first led of all sides
  
  
project diagram
  
  All the 6 wires of 5v should be shorted similarly the 6 wires of
  gnd should be shorted and attached to the  power supply    
  
  Note:That though voltage required is 5V because of 486  led's the 
  total current required is approximately 15 A .   
  
  The 6 data lines  individually goes to the  6 ports of 
  Arduino mega as shown in the diagram.
    Mechanical Part:
  
  We made a squared aluminium frame
  Then for making a side of a cube we took 6 wooden
  frames and for all the frames we took out  9 sqaure
  portions and also made a cube stand  as seen in the diagram
  
   
  
  For placing 9 led's we made a tray shaped box of
  cardboard and sticked the led strip with paper tape
  
  After all  81 led's were placed in 9 tray boxes we
  attached it to the wooden frame as shown in the diagram
  
  
  
project diagram
  We took 6  acrylic sheets of the length of the wooden frame
  and covered the entire cube.
  
  
project diagram
  
  Then attached black craft paper to cover the entire cube
  so that it   mimics 
  the visualization of actual Rubik's cube
  
  
  
project diagram
  
    Coding Part:
   
   Code Credits:   Sahil Dalvi & Shamika Dalvi   
   
  Click on the link given below to access code on 
    
     github
     
After making electrical connections and making mechanical assembly the most important part was to bring the cube to live so tha it mimics the Rubik's cube We have used arduino mega and used FastLed library Visit this link for basic examples github example
We have defined a CRGB leds[6][81] which can takes a rgb color The 6 signifies the side and 81 the total number of led's on a side leds[0] corresponds to blue side leds[1] corresponds to yellow side leds[2] corresponds to orange side leds[3] corresponds to white side leds[4] corresponds to red side leds[5] corresponds to green side side[6][81] is used for updating the leds[6][81] matrix. initializePos() function is to initialize cube matrix displayLed() function is to display the led's Inside 2 for loops consisting of side and color The value of the side matrix is stored in a r1 variable and according to the value it corresponds from 0 to 5 leds matrix is updated 0 corresponds to blue color and 5 corresponds to green color In the void loop 5 patterns are displayed and then a MoveSide(char number) function is called which does any random moves and stores that in a array. If inside a MoveSide(char number) function if case 0 is executed it stores that R move is done and calls moveR() function. moveR() function actually depicts the Right move done on a rubik's cube. Similarly the moveU() function depicts the Up move done on a rubiks's cube. Similarly all the moves that are done on a Rubik's cube can be done on LED Rubik's cube

Fibonacci Flower




     In the video as it can be seen the  fibonacci flower creates an  illusion 
     of blooming,being still, blooming inwards sometimes rotating clockwise sometimes 
     rotating anti clockwise or showing different patterns
     
     This is achieved by an effect known as the stroboscopic  effect which
     is a  phenomenon due to interrupted illumination of a moving object
     
     Fibonacci Flower as the name suggest is a mathematical flower based on fibonacci
     series designed by JOHN EDMARK 
     the corresponding golden angle for that is 137.5
     degree so that all the petals are equally spaced
     
     
     
      JOHN EDMARK WEBSITE
   
     
      To make this project simple we have divided it in 3 parts
     
    
    
    
     Electronics Part:
   
     To achieve the  stroboscopic effect the frequency 
     of the LED's are controlled with the help of using  Arduino.
     
     
     The LED's required for this project are of  12V,20 W 
     and arduino can't drive them hence we have to use a mosfet
      
     As you can see in the diagram we have used a Mosfet IRF540 N as mosfet has high input
     capacitance we have to use mosfet driver IR2101 
     which drives the mosfet.
     
project diagram
     
     
     The connections can be seen in the diagram.The Intel CPU fan has 3 wires
     
     It has inbuilt  sensor which gives two   
     pulsesafter the fan completes a single rotation
     
     
     The red wire which is the Vcc is connected to 12V.
     The black wire is connected to ground wire
     The green wire is has to be pulled up to 5v and its connected to pin no 2 of Arduino.
     
     
     The pin no 8 of Arduino is attached to the pin no 3 of Mosfet driver  
     and the Arduino triggers the mosfet driver according to the code which is explained later
     
     
     Pin no 5 of mosfet driver is to the gate of mosfet
     The source of the mosfet is connected to ground
     
     
     2 LED's are connected in series one end of the LED is connected to 24V along with a resistor
     The other end is connected to the drain of the mosfet.
     
     
     Note: In our project the wire connecting the drain and Led as well as the resistor 
     and led are extended so that the LED's can be attached at the top of the structure.
     
    
     
     
        Mechanical Part:
    
     In our project  the fibonacci flower is attached to the intel CPU fan which rotates at a RPM of 1200
     
     
project diagram
     
    Two acrylic sheets have been arranged to form a   rectangular shape.
    The CPU fan is attached to the bottom and   beneath that the electronic
    circuit is placed.Two LED's attached with the wired are sticked to one acralic sheet and placed on the top of rectangular shape.
    
    
    
project diagram
     
     
   Coding  part:
      
      
 
volatile boolean state = 0; volatile int counter = 0; volatile int state_counter = 0; int mode = 0; float Dc = 0.25; //duty cycle in % unsigned long PuleTimeMonitor_start = 0; unsigned long PuleTimeMonitor_mode_start = 0; unsigned long PuleTimeMonitor_end = 0; unsigned long PuleTimeMonitor_mode_end = 0; unsigned long timeDiff_us= 0; unsigned long TpulseTot_us = 0; unsigned long timecntoffset = 0; unsigned long Ton_us = 100; unsigned long Toff_us = 10000; unsigned long Tchangemode = 5000000; // 5seconds unsigned long Ttrigger = 0; int pulses ; // no of pulses int pulseCounter; float AngleRemaining; // remaining angle to complete the circle float AngleReq = 222.52; // required angle in gedtrees float Angleoffset = 0; // offset angle in degrees float AngleActual; float AnglePulseMain; float AnglePulseOffset; void setup() { Serial.begin(38400); pinMode(8,OUTPUT); pinMode(13,OUTPUT); pinMode(2,INPUT); attachInterrupt(digitalPinToInterrupt(2),buttonPressed, RISING); pulses = 360 / AngleReq; } void loop() { if(state == true) { state = false; if(mode == 8) { LEDtoggle_static(); } else { if(counter == 0) { PuleTimeMonitor_start = micros(); // millis(); PuleTimeMonitor_mode_start = micros(); } if(counter == 1) { PuleTimeMonitor_end = micros(); // millis(); timeDiff_us = PuleTimeMonitor_end - PuleTimeMonitor_start; PuleTimeMonitor_start = PuleTimeMonitor_end; pulses = 360 / AngleReq; for(pulseCounter = 0; pulseCounter <= pulses; pulseCounter++) { AngleActual = (pulseCounter*AngleReq) + Angleoffset; AngleRemaining = 360 - AngleActual; AnglePulseMain = AngleActual/360; if(AngleRemaining <= AngleReq) { Angleoffset = AngleReq - AngleRemaining; pulseCounter = pulses + 1; } Ttrigger = timeDiff_us * AnglePulseMain ; TpulseTot_us = timeDiff_us; // /pulses; Ton_us = (Dc*TpulseTot_us)/100; while((micros() - PuleTimeMonitor_end) < Ttrigger); LEDtoggle(); } } counter = 1; } } } void buttonPressed() { /******Fan Pulse Monitor****************/ if(state_counter == 0) { state = false; state_counter =1; } else if(state_counter == 1) { state = true; state_counter = 0; } // state_counter = state_counter + 1; /******Fan Pulse Monitor end****************/ /******Mode Selector***************/ if((micros() - PuleTimeMonitor_mode_start) > Tchangemode) { Serial.print(" mode = "); Serial.println(mode); PuleTimeMonitor_mode_start = micros(); if(mode == 0) // blooming { AngleReq = 137.5; mode =1; } else if(mode == 1) { AngleReq = 222.5; mode =2; } else if(mode == 2) { AngleReq = 309; mode = 3; } else if(mode == 3) { AngleReq = 306; mode = 4; } else if(mode == 4) { Angleoffset = 0; counter = 0; mode = 5; } else if(mode == 5) { AngleReq = 189.25; mode = 6; } else if(mode == 6) { AngleReq = 359; mode = 7; } else if(mode == 7) // { AngleReq = 361; mode = 8; } else if(mode == 8) // static { AngleReq = 277.5; mode = 0; } } /******Mode selector end ****************/ } void dispData() { Serial.print(" Angle = "); Serial.println(AngleActual); } void LEDtoggle() { digitalWrite(8, HIGH); delayMicroseconds(Ton_us); digitalWrite(8, LOW); } void LEDtoggle_static() { digitalWrite(8, HIGH); delayMicroseconds(150); digitalWrite(8, LOW); } void LEDtoggle_speed() { digitalWrite(8, HIGH); delayMicroseconds(100); digitalWrite(8, LOW); delay(1); }
   
   
   
       Code Credits :  Sahil Dalvi
   
      In the code various parameters have been initialised 
      The duty cycle has been set to  0.5% ,
      Pin no 8 of arduino is set as output and pin no 2 is set to receive input which triggers 
       interruptand calls buttonPressed() function and 8 modes are set.
      In  void loop() function it the mode 8 is not achieved then and if the counter is 1
      timedifference,pulses,angleactual,angleremianing and angleoffset are calculated
      
      According to the number of pulses a for loop is executed  the Ton is calculated
      and  LEDtoggle() function is called to trigger the mosfet driver which triggers 
      the LED
  
     

TFT 3.5" Calculator display



 This is a tutorial for calculator using Arduino TFT 3.5" display
 This is coded for performing 4 basic arithmetic operations

  

CODE




#include 
#include 
#include  
 MCUFRIEND_kbv tft;  


MCUFRIEND_kbv tft;  


#define YP A3  // must be an analog pin.
#define XM A2  // must be an analog pin.
#define YM 9   // can be a digital pin.
#define XP 8   // can be a digital pin.

#define TS_MINX 116
#define TS_MINY 955
#define TS_MAXX 893
#define TS_MAXY 102

#define BOXSIZE 40
#define PENRADIUS 3

int oldcolor, currentcolor;

// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// Its about 300 ohms across the X plate on mine.


TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

// Assign human-readable names to some common 16-bit color values:
#define BLACK   0xFFFF
#define BLUE    0xFFE0
#define GREEN   0xF81F
#define CYAN    0xF800
#define GRAY1   0x8410
#define RED     0x07FF
#define GRAY2   0x4208
#define MAGENTA 0x07E0
#define YELLOW  0x001F
#define WHITE   0x0000
#define PINK   0x07E0
#define MINPRESSURE 5
#define MAXPRESSURE 1500


/*
String symbol[4][4] = {
  { "7", "8", "9", "/" },
  { "4", "5", "6", "*" },
  { "1", "2", "3", "-" },
  { "C", "0", "=", "+" }
};

*/

String symbol[4][4] = {
  { "/", "*", "-", "+" },
  { "9", "6", "3", "=" },
  { "8", "5", "2", "0" },
  { "7", "4", "1", "C" }
};




 int X,Y;
 long Num1,Num2,Number;
 char action;
 boolean result = false;



void setup(void) 
{
  Serial.begin(9600);
  Serial.println(F("Paint!"));

  tft.reset();
  uint16_t identifier = tft.readID();

  Serial.print(F("LCD driver chip: "));
  Serial.println(identifier,HEX);

 
  tft.begin(0x9486);
  tft.fillScreen(WHITE);
  tft.setRotation(2);
  
  
    Screen();
  
  drawButtons(); 

  
}



void loop()
{
 
 

  pinMode(XM, OUTPUT);
  pinMode(YP, OUTPUT);
Point p;

  do {
    p = ts.getPoint(); 
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
  } while((p.z < MINPRESSURE )|| (p.z > MAXPRESSURE));
  p.x = map(p.x, TS_MINX, TS_MAXX, 0, 320);
  p.y = map(p.y, TS_MINY, TS_MAXY, 0, 480);
  
 

   Y = p.x; 
  X = p.y;
  
  
  DetectButtons();

if (result==true)
CalculateResult();

DisplayResult();   

  delay(300);
 

 
}






void DetectButtons()
{
  
  if (X<80 && X>0) //Detecting Buttons on Column 1
  {
    if (Y>0 && Y<85) //If cancel Button is pressed
    {
      
      Serial.println ("Cancel Button"); 
      Number=Num1=Num2=0; 
      result=false;}
    
     if (Y>85 && Y<160) //If Button 1 is pressed
    {Serial.println ("Button 1"); 
    if (Number==0)
    Number=1;
    else
    Number = (Number*10) + 1; //Pressed twice
    }
    
     if (Y>160 && Y<240) //If Button 4 is pressed
    {Serial.println ("Button 4"); 
    if (Number==0)
    Number=4;
    else
    Number = (Number*10) + 4; //Pressed twice
    }
    
     if (Y>240 && Y<320) //If Button 7 is pressed
    {Serial.println ("Button 7");
    if (Number==0)
    Number=7;
    else
    Number = (Number*10) + 7; //Pressed twice
    } 
  }

    if (X<160 && X>80) //Detecting Buttons on Column 2
  {
    if (Y>0 && Y<85)
    {Serial.println ("Button 0"); //Button 0 is Pressed
    if (Number==0)
    Number=0;
    else
    Number = (Number*10) + 0; //Pressed twice
    }
    
     if (Y>85 && Y<160)
    {Serial.println ("Button 2"); 
     if (Number==0)
    Number=2;
    else
    Number = (Number*10) + 2; //Pressed twice
    }
    
     if (Y>160 && Y<240)
    {Serial.println ("Button 5"); 
     if (Number==0)
    Number=5;
    else
    Number = (Number*10) + 5; //Pressed twic
    }
    
     if (Y>240 && Y<320)
    {Serial.println ("Button 8"); 
     if (Number==0)
    Number=8;
    else
    Number = (Number*10) + 8; //Pressed twic
    }   
  }

    if (X<240 && X>160) //Detecting Buttons on Column 3
  {
    if (Y>0 && Y<85)
    {Serial.println ("Button Equal"); 
    Num2=Number;
    result = true;
    }
    
     if (Y>85 && Y<160)
    {Serial.println ("Button 3"); 
     if (Number==0)
    Number=3;
    else
    Number = (Number*10) + 3; //Pressed twice
    }
    
     if (Y>160 && Y<240)
    {Serial.println ("Button 6"); 
    if (Number==0)
    Number=6;
    else
    Number = (Number*10) + 6; //Pressed twice
    }
    
     if (Y>240 && Y<320)
    {Serial.println ("Button 9");
    if (Number==0)
    Number=9;
    else
    Number = (Number*10) + 9; //Pressed twice
    }   
  }


     if (X<320 && X>240) //Detecting Buttons on Column 3
  {

    Num1 = Number;    
    Number =0;

    tft.setCursor(200, 20);
    tft.setTextColor(RED);
    if (Y>0 && Y<85)

    
    {
      Serial.println ("Addition Button"); 
    
    Serial.println ("Addition");
    action = 1;
    tft.println('+');
    
    }
    
     if (Y>85 && Y<160)
    {
      
      Serial.println ("substraction Button"); 
   
       Serial.println ("substraction");
    action = 2;
    tft.println('-');

    }
    
     if (Y>160 && Y<240)
    {
      Serial.println ("multiplication Button"); 
      Serial.println ("multiplication");
    action = 3;
    tft.println('*');

    }
    
     if (Y>240 && Y<320)
    {
      Serial.println ("Division Button");
     Serial.println ("Division");
    action = 4;
    tft.println('/');

    }   
  }

  


/*
      if (X<320 && X>400) //Detecting Buttons on Column 3
  {
    Num1 = Number;    
    Number =0;
    tft.setCursor(200, 20);
    tft.setTextColor(RED);
    if (Y>0 && Y<85)
    {Serial.println ("Addition"); action = 1; tft.println('+');}
     if (Y>85 && Y<160)
    {Serial.println ("Subtraction"); action = 2; tft.println('-');}
     if (Y>160 && Y<240)
    {Serial.println ("Multiplication"); action = 3; tft.println('*');}
     if (Y>240 && Y<320)
    {Serial.println ("Devesion"); action = 4; tft.println('/');}  

    delay(300);
  }  

  */
}





void CalculateResult()
{
  if (action==1)
    Number = Num1+Num2;

  if (action==2)
    Number = Num1-Num2;

  if (action==3)
    Number = Num1*Num2;

  if (action==4)
    Number = Num1/Num2; 
}

void DisplayResult()
{
    tft.fillRect(0, 0, 320, 160, CYAN);  //clear result box
    tft.setCursor(10, 20);
    tft.setTextSize(4);
    tft.setTextColor(BLACK);
    tft.println(Number); //update new value
}

void Screen()
{
  tft.setCursor (105, 120);
  tft.setTextSize (3);
  tft.setTextColor(BLUE);
  tft.println("ARDUINO");
  tft.setCursor (50, 160);
  tft.println("CALCULATOR");
  tft.setCursor (50, 220);
  tft.setTextSize (2);
  tft.setTextColor(BLUE);
  
  delay(1800);
}

void drawButtons()
{
  //Draw the Result Box
  tft.fillRect(0, 0, 320, 160, CYAN);

 //Draw First Column
  tft.fillRect  (0,400,80,80,BLACK);
  tft.fillRect  (0,320,80,80,BLACK);
  tft.fillRect  (0,240,80,80,BLACK);
  tft.fillRect  (0,160,80,80,MAGENTA);



 //Draw SECOND Column  
  tft.fillRect  (80,400,80,80,BLACK);
  tft.fillRect  (80,320,80,80,BLACK);
  tft.fillRect  (80,240,80,80,BLACK);
  tft.fillRect  (80,160,80,80,BLUE);




 //Draw Third Column  
  tft.fillRect  (160,400,80,80,BLACK);
  tft.fillRect  (160,320,80,80,BLACK);
  tft.fillRect  (160,240,80,80,BLACK);
  tft.fillRect  (160,160,80,80,MAGENTA);



  tft.fillRect  (240,400,80,80,RED);
  tft.fillRect  (240,320,80,80,BLACK);
  tft.fillRect  (240,240,80,80,GREEN);
  tft.fillRect  (240,160,80,80,BLUE);

/*
  //Draw Horizontal Lines
  for (int h=160; h<=400; h+=80)
  tft.drawFastHLine(0, h, 400, WHITE);

  //Draw Vertical Lines
  for (int v=0; v<=320; v+=80)
  tft.drawFastVLine(v, 80, 320, WHITE);

  */
  
  //Display keypad lables 
  for (int j=0;j<4;j++) {
    for (int i=0;i<4;i++) {
      tft.setCursor(22 + (80*i),  180 + (80*j));
      tft.setTextSize(3);
      tft.setTextColor(WHITE);
      tft.println(symbol[j][i]);
    }
  }


}
  
  

  For this code we have used Adafruit_GFX.h library
  Symbol matrix is used to display symbols on TFT
  In the void setup() calls 2 functions screen()
  and drawButtons().
  
  
 The main loop it detect buttons,calculates the result
 and displays final result
 
 The DetectButtons() function is coded according to the box sizes
 
 The CalculateResult() functions just executes the action which it 
 receives from the detectButtons()
 
 The DisplayResult() displays the results in the cyan screen
 
 The screen() function displays the initial screen
 
 The drawButtons() function draws the button boxes
  
  


LOGIN OR SIGN IN



   Please visit web site www.worldcubeassociation.org  for more information
   and participating in cubing competitions around the world by clicking on icon
   

Cart Images Tutorial Product Price
Rubik's Cube RS 50
Blind Cubing RS 100
First Name:
Last Name:
Email Id:
Phone num:
Upload File:
PRIVACY NOTICE

Last updated __________



This privacy notice for __________ ("Company," "we," "us," or "our"), describes how and why we might collect, store, use, and/or share ("process") your information when you use our services ("Services"), such as when you:
  • Download and use our mobile application (CFOP VOICE TIMER ), or any other application of ours that links to this privacy notice
  • Engage with us in other related ways, including any sales, marketing, or events
Questions or concerns? Reading this privacy notice will help you understand your privacy rights and choices. If you do not agree with our policies and practices, please do not use our Services. If you still have any questions or concerns, please contact us at __________.


SUMMARY OF KEY POINTS

This summary provides key points from our privacy notice, but you can find out more details about any of these topics by clicking the link following each key point or by using our table of contents below to find the section you are looking for. You can also click here to go directly to our table of contents.

What personal information do we process? When you visit, use, or navigate our Services, we may process personal information depending on how you interact with __________ and the Services, the choices you make, and the products and features you use. Click here to learn more.

Do we process any sensitive personal information? We do not process sensitive personal information.

Do we receive any information from third parties? We do not receive any information from third parties.

How do we process your information? We process your information to provide, improve, and administer our Services, communicate with you, for security and fraud prevention, and to comply with law. We may also process your information for other purposes with your consent. We process your information only when we have a valid legal reason to do so. Click here to learn more.

In what situations and with which parties do we share personal information? We may share information in specific situations and with specific third parties. Click here to learn more.

How do we keep your information safe? We have organizational and technical processes and procedures in place to protect your personal information. However, no electronic transmission over the internet or information storage technology can be guaranteed to be 100% secure, so we cannot promise or guarantee that hackers, cybercriminals, or other unauthorized third parties will not be able to defeat our security and improperly collect, access, steal, or modify your information. Click here to learn more.

What are your rights? Depending on where you are located geographically, the applicable privacy law may mean you have certain rights regarding your personal information. Click here to learn more.

How do you exercise your rights? The easiest way to exercise your rights is by filling out our data subject request form available here, or by contacting us. We will consider and act upon any request in accordance with applicable data protection laws.

Want to learn more about what __________ does with any information we collect? Click here to review the notice in full.


TABLE OF CONTENTS

1. WHAT INFORMATION DO WE COLLECT?
2. HOW DO WE PROCESS YOUR INFORMATION?
3. WHAT LEGAL BASES DO WE RELY ON TO PROCESS YOUR PERSONAL INFORMATION?
4. WHEN AND WITH WHOM DO WE SHARE YOUR PERSONAL INFORMATION?
5. IS YOUR INFORMATION TRANSFERRED INTERNATIONALLY?
6. HOW LONG DO WE KEEP YOUR INFORMATION?
7. HOW DO WE KEEP YOUR INFORMATION SAFE?
8. WHAT ARE YOUR PRIVACY RIGHTS?
9. CONTROLS FOR DO-NOT-TRACK FEATURES
10. DO CALIFORNIA RESIDENTS HAVE SPECIFIC PRIVACY RIGHTS?
11. DO WE MAKE UPDATES TO THIS NOTICE?
12. HOW CAN YOU CONTACT US ABOUT THIS NOTICE?
13. HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?

1. WHAT INFORMATION DO WE COLLECT?

Personal information you disclose to us

In Short: We collect personal information that you provide to us.

We collect personal information that you voluntarily provide to us when you register on the Services, express an interest in obtaining information about us or our products and Services, when you participate in activities on the Services, or otherwise when you contact us.

Personal Information Provided by You. The personal information that we collect depends on the context of your interactions with us and the Services, the choices you make, and the products and features you use. The personal information we collect may include the following:
  • names
  • email addresses
  • usernames
  • passwords
Sensitive Information. We do not process sensitive information.

Application Data. If you use our application(s), we also may collect the following information if you choose to provide us with access or permission:
  • Mobile Device Access. We may request access or permission to certain features from your mobile device, including your mobile device's microphone, and other features. If you wish to change our access or permissions, you may do so in your device's settings.
This information is primarily needed to maintain the security and operation of our application(s), for troubleshooting, and for our internal analytics and reporting purposes.

All personal information that you provide to us must be true, complete, and accurate, and you must notify us of any changes to such personal information.

2. HOW DO WE PROCESS YOUR INFORMATION?

In Short: We process your information to provide, improve, and administer our Services, communicate with you, for security and fraud prevention, and to comply with law. We may also process your information for other purposes with your consent.

We process your personal information for a variety of reasons, depending on how you interact with our Services, including:
  • To facilitate account creation and authentication and otherwise manage user accounts. We may process your information so you can create and log in to your account, as well as keep your account in working order.

  • To save or protect an individual's vital interest. We may process your information when necessary to save or protect an individual’s vital interest, such as to prevent harm.

3. WHAT LEGAL BASES DO WE RELY ON TO PROCESS YOUR INFORMATION?

In Short: We only process your personal information when we believe it is necessary and we have a valid legal reason (i.e., legal basis) to do so under applicable law, like with your consent, to comply with laws, to provide you with services to enter into or fulfill our contractual obligations, to protect your rights, or to fulfill our legitimate business interests.

If you are located in the EU or UK, this section applies to you.

The General Data Protection Regulation (GDPR) and UK GDPR require us to explain the valid legal bases we rely on in order to process your personal information. As such, we may rely on the following legal bases to process your personal information:
  • Consent. We may process your information if you have given us permission (i.e., consent) to use your personal information for a specific purpose. You can withdraw your consent at any time. Click here to learn more.
  • Legal Obligations. We may process your information where we believe it is necessary for compliance with our legal obligations, such as to cooperate with a law enforcement body or regulatory agency, exercise or defend our legal rights, or disclose your information as evidence in litigation in which we are involved.
  • Vital Interests. We may process your information where we believe it is necessary to protect your vital interests or the vital interests of a third party, such as situations involving potential threats to the safety of any person.

If you are located in Canada, this section applies to you.

We may process your information if you have given us specific permission (i.e., express consent) to use your personal information for a specific purpose, or in situations where your permission can be inferred (i.e., implied consent). You can withdraw your consent at any time. Click here to learn more.

In some exceptional cases, we may be legally permitted under applicable law to process your information without your consent, including, for example:
  • If collection is clearly in the interests of an individual and consent cannot be obtained in a timely way
  • For investigations and fraud detection and prevention
  • For business transactions provided certain conditions are met
  • If it is contained in a witness statement and the collection is necessary to assess, process, or settle an insurance claim
  • For identifying injured, ill, or deceased persons and communicating with next of kin
  • If we have reasonable grounds to believe an individual has been, is, or may be victim of financial abuse
  • If it is reasonable to expect collection and use with consent would compromise the availability or the accuracy of the information and the collection is reasonable for purposes related to investigating a breach of an agreement or a contravention of the laws of Canada or a province
  • If disclosure is required to comply with a subpoena, warrant, court order, or rules of the court relating to the production of records
  • If it was produced by an individual in the course of their employment, business, or profession and the collection is consistent with the purposes for which the information was produced
  • If the collection is solely for journalistic, artistic, or literary purposes
  • If the information is publicly available and is specified by the regulations

4. WHEN AND WITH WHOM DO WE SHARE YOUR PERSONAL INFORMATION?

In Short: We may share information in specific situations described in this section and/or with the following third parties.

We may need to share your personal information in the following situations:
  • Business Transfers. We may share or transfer your information in connection with, or during negotiations of, any merger, sale of company assets, financing, or acquisition of all or a portion of our business to another company.

5. IS YOUR INFORMATION TRANSFERRED INTERNATIONALLY?

In Short: We may transfer, store, and process your information in countries other than your own.

Our servers are located in. If you are accessing our Services from outside, please be aware that your information may be transferred to, stored, and processed by us in our facilities and by those third parties with whom we may share your personal information (see "WHEN AND WITH WHOM DO WE SHARE YOUR PERSONAL INFORMATION?" above), in and other countries.

If you are a resident in the European Economic Area (EEA) or United Kingdom (UK), then these countries may not necessarily have data protection laws or other similar laws as comprehensive as those in your country. However, we will take all necessary measures to protect your personal information in accordance with this privacy notice and applicable law.

6. HOW LONG DO WE KEEP YOUR INFORMATION?

In Short: We keep your information for as long as necessary to fulfill the purposes outlined in this privacy notice unless otherwise required by law.

We will only keep your personal information for as long as it is necessary for the purposes set out in this privacy notice, unless a longer retention period is required or permitted by law (such as tax, accounting, or other legal requirements). No purpose in this notice will require us keeping your personal information for longer than the period of time in which users have an account with us.

When we have no ongoing legitimate business need to process your personal information, we will either delete or anonymize such information, or, if this is not possible (for example, because your personal information has been stored in backup archives), then we will securely store your personal information and isolate it from any further processing until deletion is possible.

7. HOW DO WE KEEP YOUR INFORMATION SAFE?

In Short: We aim to protect your personal information through a system of organizational and technical security measures.

We have implemented appropriate and reasonable technical and organizational security measures designed to protect the security of any personal information we process. However, despite our safeguards and efforts to secure your information, no electronic transmission over the Internet or information storage technology can be guaranteed to be 100% secure, so we cannot promise or guarantee that hackers, cybercriminals, or other unauthorized third parties will not be able to defeat our security and improperly collect, access, steal, or modify your information. Although we will do our best to protect your personal information, transmission of personal information to and from our Services is at your own risk. You should only access the Services within a secure environment.

8. WHAT ARE YOUR PRIVACY RIGHTS?

In Short: In some regions, such as the European Economic Area (EEA), United Kingdom (UK), and Canada, you have rights that allow you greater access to and control over your personal information. You may review, change, or terminate your account at any time.

In some regions (like the EEA, UK, and Canada), you have certain rights under applicable data protection laws. These may include the right (i) to request access and obtain a copy of your personal information, (ii) to request rectification or erasure; (iii) to restrict the processing of your personal information; and (iv) if applicable, to data portability. In certain circumstances, you may also have the right to object to the processing of your personal information. You can make such a request by contacting us by using the contact details provided in the section "HOW CAN YOU CONTACT US ABOUT THIS NOTICE?" below.

We will consider and act upon any request in accordance with applicable data protection laws.
 
If you are located in the EEA or UK and you believe we are unlawfully processing your personal information, you also have the right to complain to your local data protection supervisory authority. You can find their contact details here: https://ec.europa.eu/justice/data-protection/bodies/authorities/index_en.htm.

If you are located in Switzerland, the contact details for the data protection authorities are available here: https://www.edoeb.admin.ch/edoeb/en/home.html.

Withdrawing your consent: If we are relying on your consent to process your personal information, which may be express and/or implied consent depending on the applicable law, you have the right to withdraw your consent at any time. You can withdraw your consent at any time by contacting us by using the contact details provided in the section "HOW CAN YOU CONTACT US ABOUT THIS NOTICE?" below.

However, please note that this will not affect the lawfulness of the processing before its withdrawal, nor when applicable law allows, will it affect the processing of your personal information conducted in reliance on lawful processing grounds other than consent.

Account Information

If you would at any time like to review or change the information in your account or terminate your account, you can:
  • Contact us using the contact information provided.
Upon your request to terminate your account, we will deactivate or delete your account and information from our active databases. However, we may retain some information in our files to prevent fraud, troubleshoot problems, assist with any investigations, enforce our legal terms and/or comply with applicable legal requirements.

9. CONTROLS FOR DO-NOT-TRACK FEATURES

Most web browsers and some mobile operating systems and mobile applications include a Do-Not-Track ("DNT") feature or setting you can activate to signal your privacy preference not to have data about your online browsing activities monitored and collected. At this stage no uniform technology standard for recognizing and implementing DNT signals has been finalized. As such, we do not currently respond to DNT browser signals or any other mechanism that automatically communicates your choice not to be tracked online. If a standard for online tracking is adopted that we must follow in the future, we will inform you about that practice in a revised version of this privacy notice.

10. DO CALIFORNIA RESIDENTS HAVE SPECIFIC PRIVACY RIGHTS?

In Short: Yes, if you are a resident of California, you are granted specific rights regarding access to your personal information.

California Civil Code Section 1798.83, also known as the "Shine The Light" law, permits our users who are California residents to request and obtain from us, once a year and free of charge, information about categories of personal information (if any) we disclosed to third parties for direct marketing purposes and the names and addresses of all third parties with which we shared personal information in the immediately preceding calendar year. If you are a California resident and would like to make such a request, please submit your request in writing to us using the contact information provided below.

If you are under 18 years of age, reside in California, and have a registered account with Services, you have the right to request removal of unwanted data that you publicly post on the Services. To request removal of such data, please contact us using the contact information provided below and include the email address associated with your account and a statement that you reside in California. We will make sure the data is not publicly displayed on the Services, but please be aware that the data may not be completely or comprehensively removed from all our systems (e.g., backups, etc.).

CCPA Privacy Notice

The California Code of Regulations defines a "resident" as:

(1) every individual who is in the State of California for other than a temporary or transitory purpose and
(2) every individual who is domiciled in the State of California who is outside the State of California for a temporary or transitory purpose

All other individuals are defined as "non-residents."

If this definition of "resident" applies to you, we must adhere to certain rights and obligations regarding your personal information.

What categories of personal information do we collect?

We have collected the following categories of personal information in the past twelve (12) months:

CategoryExamplesCollected
A. Identifiers
Contact details, such as real name, alias, postal address, telephone or mobile contact number, unique personal identifier, online identifier, Internet Protocol address, email address, and account name

YES

B. Personal information categories listed in the California Customer Records statute
Name, contact information, education, employment, employment history, and financial information

YES

C. Protected classification characteristics under California or federal law
Gender and date of birth

NO

D. Commercial information
Transaction information, purchase history, financial details, and payment information

NO

E. Biometric information
Fingerprints and voiceprints

NO

F. Internet or other similar network activity
Browsing history, search history, online behavior, interest data, and interactions with our and other websites, applications, systems, and advertisements

NO

G. Geolocation data
Device location

NO

H. Audio, electronic, visual, thermal, olfactory, or similar information
Images and audio, video or call recordings created in connection with our business activities

NO

I. Professional or employment-related information
Business contact details in order to provide you our services at a business level or job title, work history, and professional qualifications if you apply for a job with us

NO

J. Education Information
Student records and directory information

NO

K. Inferences drawn from other personal information
Inferences drawn from any of the collected personal information listed above to create a profile or summary about, for example, an individual’s preferences and characteristics

NO


We may also collect other personal information outside of these categories instances where you interact with us in person, online, or by phone or mail in the context of:
  • Receiving help through our customer support channels;
  • Participation in customer surveys or contests; and
  • Facilitation in the delivery of our Services and to respond to your inquiries.
How do we use and share your personal information?

More information about our data collection and sharing practices can be found in this privacy notice.

You may contact us by email at shamika1994@gmail.com , or by referring to the contact details at the bottom of this document.

If you are using an authorized agent to exercise your right to opt out we may deny a request if the authorized agent does not submit proof that they have been validly authorized to act on your behalf.

Will your information be shared with anyone else?

We may disclose your personal information with our service providers pursuant to a written contract between us and each service provider. Each service provider is a for-profit entity that processes the information on our behalf.

We may use your personal information for our own business purposes, such as for undertaking internal research for technological development and demonstration. This is not considered to be "selling" of your personal information.

__________ has not disclosed or sold any personal information to third parties for a business or commercial purpose in the preceding twelve (12) months. __________ will not sell personal information in the future belonging to website visitors, users, and other consumers.

Your rights with respect to your personal data

Right to request deletion of the data — Request to delete

You can ask for the deletion of your personal information. If you ask us to delete your personal information, we will respect your request and delete your personal information, subject to certain exceptions provided by law, such as (but not limited to) the exercise by another consumer of his or her right to free speech, our compliance requirements resulting from a legal obligation, or any processing that may be required to protect against illegal activities.

Right to be informed — Request to know

Depending on the circumstances, you have a right to know:
  • whether we collect and use your personal information;
  • the categories of personal information that we collect;
  • the purposes for which the collected personal information is used;
  • whether we sell your personal information to third parties;
  • the categories of personal information that we sold or disclosed for a business purpose;
  • the categories of third parties to whom the personal information was sold or disclosed for a business purpose; and
  • the business or commercial purpose for collecting or selling personal information.
In accordance with applicable law, we are not obligated to provide or delete consumer information that is de-identified in response to a consumer request or to re-identify individual data to verify a consumer request.

Right to Non-Discrimination for the Exercise of a Consumer’s Privacy Rights

We will not discriminate against you if you exercise your privacy rights.

Verification process

Upon receiving your request, we will need to verify your identity to determine you are the same person about whom we have the information in our system. These verification efforts require us to ask you to provide information so that we can match it with information you have previously provided us. For instance, depending on the type of request you submit, we may ask you to provide certain information so that we can match the information you provide with the information we already have on file, or we may contact you through a communication method (e.g., phone or email) that you have previously provided to us. We may also use other verification methods as the circumstances dictate.

We will only use personal information provided in your request to verify your identity or authority to make the request. To the extent possible, we will avoid requesting additional information from you for the purposes of verification. However, if we cannot verify your identity from the information already maintained by us, we may request that you provide additional information for the purposes of verifying your identity and for security or fraud-prevention purposes. We will delete such additionally provided information as soon as we finish verifying you.

Other privacy rights
  • You may object to the processing of your personal information.
  • You may request correction of your personal data if it is incorrect or no longer relevant, or ask to restrict the processing of the information.
  • You can designate an authorized agent to make a request under the CCPA on your behalf. We may deny a request from an authorized agent that does not submit proof that they have been validly authorized to act on your behalf in accordance with the CCPA.
  • You may request to opt out from future selling of your personal information to third parties. Upon receiving an opt-out request, we will act upon the request as soon as feasibly possible, but no later than fifteen (15) days from the date of the request submission.
To exercise these rights, you can contact us by email at shamika1994@gmail.com , or by referring to the contact details at the bottom of this document. If you have a complaint about how we handle your data, we would like to hear from you.

11. DO WE MAKE UPDATES TO THIS NOTICE?

In Short: Yes, we will update this notice as necessary to stay compliant with relevant laws.

We may update this privacy notice from time to time. The updated version will be indicated by an updated "Revised" date and the updated version will be effective as soon as it is accessible. If we make material changes to this privacy notice, we may notify you either by prominently posting a notice of such changes or by directly sending you a notification. We encourage you to review this privacy notice frequently to be informed of how we are protecting your information.

12. HOW CAN YOU CONTACT US ABOUT THIS NOTICE?

If you have questions or comments about this notice, you may email us at __________ or by post to:

__________
__________
__________

13. HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?

Based on the applicable laws of your country, you may have the right to request access to the personal information we collect from you, change that information, or delete it. To request to review, update, or delete your personal information, please submit a request form by clicking here.