Comunicación i2c esclavo
Enviado por DIANA VALENTINA MORALES GONZALEZ • 24 de Febrero de 2022 • Tarea • 832 Palabras (4 Páginas) • 86 Visitas
esclavo:
# include "mbed.h"
#include <iostream>
#include<string>
# define BUFFER_SIZE 3
# define SLAVE_ADDR 0xA0
using namespace std;
I2CSlave slave (D14,D15);
RawSerial pc (USBTX, USBRX);
AnalogIn Potenciometro(A5);
DigitalOut Mderecha(A0);
DigitalOut Mizquierda (A4);
int ADCdata,datoSensor,ADCdataU,ADCdataD;
char buf [BUFFER_SIZE]="AB";
char buf2 [BUFFER_SIZE]="FG";
char buff [BUFFER_SIZE]="FG";
void leer_sensor();
bool f=0;
void motor ();
void leer_sensor();
Ticker timer;
void motor (){
Mderecha=0;
Mizquierda=0;
timer.detach();
}
int main (){
slave.address(SLAVE_ADDR);
while(1){
int i = slave.receive();
switch(i){
case I2CSlave::ReadAddressed:
slave.write(buf,BUFFER_SIZE);
pc.printf("Enviado al maestro: %s\n",buf);
f=1;
break;
case I2CSlave::WriteGeneral:
slave.read(buf,BUFFER_SIZE);
pc.printf("Leido del maestro (general): %s\n",buf);
break;
case I2CSlave::WriteAddressed:
slave.read(buf2,BUFFER_SIZE);
pc.printf("Leido del maestro: %s\n",buf2);
break;
}
if (f== 1){
leer_sensor();
f=0;
}
if (buf2[1]==100){
Mderecha=1;
Mizquierda=0;
timer.attach(&motor, 10);
buf2[1]=buff[1];
}
else if (buf2[1]==105){
Mizquierda=1;
Mderecha=0;
timer.attach(&motor, 10);
buf2[1]=buff[1];
}
}
}
void leer_sensor(){
int valor=0;
int vector[2];
for (int i=0; i<2; i++) {
vector[i]= Potenciometro.read_u16();
valor= valor +vector[i]; //Toma de datos
//wait (0.01);
}
ADCdata = valor/2;
ADCdataU = ADCdata>>8;
...