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.
main.cpp
- Committer:
- Nicolas_11
- Date:
- 2018-10-18
- Revision:
- 0:e1f0a37abd92
File content as of revision 0:e1f0a37abd92:
#include "mbed.h"
SPI deviceM(PB_15, PB_14, PB_13);
DigitalOut ssel (PB_12);
Serial a(USBTX,USBRX);
InterruptIn button(USER_BUTTON);
InterruptIn button2(PA_13);
#define uint8_t unsigned char
int Tipofig=0;
int vcol;
float Vel=0.3;
int grado=0;
int in,out;
int lim;
int lim2;
int m;
int hhh;
int col;
uint8_t Matr[9]={0,0,0,0,0,0,0,0,0};
uint8_t F_t[3]={0b11100000,0b01000000,0};
uint8_t F_s[3]={0b11000000,0b01100000,0};
uint8_t F_c[3]={0b11000000,0b11000000,0};
uint8_t F_l[3]={0b11000000,0b10000000,0b10000000};
uint8_t F_I[3]={0b10000000,0b10000000,0b10000000};
int poscol;
void sendSPI(uint8_t d1, uint8_t d2)
{
deviceM.unlock();
ssel=0;
deviceM.write(d1);
deviceM.write(d2);
ssel=1;
deviceM.lock();
}
void borrar()
{
for(int i;i<=8;i++) {
sendSPI(i,0);
}
}
void inicializar(){
a.baud(9600);
sendSPI(0x0c,1);
sendSPI(0x09,0);
sendSPI(0x0A,0x01);
sendSPI(0x0F,1);
wait (0.5);
sendSPI(0x0F,0);
wait(0.5);
sendSPI(0xB,0x7);
borrar();
}
void Rx_interrupt();
void pressed()
{
lim2--;
if(lim2<2){
lim2=1;
}
lim2=(hhh)-lim2;
a.printf("valor %d\n",lim2);
return;
}
void pressed2()
{
lim2++;
if(lim2>=8){
lim2=8;
}
a.printf("valor2 %d\n",lim2);
return;
}
void scan(uint8_t *sc,uint8_t *fli,uint8_t tras)
{
int i;
int f;
uint8_t t;
for(i=1;i<=8;i++)
{
t=*(fli)>>(tras-1);
if(i>7){f=(*(sc+(8)))&(t);break;}
else{f=(*(sc+(i+1)))&(t);}
if(f>0){lim=i;break;}
else{lim=8;}
}
a.printf("\n stop de fila \n %d",i);
a.printf("\n limite \n %d",lim);
}
void save(uint8_t *vC,uint8_t col)
{
hhh=col;
if((*(vC))==0b10000000 && (*(vC+1))==0b10000000&& (*(vC+2))==0b10000000 && col==7 ){col=7;}
if((*(vC))==0b10000000 && (*(vC+1))==0b10000000&& (*(vC+2))==0b10000000 && col==8 ){col=7;}
if((*(vC))==0b11000000 && (*(vC+1))==0b11000000 && col==8 ){col=8;}
if(col>=6){col=6;}
uint8_t dat [8];
scan(Matr,vC,col);
int i;
int j=1;
int h=1;
lim2=col;
a.printf("\n limite led \n %d",lim);
for(i=1;i<=lim;i++){
if(i>=1){
//button.fall(&pressed);
//button2.fall(&pressed2);
j=i-1;
h=i-2;
col=lim2;
dat[1]=((*(vC))>>col-1) ;
dat[2]=(*(vC+1)>>col-1) ;
dat[3]=(*(vC+2)>>col-1) ;
uint8_t e=~((0b11100000)>>col-1);
/*
if(i>=2){
dat[1]=(((*(vC))>>col-1))<<(m) ;
dat[2]=((*(vC+1)>>col-1))<<(m) ;
dat[3]=((*(vC+2)>>col-1))<<(m);
a.printf("\n limit \n %d",m);
}
*/
Matr[i]=dat[1] | Matr[i];
Matr[j]=((dat[2] | Matr[j])&(dat[2]|e));
Matr[h]=((dat[3] | Matr[h])&(dat[3]|e));
if(i>=3){Matr[i-3]=Matr[i-3]&e;}
sendSPI(i,(Matr[i]));
sendSPI(j,(Matr[j]));
sendSPI(h,(Matr[h]));
sendSPI((i-3),(Matr[i-3]));
wait(Vel);
}
if(i>=8){break;}
}
}
void giro(uint8_t *f,uint8_t col,uint8_t gi)
{
uint8_t a[3]={0,0,0};
int i;
int j;
switch(gi){
case 0:save(f,col);break;
case 1:
for(j=0;j<3;j++){
for(i=0;i<3;i++){
a[i]=((((*(f+j))<<2-i)&0b10000000)>>j)+a[i];
}
}
save(a,col);
break;
case 2:
for(j=0;j<3;j++){
for(i=0;i<3;i++){
a[i]=((((*(f+(2-i)))>>2-j)&0b00100000)<<j)+a[i];
}
}
save(a,col);
break;
case 3:
for(j=0;j<3;j++){
for(i=0;i<3;i++){
a[i]=((((*(f+j))>>2-i)&(0b00100000))<<j)+a[i];
}
}
save(a,col);
break;
default:
break;
}
}
int main() {
inicializar();
button2.fall(&pressed;
button.fall(&pressed);
while(1){
in=a.getc();
Tipofig=a.getc();
vcol=a.getc();
grado=a.getc();
out=a.getc();
if(in==60 && 1<=Tipofig<=5 && 0<vcol<=7 && 0<=grado<=3 && out==62){
switch(Tipofig)
{
case 1:giro(F_t,vcol,grado); break;
case 2:giro(F_s,vcol,grado); break;
case 3:giro(F_c,vcol,grado); break;
case 4:giro(F_l,vcol,grado); break;
case 5:giro(F_I,vcol,grado); break;
default:break;
}
}
else{
break;
}
}
}