proyrcto

Dependencies:   Adafruit_GFX mbed

Committer:
juankafil1
Date:
Tue Dec 05 11:16:14 2017 +0000
Revision:
0:3168baff6399
transversal

Who changed what in which revision?

UserRevisionLine numberNew contents of line
juankafil1 0:3168baff6399 1 #include "mbed.h"
juankafil1 0:3168baff6399 2 // #include "SSD1306.h"
juankafil1 0:3168baff6399 3 #include "Adafruit_SSD1306.h"
juankafil1 0:3168baff6399 4 #define SDA PTE0
juankafil1 0:3168baff6399 5 #define SCL PTE1
juankafil1 0:3168baff6399 6 DigitalIn boton(PTB0);
juankafil1 0:3168baff6399 7 DigitalIn boton1(PTB1);
juankafil1 0:3168baff6399 8 DigitalOut led(LED1);
juankafil1 0:3168baff6399 9 DigitalOut led1(LED3);
juankafil1 0:3168baff6399 10 DigitalOut p(PTC16);
juankafil1 0:3168baff6399 11 Timer x;
juankafil1 0:3168baff6399 12
juankafil1 0:3168baff6399 13 Serial rs232(USBTX, USBRX);
juankafil1 0:3168baff6399 14 BusOut step_secuence(PTD6, PTA17, PTA16, PTC17);
juankafil1 0:3168baff6399 15 unsigned int num_pasos,i,g=0,k,aux=0,color=1,n1=0,v1=0,a1=0,d1=0;
juankafil1 0:3168baff6399 16 int grados,b=0,c=0,tiempo=0,a=0;
juankafil1 0:3168baff6399 17 Timer t;
juankafil1 0:3168baff6399 18 class I2C2 : public I2C
juankafil1 0:3168baff6399 19 {
juankafil1 0:3168baff6399 20 public:
juankafil1 0:3168baff6399 21 I2C2(PinName sda, PinName scl) : I2C(sda, scl) {
juankafil1 0:3168baff6399 22 frequency(400000);
juankafil1 0:3168baff6399 23 start();
juankafil1 0:3168baff6399 24 };
juankafil1 0:3168baff6399 25 };
juankafil1 0:3168baff6399 26
juankafil1 0:3168baff6399 27 I2C2 gI2C(SDA,SCL);
juankafil1 0:3168baff6399 28 Adafruit_SSD1306_I2c gOled2(gI2C, NC, 0x78, 64, 128);
juankafil1 0:3168baff6399 29
juankafil1 0:3168baff6399 30
juankafil1 0:3168baff6399 31 void retro(int cont_pasos) // Retroceso motor
juankafil1 0:3168baff6399 32 {
juankafil1 0:3168baff6399 33 k=0;
juankafil1 0:3168baff6399 34 for (i = 0; i<=cont_pasos; i++) {
juankafil1 0:3168baff6399 35 if (k>=4) {
juankafil1 0:3168baff6399 36 k=0;
juankafil1 0:3168baff6399 37 }
juankafil1 0:3168baff6399 38 switch (k) {
juankafil1 0:3168baff6399 39 case 0:
juankafil1 0:3168baff6399 40 step_secuence=0x06;
juankafil1 0:3168baff6399 41 break;
juankafil1 0:3168baff6399 42 case 1:
juankafil1 0:3168baff6399 43 step_secuence=0x05;
juankafil1 0:3168baff6399 44 break;
juankafil1 0:3168baff6399 45 case 2:
juankafil1 0:3168baff6399 46 step_secuence=0x09;
juankafil1 0:3168baff6399 47 break;
juankafil1 0:3168baff6399 48 case 3:
juankafil1 0:3168baff6399 49 step_secuence=0x0A;
juankafil1 0:3168baff6399 50 break;
juankafil1 0:3168baff6399 51
juankafil1 0:3168baff6399 52 }
juankafil1 0:3168baff6399 53 wait(0.2);
juankafil1 0:3168baff6399 54 ++k;
juankafil1 0:3168baff6399 55 }
juankafil1 0:3168baff6399 56 }
juankafil1 0:3168baff6399 57 void forward(int cont_pasos) // Avance motor
juankafil1 0:3168baff6399 58 {
juankafil1 0:3168baff6399 59 k=0;
juankafil1 0:3168baff6399 60 for (i = 0; i<=cont_pasos; i++) {
juankafil1 0:3168baff6399 61 if (k>=4) {
juankafil1 0:3168baff6399 62 k=0;
juankafil1 0:3168baff6399 63 }
juankafil1 0:3168baff6399 64 switch (k) {
juankafil1 0:3168baff6399 65 case 0:
juankafil1 0:3168baff6399 66 step_secuence=0x0A;
juankafil1 0:3168baff6399 67 break;
juankafil1 0:3168baff6399 68 case 1:
juankafil1 0:3168baff6399 69 step_secuence=0x09;
juankafil1 0:3168baff6399 70
juankafil1 0:3168baff6399 71 break;
juankafil1 0:3168baff6399 72
juankafil1 0:3168baff6399 73 case 2:
juankafil1 0:3168baff6399 74 step_secuence=0x05;
juankafil1 0:3168baff6399 75 break;
juankafil1 0:3168baff6399 76 case 3:
juankafil1 0:3168baff6399 77 step_secuence=0x06;
juankafil1 0:3168baff6399 78
juankafil1 0:3168baff6399 79 break;
juankafil1 0:3168baff6399 80 }
juankafil1 0:3168baff6399 81 ++k;
juankafil1 0:3168baff6399 82 wait(0.2);
juankafil1 0:3168baff6399 83 }
juankafil1 0:3168baff6399 84
juankafil1 0:3168baff6399 85 }
juankafil1 0:3168baff6399 86
juankafil1 0:3168baff6399 87
juankafil1 0:3168baff6399 88 Timer Timer1;
juankafil1 0:3168baff6399 89 InterruptIn int1(PTD0);
juankafil1 0:3168baff6399 90
juankafil1 0:3168baff6399 91 unsigned int contador=0,frec=0,conn=0,conm=0,cona=0, conN=0;
juankafil1 0:3168baff6399 92 uint16_t V = 0, N = 0, A = 0, R = 0;
juankafil1 0:3168baff6399 93
juankafil1 0:3168baff6399 94
juankafil1 0:3168baff6399 95 void ISR_PTD0(){//cuenta los pulsos
juankafil1 0:3168baff6399 96 ++contador;}
juankafil1 0:3168baff6399 97
juankafil1 0:3168baff6399 98 void frecuencia(){
juankafil1 0:3168baff6399 99
juankafil1 0:3168baff6399 100 contador=0;
juankafil1 0:3168baff6399 101 Timer1.start();//arranca temporizador
juankafil1 0:3168baff6399 102 while(Timer1.read_ms()<=10);//cuando lleve a 10 ms pare
juankafil1 0:3168baff6399 103 Timer1.stop();//lo detengo
juankafil1 0:3168baff6399 104 frec=100*contador;//lo multiplicamos por 100
juankafil1 0:3168baff6399 105 Timer1.reset();}//reinicia el timer
juankafil1 0:3168baff6399 106
juankafil1 0:3168baff6399 107 void contadores(){
juankafil1 0:3168baff6399 108 if((frec>=1)&&(frec<=2000)){
juankafil1 0:3168baff6399 109 gOled2.setTextCursor(0, 16);
juankafil1 0:3168baff6399 110 gOled2.printf("esperando"); }
juankafil1 0:3168baff6399 111 else if((frec>=2100)&&(frec<=5900)){
juankafil1 0:3168baff6399 112 n1=1;
juankafil1 0:3168baff6399 113 color=2;
juankafil1 0:3168baff6399 114 rs232.printf("%d",4);
juankafil1 0:3168baff6399 115 gOled2.clearDisplay();
juankafil1 0:3168baff6399 116 gOled2.setTextCursor(0, 16);
juankafil1 0:3168baff6399 117 gOled2.printf("Detectado color Negro\n");
juankafil1 0:3168baff6399 118 conn=conn+1;//aumento el contador
juankafil1 0:3168baff6399 119 N=conn;
juankafil1 0:3168baff6399 120 gOled2.printf("Numero de cajas:\n%u",N);
juankafil1 0:3168baff6399 121 //lcd.locate(0,1);//preparado para pubicar
juankafil1 0:3168baff6399 122 // wait(2);//retraso mientras pasa la caja
juankafil1 0:3168baff6399 123
juankafil1 0:3168baff6399 124 }
juankafil1 0:3168baff6399 125 else if((frec>=6000)&&(frec<=12900)){
juankafil1 0:3168baff6399 126 v1=1;
juankafil1 0:3168baff6399 127 color=3;
juankafil1 0:3168baff6399 128 rs232.printf("%d",3);
juankafil1 0:3168baff6399 129 gOled2.clearDisplay();
juankafil1 0:3168baff6399 130 gOled2.setTextCursor(0, 16);
juankafil1 0:3168baff6399 131 gOled2.printf("Detectado color\n");//publico el color de la frecuencia
juankafil1 0:3168baff6399 132 gOled2.printf("Violeta\n");
juankafil1 0:3168baff6399 133 conm=conm+1;//aumento el contador
juankafil1 0:3168baff6399 134 V=conm;
juankafil1 0:3168baff6399 135 gOled2.printf("Numero de cajas:\n%u",V);
juankafil1 0:3168baff6399 136 // rs232.printf("violeta\n\r%d",conm);
juankafil1 0:3168baff6399 137 // wait(2);//retraso mientras pasa la caja
juankafil1 0:3168baff6399 138
juankafil1 0:3168baff6399 139 }else if((frec>=13000)&&(frec<=24000)){
juankafil1 0:3168baff6399 140 a1=1;
juankafil1 0:3168baff6399 141 color=4;
juankafil1 0:3168baff6399 142 rs232.printf("%d",2);
juankafil1 0:3168baff6399 143 gOled2.clearDisplay();
juankafil1 0:3168baff6399 144 gOled2.setTextCursor(0, 16);
juankafil1 0:3168baff6399 145 gOled2.printf("Detectado color Azul\n");
juankafil1 0:3168baff6399 146 cona=cona+1;//aumento el contador
juankafil1 0:3168baff6399 147 A=cona;
juankafil1 0:3168baff6399 148 gOled2.printf("Numero de cajas:\n%u",A);
juankafil1 0:3168baff6399 149 // wait(2);
juankafil1 0:3168baff6399 150 } // rs232.printf("azul\n\r%d",cona);}
juankafil1 0:3168baff6399 151
juankafil1 0:3168baff6399 152 else {
juankafil1 0:3168baff6399 153 color=1;
juankafil1 0:3168baff6399 154 d1=1;
juankafil1 0:3168baff6399 155 uint16_t R = 0;
juankafil1 0:3168baff6399 156 rs232.printf("%d",1);
juankafil1 0:3168baff6399 157 gOled2.clearDisplay();
juankafil1 0:3168baff6399 158 gOled2.setTextCursor(0, 16);
juankafil1 0:3168baff6399 159 gOled2.printf("Caja no reconocida\n");
juankafil1 0:3168baff6399 160 conN=conN+1;
juankafil1 0:3168baff6399 161 R=conN;
juankafil1 0:3168baff6399 162 gOled2.printf("Numero de cajas:\n%u",R);
juankafil1 0:3168baff6399 163 //wait(2);
juankafil1 0:3168baff6399 164
juankafil1 0:3168baff6399 165
juankafil1 0:3168baff6399 166 }
juankafil1 0:3168baff6399 167 }
juankafil1 0:3168baff6399 168
juankafil1 0:3168baff6399 169 void motor() {
juankafil1 0:3168baff6399 170
juankafil1 0:3168baff6399 171
juankafil1 0:3168baff6399 172 if(color==1){
juankafil1 0:3168baff6399 173 if(n1==1){
juankafil1 0:3168baff6399 174 forward(12);
juankafil1 0:3168baff6399 175 grados=90;
juankafil1 0:3168baff6399 176 //k=10000;
juankafil1 0:3168baff6399 177 n1=0;
juankafil1 0:3168baff6399 178 }
juankafil1 0:3168baff6399 179 else if(v1==1){
juankafil1 0:3168baff6399 180 forward(24);
juankafil1 0:3168baff6399 181 grados=180;
juankafil1 0:3168baff6399 182 v1=0;
juankafil1 0:3168baff6399 183 }
juankafil1 0:3168baff6399 184 else if(a1==1){
juankafil1 0:3168baff6399 185 retro(12);
juankafil1 0:3168baff6399 186 grados=90;
juankafil1 0:3168baff6399 187 wait(2);
juankafil1 0:3168baff6399 188 a1=0;
juankafil1 0:3168baff6399 189 } else {
juankafil1 0:3168baff6399 190
juankafil1 0:3168baff6399 191 wait(2);
juankafil1 0:3168baff6399 192 }
juankafil1 0:3168baff6399 193
juankafil1 0:3168baff6399 194 }if(color==2){
juankafil1 0:3168baff6399 195 if(d1==1){
juankafil1 0:3168baff6399 196 //while(1){
juankafil1 0:3168baff6399 197 retro(12);
juankafil1 0:3168baff6399 198 grados=90;
juankafil1 0:3168baff6399 199 wait(2);
juankafil1 0:3168baff6399 200 d1=0;
juankafil1 0:3168baff6399 201 tiempo=2150;
juankafil1 0:3168baff6399 202
juankafil1 0:3168baff6399 203 wait(2);
juankafil1 0:3168baff6399 204 //aux=aux+1;//variable para el while
juankafil1 0:3168baff6399 205 }
juankafil1 0:3168baff6399 206 //aux=0; }
juankafil1 0:3168baff6399 207 else if(v1==1){
juankafil1 0:3168baff6399 208 forward(12);
juankafil1 0:3168baff6399 209 grados=90;
juankafil1 0:3168baff6399 210 wait(2);
juankafil1 0:3168baff6399 211 v1=0;
juankafil1 0:3168baff6399 212 }
juankafil1 0:3168baff6399 213 else if(a1==1){
juankafil1 0:3168baff6399 214 retro(24);
juankafil1 0:3168baff6399 215 grados=180;
juankafil1 0:3168baff6399 216 a1=0;
juankafil1 0:3168baff6399 217 } else {
juankafil1 0:3168baff6399 218 wait(2);
juankafil1 0:3168baff6399 219 }
juankafil1 0:3168baff6399 220
juankafil1 0:3168baff6399 221 }if(color==3){
juankafil1 0:3168baff6399 222 if(d1==1){
juankafil1 0:3168baff6399 223 forward(24);
juankafil1 0:3168baff6399 224 grados=180;
juankafil1 0:3168baff6399 225 d1=0;
juankafil1 0:3168baff6399 226 tiempo=3250;
juankafil1 0:3168baff6399 227 }
juankafil1 0:3168baff6399 228
juankafil1 0:3168baff6399 229 else if(n1==1){
juankafil1 0:3168baff6399 230 retro(12);
juankafil1 0:3168baff6399 231 grados=90;
juankafil1 0:3168baff6399 232 wait(2);
juankafil1 0:3168baff6399 233 n1=0;//ponemos la posicion anterior en 0
juankafil1 0:3168baff6399 234 }
juankafil1 0:3168baff6399 235 else if(a1==1){
juankafil1 0:3168baff6399 236 forward(12);
juankafil1 0:3168baff6399 237 grados=90;
juankafil1 0:3168baff6399 238 wait(2);
juankafil1 0:3168baff6399 239 a1=0;//ponemos la posicion anterior en 0
juankafil1 0:3168baff6399 240 } else {
juankafil1 0:3168baff6399 241 wait(2);
juankafil1 0:3168baff6399 242 }
juankafil1 0:3168baff6399 243
juankafil1 0:3168baff6399 244 }if(color==4){
juankafil1 0:3168baff6399 245 if(d1==1){
juankafil1 0:3168baff6399 246 forward(12);
juankafil1 0:3168baff6399 247 grados=90;
juankafil1 0:3168baff6399 248 wait(2);
juankafil1 0:3168baff6399 249 d1=0;
juankafil1 0:3168baff6399 250 }
juankafil1 0:3168baff6399 251 else if(v1==1){
juankafil1 0:3168baff6399 252 retro(12);
juankafil1 0:3168baff6399 253 grados=90;
juankafil1 0:3168baff6399 254 wait(2);
juankafil1 0:3168baff6399 255 v1=0;
juankafil1 0:3168baff6399 256 }
juankafil1 0:3168baff6399 257 else if(n1==1){
juankafil1 0:3168baff6399 258 retro(24);
juankafil1 0:3168baff6399 259 grados=180;
juankafil1 0:3168baff6399 260 n1=0;
juankafil1 0:3168baff6399 261 } else {
juankafil1 0:3168baff6399 262 wait(2);
juankafil1 0:3168baff6399 263 }
juankafil1 0:3168baff6399 264
juankafil1 0:3168baff6399 265 }
juankafil1 0:3168baff6399 266 }
juankafil1 0:3168baff6399 267
juankafil1 0:3168baff6399 268 void receivedByte(){
juankafil1 0:3168baff6399 269 int a23=0,a2=1;
juankafil1 0:3168baff6399 270 int dato_in=rs232.getc();
juankafil1 0:3168baff6399 271 if(dato_in=='N'){
juankafil1 0:3168baff6399 272 p=1;
juankafil1 0:3168baff6399 273 frec=2400;
juankafil1 0:3168baff6399 274 }
juankafil1 0:3168baff6399 275 if(dato_in=='A'){
juankafil1 0:3168baff6399 276 p=1;
juankafil1 0:3168baff6399 277 frec= 18000;}
juankafil1 0:3168baff6399 278 if(dato_in=='V'){
juankafil1 0:3168baff6399 279 p=1;
juankafil1 0:3168baff6399 280 frec=8000;}
juankafil1 0:3168baff6399 281 if(dato_in=='D'){
juankafil1 0:3168baff6399 282 frec=32000;
juankafil1 0:3168baff6399 283 p=1;}
juankafil1 0:3168baff6399 284 contadores();
juankafil1 0:3168baff6399 285 motor();
juankafil1 0:3168baff6399 286 if(p==1){
juankafil1 0:3168baff6399 287 while(a23<=110){
juankafil1 0:3168baff6399 288 if(boton1==0){
juankafil1 0:3168baff6399 289 wait(1.5);
juankafil1 0:3168baff6399 290 p=0;
juankafil1 0:3168baff6399 291 a2=0;
juankafil1 0:3168baff6399 292 rs232.printf("%d",6);
juankafil1 0:3168baff6399 293 break;
juankafil1 0:3168baff6399 294 }a23++;
juankafil1 0:3168baff6399 295 wait(0.1);}}
juankafil1 0:3168baff6399 296 if(a2==0){
juankafil1 0:3168baff6399 297 rs232.printf("%d",5);}}
juankafil1 0:3168baff6399 298
juankafil1 0:3168baff6399 299 int main(){//clase principal
juankafil1 0:3168baff6399 300 d1=1;
juankafil1 0:3168baff6399 301
juankafil1 0:3168baff6399 302 gOled2.clearDisplay();
juankafil1 0:3168baff6399 303 gOled2.display();
juankafil1 0:3168baff6399 304 gOled2.setTextCursor(10, 24);
juankafil1 0:3168baff6399 305 gOled2.printf("Iniciando presenta-cion transversal...\n\r");
juankafil1 0:3168baff6399 306 gOled2.printf(" :v");
juankafil1 0:3168baff6399 307 wait(5);
juankafil1 0:3168baff6399 308
juankafil1 0:3168baff6399 309 while(1){
juankafil1 0:3168baff6399 310 rs232.attach(&receivedByte);
juankafil1 0:3168baff6399 311 if(boton==0){
juankafil1 0:3168baff6399 312 rs232.printf("%d",0);
juankafil1 0:3168baff6399 313 t.start();
juankafil1 0:3168baff6399 314 while(t.read_ms()<=2000);
juankafil1 0:3168baff6399 315 t.stop();
juankafil1 0:3168baff6399 316 b=b+1;
juankafil1 0:3168baff6399 317 led=0;
juankafil1 0:3168baff6399 318 p=1;
juankafil1 0:3168baff6399 319 led1=1;
juankafil1 0:3168baff6399 320 // rs232.printf("conteo= %d \n\r", b);
juankafil1 0:3168baff6399 321 t.reset();
juankafil1 0:3168baff6399 322
juankafil1 0:3168baff6399 323 t.start();
juankafil1 0:3168baff6399 324 while(t.read_ms()<=4500);
juankafil1 0:3168baff6399 325 t.stop();
juankafil1 0:3168baff6399 326 rs232.baud(9600);
juankafil1 0:3168baff6399 327 int1.mode(PullUp);//habilitamos resistencia de PullUp
juankafil1 0:3168baff6399 328 int1.rise(&ISR_PTD0);//si hay flanco de subida se va a el programa, habilita la interrupcion
juankafil1 0:3168baff6399 329 //gOled2.printf("Iniciando presentacion transversal...\n"); //mensaje inicial al encender la Oled
juankafil1 0:3168baff6399 330 gOled2.display();
juankafil1 0:3168baff6399 331
juankafil1 0:3168baff6399 332 t.reset();
juankafil1 0:3168baff6399 333 p=0;
juankafil1 0:3168baff6399 334 frecuencia();
juankafil1 0:3168baff6399 335
juankafil1 0:3168baff6399 336 t.start();
juankafil1 0:3168baff6399 337 while(t.read_ms()<=2000);
juankafil1 0:3168baff6399 338 t.stop();
juankafil1 0:3168baff6399 339 p=1;
juankafil1 0:3168baff6399 340 t.reset();
juankafil1 0:3168baff6399 341 contadores();
juankafil1 0:3168baff6399 342 motor ();
juankafil1 0:3168baff6399 343 //inicia el sub programa frecuenia
juankafil1 0:3168baff6399 344 //inicia el programa de los contadores y publicacion de la frecuencia
juankafil1 0:3168baff6399 345 // rs232.printf("%dF=%d\n\r",frec,tiempo);
juankafil1 0:3168baff6399 346
juankafil1 0:3168baff6399 347 //gOled2.clearDisplay();
juankafil1 0:3168baff6399 348 gOled2.display();
juankafil1 0:3168baff6399 349 gOled2.setTextCursor(0, 0);
juankafil1 0:3168baff6399 350 gOled2.printf("se movio%d\n",grados);
juankafil1 0:3168baff6399 351
juankafil1 0:3168baff6399 352 while(a<=50){
juankafil1 0:3168baff6399 353 if(boton1==0){
juankafil1 0:3168baff6399 354 wait(1.5);
juankafil1 0:3168baff6399 355 p=0;
juankafil1 0:3168baff6399 356 c=c+1;
juankafil1 0:3168baff6399 357 rs232.printf("%d",6);
juankafil1 0:3168baff6399 358 break;
juankafil1 0:3168baff6399 359 }a++;
juankafil1 0:3168baff6399 360 wait(0.1);}
juankafil1 0:3168baff6399 361 a=0;
juankafil1 0:3168baff6399 362 if(b!=c){
juankafil1 0:3168baff6399 363 p=0;
juankafil1 0:3168baff6399 364 rs232.printf("%d",5);
juankafil1 0:3168baff6399 365 }
juankafil1 0:3168baff6399 366
juankafil1 0:3168baff6399 367
juankafil1 0:3168baff6399 368
juankafil1 0:3168baff6399 369
juankafil1 0:3168baff6399 370
juankafil1 0:3168baff6399 371
juankafil1 0:3168baff6399 372
juankafil1 0:3168baff6399 373
juankafil1 0:3168baff6399 374 }else
juankafil1 0:3168baff6399 375 gOled2.display();
juankafil1 0:3168baff6399 376 gOled2.setTextCursor(0, 0);
juankafil1 0:3168baff6399 377 gOled2.printf("esperando..");
juankafil1 0:3168baff6399 378 }
juankafil1 0:3168baff6399 379 }
juankafil1 0:3168baff6399 380