Rover Tecnoblas con motores, Servo, ultrasonido y cristal liquido LCD
En esta actividad es problable que Tinkercad, no tenga los comandos necesarios en sus bloques de programación para algún componente del circuito. Tendremos que utilizar otro programa de bloques para programar nuestro robot, recomiendo ArduinoBlokcs y Facilino ambos online, y Visualino que podemos encontrar en el software de linux
https://roboticafacil.es/facilino/blockly/Facilino.html
#include <LiquidCrystal.h>
#include <Servo.h>
double Distancia;
LiquidCrystal lcd(12,11,7,6,5,4);
Servo servo_13;
double fnc_ultrasonic_distance(int _t, int _e){
unsigned long dur=0;
digitalWrite(_t, LOW);
delayMicroseconds(5);
digitalWrite(_t, HIGH);
delayMicroseconds(10);
digitalWrite(_t, LOW);
dur = pulseIn(_e, HIGH, 18000);
if(dur==0)return 999.0;
return (dur/57);
}
void fnc_dynamic_digitalWrite(int _pin, int _e){
pinMode(_pin,OUTPUT);
digitalWrite(_pin,_e);
}
void setup()
{
lcd.begin(16, 2);
pinMode(9, OUTPUT);
pinMode(8, INPUT);
servo_13.attach(13);
Distancia = 0;
}
void loop()
{
Distancia = fnc_ultrasonic_distance(9,8);
lcd.setCursor(0, 0);
lcd.print(String("Dist:"));
lcd.setCursor(8, 0);
lcd.print(Distancia);
lcd.setCursor(0, 1);
lcd.print(String("Sentido:"));
if ((Distancia <= 20)) {
lcd.setCursor(10, 1);
lcd.print(String("Atras"));
fnc_dynamic_digitalWrite(0, LOW);
fnc_dynamic_digitalWrite(1, HIGH);
fnc_dynamic_digitalWrite(2, HIGH);
fnc_dynamic_digitalWrite(3, LOW);
delay(1000);
} else {
lcd.setCursor(10, 1);
lcd.print(String("Adelante"));
fnc_dynamic_digitalWrite(0, HIGH);
fnc_dynamic_digitalWrite(1, HIGH);
fnc_dynamic_digitalWrite(2, HIGH);
fnc_dynamic_digitalWrite(3, HIGH);
}
while ((Distancia >= 20)) {
servo_13.write(0);
delay(100);
delay(1000);
servo_13.write(180);
delay(100);
delay(1000);
}
}