tutorial (2)


Olinuxino custom Android image for 272×480 touchscreen LCD

Recently i was talking about my new Olinuxino delevopment board by Olimex and related developments with it. Well, nothing to say, the board does its job flawlessly both in Andoid and Linux enviroments, the only problem i faced concern the touchscreen LCD i got together with the board, and this is what I’m going to fix and explain today ūüôā

Olimex ships some different types of GPIO LCD displays in sizes and features and since the manufacturer provides TOTALLY Opensouce hardware and software is not always easy find the correct image for the specified hardware configuration (despite this Olimex provides one of the best repository and resources i’ve never seen for this kind of projects, don’t get me wrong (: ). This turned out in a lack of Android updates for my lcd resolution display, which led to a series of UI and system bugs that the producer were never managed to solve.
After a long research on the web I finally found out that the only solution was to fix the bugs by myself, fortunately Olimex (as i said before) provided a good repository for kernels and drivers that really helped me to compile my own fresh and customized Android image ūüôā

The image I’m going to share with you provides the last Android supported version (4.0.4 actually) and some patches:

  • fixed the touch screen inverted x-axis
  • fixed touchscreen calibration issue
  • fixed UI issue (reverted back from “tablet” to “phone” view)
  • now the “enter” physic key acts like the “back” software button (absolutely more comfortable!)
  • general stability

Here the direct download link to the image:

[scbutton link=”/docs/272x480AndroidOlinuxinoA13.img” target=”blank” variation=”red” size=”large” align=”center”]Download Image[/scbutton]




Primo Esempio: Il bottone

In questo esempio voglio mostrarvi come collegare ed implementare nei vostri progetti un bottone:

Per prima cosa diamo un’occhiata allo¬†schema elettrico: Il bottone presenta quattro estremit√† (Pin) connessi due a due da contatti interni al pulsante. Abbiamo in realt√†, quindi, due contatti indipendenti che andremo a collegare. Nello schema elettrico questo corrisponde alla apertura e chiusura di un circuito: il passaggio dallo stato di quiete delle cariche, al passaggio di una corrente elettrica nel circuito. Quello che vogliamo fare √® gestire la variazione di potenziale elettrico avvertita dai pin digitali del nostro microcontrollore, attuata dalla pressione del nostro bottone.

Come potete vedere, oltre al bottone, nel circuito √® riportata una resistenza a massa tra il¬†Digital Pine il bottone; questa resistenza √® chiamata “resistenza in¬†Pull-Down“, ed √® necessaria al fine di mantenere lo stato logico¬†LOW¬†(basso) finch√® il bottone non √® premuto. Questo tipo di operazione √® necessaria nei circuiti logici al fine di mantenere lo stato logico voluto (Low nel caso di pull-down e HIGH nel caso di pull-up) nel caso in cui si voglia interfacciare un circuito aperto ad uno logico (come in questo caso), o nel caso in cui una periferica venga scollegata dal microcontrollore.
La resistenza in pull-up/down sostanzialmente applica una debole tensione al pin dove essa è connessa.

 

Lato software:

Per quanto riguarda il software Arduino, ho scritto un software che riassuma una serie diInterruzioni¬†applicabili all’utilizzo del nostro bottone:
Il bottone attuer√† l’accensione di un led, stamper√† a schemo un testo tramite porta seriale e incrementer√† ad ogni pressione un contatore.

In allegato il codice sorgente: Button.ino
(clicca per ingrandire)

button_ide


Iniziamo dichiarando il pin al quale abbiamo collegato il bottone (nel nostro caso il pin digitale 4) e il LED (nel nostro caso il pin digitale 3)
Codice:

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);    
 Serial.begin(9600); 
}


Nel setup dichiariamo i pin in entrata e in uscita ed inizializziamo la porta seriale:
Codice:

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);    
 Serial.begin(9600); 
}


Nel¬†loop, ad ogni ciclo il microcontrollore controller√† lo stato del pin digitale al quale abbiamo assegnato il bottone in ingresso, se il bottone √® stato premuto allora tramite il comando¬†digitalWriteverr√† acceso il led, e tramite il comando¬†Serial.print¬†verr√† stampata la stringa “Button“.
Inoltre verrà incrementato il valore della variabile i, e inseguito stampato a schemo.
Queste sono solo alcune delle possibilit√† d’uso del nostro pulsante;
Considerate il bottone come una sorgente di interrupt da impartire al microcontrollore per svolgere qualsiasi tipo di compito.

Codice:

void loop(){
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin, HIGH); 
    // print some lines to serial port 
    Serial.print("Button");
    // increment variable i and display
    Serial.println(i);
    i++;
    //wait for 0.5 seconds
    delay(500);
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW); 
  }
}

 

Per qualunque chiarimento invito a lasciare un commento nel box sottostante ūüôā