Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed Adafruit_GFX DS1820
Diff: main.cpp
- Revision:
- 0:d6db09ba7537
- Child:
- 1:65e9a9b006c1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Wed Dec 15 18:02:35 2021 +0000
@@ -0,0 +1,337 @@
+#include "mbed.h"
+#include "hcsr04.h"
+#include "DS1820.h"
+
+
+#include "Adafruit_SSD1306.h"
+
+class I2CPreInit : public I2C
+{
+public:
+ I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl)
+ {
+ frequency(100000);
+ start();
+ };
+};
+
+I2CPreInit gI2C(PB_9,PB_8);
+
+Adafruit_SSD1306_I2c gOled(gI2C,NC,0x78,64,128);
+
+
+Serial pc(USBTX, USBRX);
+
+
+
+Ticker tickerMideDistancia;
+unsigned distancia=20;
+
+HCSR04 usensor(D7,D8); //(PinName TrigPin,PinName EchoPin):
+DigitalIn finalDer(D2); //Final de carrera DERECHA
+DigitalIn finalIzq(D3); //Final de carrera IZQUIERDA
+DigitalIn boton(D5); //Boton para iniciar el programa seleccionado
+DigitalIn switcher(D9); //Interruptor para indicar que programa usar
+DigitalOut step(D13);
+DigitalOut dir(D12);
+DigitalOut enable(D11);
+DigitalOut led(LED1);
+DigitalOut myLed1 (D4); //Indicador programa Taladro seleccionado
+DigitalOut myLed2 (D6); //Indicador programa Transportador de Piezas seleccionado
+
+DS1820 ds1820(D10); //Substitute PA_9 with actual mbed pin name connected to the DS1820 data pin
+
+
+
+float temp = 0;
+int contador=0; //Contador de Piezas e Impactos del Taladro
+int FUNCIONAR=0; //Variable que de comienzo al programa en funcion del boton
+
+
+int x=0; //Variable abilitadora programa Transportador de Piezas, en funcion del interruptor
+int y=0; //Variable abilitadora programa Taladro, en funcion del interruptor
+
+Timer tiempo; //Temprizador para las acciones del taladro
+
+enum estados {cerrada, abriendose, cerrandose, abierta};
+estados estado;
+
+
+void paso(int d)
+{
+ dir=d;
+ step=1;
+ wait_us(100); // Cambio de paso
+ step=0;
+ wait_us(900); //Este hay que cambiar
+}
+
+void estadoCerrada()
+{
+
+ if (x==1) { //Entrada al Transportador de Piezas
+
+ if((finalIzq == 1) && (FUNCIONAR==1)) { //Inicio en funcion del Final de Carrera de la Izquierda y del Boton
+ wait(0.5); //Tiempo de espera para descargar la Pieza
+ enable=1;
+ estado=abriendose;
+
+ pc.printf("Final2 pulsado\r\n");
+
+ }
+ }
+
+ if(y==1) { //Entrada al Taladro
+
+ if((finalIzq == 1) && (FUNCIONAR==1)) { //Inicio en funcion del Final de Carrera de la Izquierda y del Boton
+ enable=1;
+ estado=abriendose;
+
+ }
+
+
+ else if (contador>0){ //Una vez se alcanza la posicion para taladrar, el contador es mayor de 0 y no parara/cumplira esta condicion hasta que al final del programa se iguale el contador a 0
+
+ estado=abriendose;
+
+
+ }
+
+ tiempo.reset();
+ tiempo.start();
+ }
+
+
+}
+
+void estadoAbriendose()
+{
+
+ if(x==1) { //Entrada al Transportador de Piezas
+
+ if((finalDer==1)) {
+
+ estado=abierta;
+ enable=0;
+
+ }
+
+ else {
+
+ gOled.clearDisplay();
+
+ paso(1);
+
+ }
+ }
+
+
+ if(y==1) { //Entrada al Taladro
+
+
+ if(tiempo.read() > 4 ){
+
+ contador++;
+ estado=abierta;
+ enable=0;
+
+ }
+
+ else if ((contador>0) && (tiempo.read() > 0.6)){
+
+ contador++;
+ estado=abierta;
+ enable=0;
+
+ }
+ else {
+
+ paso(1);
+
+
+ }
+
+ }
+
+
+}
+
+void estadoCerrandose()
+{
+
+ if(x==1) { //Entrada al Transportador de Piezas
+
+ if((finalIzq==1 && contador<3)) { //Bucle hasta hasta que el contador alcance 3
+
+ estado=cerrada;
+ enable=0;
+ }
+
+ else if ((finalIzq==1)&& contador>2) { //Cuando el contador alcance 3, se terminara el programa
+
+ estado = cerrada;
+ enable = 0;
+ contador=0;
+ FUNCIONAR=0;
+
+ }
+
+ else { //Activar/Mantener movimiento
+
+ paso(0);
+
+ }
+ }
+
+ if (y==1){ //Entrada al Taladro
+
+ if((tiempo.read() > 0.6) && contador<7) { //Recorrido limitado por tiempo y contador(menor que 7) para taladro
+
+ estado=cerrada;
+
+ }
+
+
+ else if ((contador>6)&& (finalIzq==1)){ //Cuando el contador alcance 7 se pulse el final de carrera de la izquierda, se terminara el programa
+
+ estado = cerrada;
+ enable = 0;
+ contador=0;
+ FUNCIONAR=0;
+
+ }
+
+
+ else {
+
+ paso(0); //Activar/Mantener movimiento
+
+ }
+
+ }
+
+}
+
+void estadoAbierta()
+{
+
+ if(x==1){ //Entrada al Transportador de Piezas
+
+ contador++; //Contador Piezas
+
+
+ gOled.clearDisplay();
+ gOled.printf("Piezas Transportadas = %d\n",contador);
+ gOled.printf("temp = %3.1f C\r\n", temp);
+ gOled.display();
+ gOled.setTextCursor(0,0);
+ pc.printf("temp = %3.1f C\r\n", temp);
+
+
+ }
+
+ if (y==1){ //Entrada al Taladro
+
+ gOled.clearDisplay();
+ gOled.printf("Impactos Taladro = %d\n",contador);
+ gOled.printf("temp = %3.1f C\r\n", temp);
+ gOled.display();
+ gOled.setTextCursor(0,0);
+ pc.printf("temp = %3.1f C\r\n", temp);
+
+ }
+
+
+ tiempo.reset();
+ tiempo.start();
+
+ enable=1;
+ estado=cerrandose;
+
+}
+
+
+int main()
+{
+ pc.baud(115200);
+ estado=cerrada;
+ gOled.begin();
+ gOled.clearDisplay();
+ gOled.printf("Hola\n");
+ gOled.display();
+
+
+ if (boton == 1){
+
+ FUNCIONAR=1;
+
+ }
+
+
+
+ if(x==1) {
+ gOled.clearDisplay();
+ gOled.printf("Programa: Transporte de Piezas\n");
+ gOled.display();
+ }
+
+ if(y==1) {
+ gOled.clearDisplay();
+ gOled.printf("Programa: Taladro\n");
+ gOled.display();
+ }
+ tiempo.reset();
+
+ pc.baud(115200);
+
+ while(1) {
+
+ if (switcher ==0){ //Programa Transportador de Piezas
+
+ y=0;
+ x=1;
+
+ myLed1=1;
+ myLed2=0;
+
+ }
+
+ else if (switcher==1){ //Programa Taladro
+
+ y=1;
+ x=0;
+
+ myLed1=0;
+ myLed2=1;
+
+ }
+
+ if (boton==1){
+
+ FUNCIONAR=1;
+
+ }
+
+
+ switch ( estado ) {
+ case cerrada:
+ estadoCerrada();
+ break;
+ case abriendose:
+ estadoAbriendose();
+ break;
+ case abierta:
+ estadoAbierta();
+ break;
+ case cerrandose:
+ estadoCerrandose();
+ break;
+ default:
+ break;
+ }
+
+
+ }
+
+}
+