dissabte, 4 de maig del 2013

Caracters i humanoide que balla!

Hola de nou!
Ara us ensenyaré a crear caràcters per a que podeu crear els vostres propis!

Intentarem escriure: I (cor) Xnergic! (careta que somriu)
A sota: una figura humana que pugi els braços o els baixi segons un valor analògic que llegirem.


El circuit:
  • pin LCD RS al pin digital nº12
  • pin LCD Enable al pin digital nº11
  • pin LCD D4 al pin digital nº5
  • pin LCD D5 al pin digital nº4
  • pin LCD D6 al pin digital nº3
  • pin LCD D7 al pin digital nº2
  • pin LCD RW al negatiu
  • pin LCD A al positiu
  • pin LCD K al negatiu
  • pin LCD Vss al negatiu
  • pin LCD Vdd al positiu
La resistència variable:
  • els pins dels costats a +5V i a GND
  • el pin OUT al pin V0 de la LCD
  • l'altre resistència al pin A0

Així és com tindrem el nostre circuit: (conté spoiler de la LCD!)




El codi:


// incloem la llibreria:
#include <LiquidCrystal.h>

// Carreguem els pins on està connectada la LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// creem els caracters:
byte cor[8] = {         //Primer de tot haurem de fer una matriu de 8x5, i per això hi ha el [8]
  0b00000,               //El 5 no apareix, perquè pot ser tan llarg com vulguem
  0b01010,               //un 0 és el pixel apagat
  0b11111,               //un 1 és el pixel encès
  0b11111,               //aquí fem un cor
  0b11111,
  0b01110,
  0b00100,
  0b00000
};

byte rialla[8] = {       //aquí una careta rient
  0b00000,
  0b00000,
  0b01010,
  0b00000,
  0b00000,
  0b10001,
  0b01110,
  0b00000
};

byte tristesa[8] = {      //aquí una cara trista, però no la farem servir...
  0b00000,
  0b00000,
  0b01010,
  0b00000,
  0b00000,
  0b00000,
  0b01110,
  0b10001
};

byte bracosavall[8] = {  //aquí una figura amb els braços amunt
  0b00100,
  0b01010,
  0b00100,
  0b00100,
  0b01110,
  0b10101,
  0b00100,
  0b01010
};

byte bracosamunt[8] = {   //i per acabar una figura amb els braços avall
  0b00100,
  0b01010,
  0b00100,
  0b10101,
  0b01110,
  0b00100,
  0b00100,
  0b01010
};

void setup() {
  // creem el nou caracter
  lcd.createChar(0, cor);
  // creem el nou caracter
  lcd.createChar(1, rialla);
  // creem el nou caracter
  lcd.createChar(2, tristesa);
  // creem el nou caracter
  lcd.createChar(3, bracosavall);  
  // creem el nou caracter
  lcd.createChar(4, bracosamunt);  

  // definim com sempre files i columnes: 
  lcd.begin(16, 2);
  // Escriurem "I (cor) Xnergic! (careta)"
  lcd.print("I "); 
  lcd.write(byte(0));
  lcd.print(" Xnergic! ");
  lcd.write(byte(1));

}

Fins aquí obtindrem:


void loop() {
  // llegim el potenciòmetre A0:
  int sensorReading = analogRead(A0);
  // fem un map de 200 - 1000:
  int delayTime = map(sensorReading, 0, 1023, 200, 1000);
  // col·loquem el cursor a la línia de sota, 5na posició:
  lcd.setCursor(4, 1);
  // dibuixem l'humà, amb els braços avall:
  lcd.write(byte(3));
  delay(delayTime);
  lcd.setCursor(4, 1);
  // dibuixem la figura amb els braços amunt:
  lcd.write(byte(4));
  delay(delayTime); 
}

//El que fem es canviar el temps en que la figura canvia de pujar a baixar els braços


I acabem tenint això:


Cap comentari:

Publica un comentari a l'entrada