#include <Wire.h>
#define trig 23
#define echo 18
float distancia;
float duracion;
float metros;
byte conf[] = {3, 3, 3, 2, 2, 8, 0, 14, 0, 1, 0, 6};
byte tiempos[] = {15, 5, 1, 1, 1, 1, 1, 1}; //15, 5, 1, 1, 1, 1, 1, 1
bool rw = 0;
bool rs;
bool LED = 1;
byte pcf_addr = 0x27;
char mens1[] = "CESAR ROJAS 7-8 ";
char mens2[] = "Distancia:";
void sendnibble(byte n, byte l, byte w, byte s) {
byte dato = (n << 4) | (l << 3) | 0x04 | (w << 2) | s;
Wire.beginTransmission(pcf_addr);
Wire.write(dato);
Wire.endTransmission();
dato = dato & 0xfb;
Wire.beginTransmission(pcf_addr);
Wire.write(dato);
Wire.endTransmission();
}
void sendbyte(char n) {
byte dat = n >> 4;
sendnibble(dat, LED, rw, rs);
sendnibble(n, LED, rw, rs);
}
void setup() {
Serial.begin(115200);
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
Wire.begin();
rs = 0;
for (char i = 0; i <= 11; i++) {
delay(tiempos[i]);
sendnibble(conf[i], LED, rw, rs);
}
rs = 1;
for (char i = 0; i < 16; i++) {
sendbyte(mens1[i]);
}
updateDisplay();
rs = 0;
sendbyte(0xC0);
rs = 1;
for (char i = 0; i < 10; i++) {
sendbyte(mens2[i]);
}
}
void loop(){
digitalWrite(trig,HIGH);
delayMicroseconds(1000);
digitalWrite(trig,LOW);
duracion=pulseIn(echo, HIGH);
distancia=(duracion*0.034)/2;
delayMicroseconds(500);
metros=distancia/100;
rs = 0;
sendbyte(0xca); //0x88
rs = 1;
updateDisplay();
}
void updateDisplay() {
char mets[10];
sprintf(mets,"%.3fM", metros);
for (char i = 0; i < 9; i++) {
sendbyte(mets[i]);
}
}