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: EthernetInterface WebSocketClient mbed-rtos mbed
Fork of Code_APP1 by
main.cpp
- Committer:
- ericbisson
- Date:
- 2017-01-17
- Revision:
- 8:6f2b7f9b0d0d
- Parent:
- 7:a57409bdf777
- Child:
- 9:400cfcf4b06e
File content as of revision 8:6f2b7f9b0d0d:
#include "mbed.h"
#include "header.h"
Serial pc(USBTX, USBRX);
SPI spi(p11, p12, p13);
DigitalOut cs(p14);
I2C i2c(p28, p27);
PwmOut led1(LED1);
void calculer_angle(char bufferAngle[], int accZ)
{
float angle = abs(cos(static_cast<float>(moyenne_mobile(accZ)*90/64)*PI/180)*90);
int angleInt = (int)(angle*100);
// reset buffer
bufferAngle[0] = '0';
bufferAngle[1] = '0';
bufferAngle[2] = '0';
bufferAngle[3] = '0';
signed char pos = 3;
while (angleInt > 1 && pos >= 0)
{
bufferAngle[pos] = angleInt % 10;
angleInt = angleInt / 10;
pos--;
}
}
void uart_init()
{
pc.printf("uart before\n");
*PCONP |= 0x02000000; // Turn ON PCUART3
*PCLKSEL1 |= 0x00040000; // Set PCLK_UART3 to 01 (CLK / 1)
*PINSEL0 &= ~0x00000003; // Turn Off TxD3 P0.0
*PINSEL0 |= 0x00000002; // Enable TxD3 P0.0
*U3FCR |= 0x00000007; // Reset Tx, Reset Rx, Enable FIFO
*U3LCR |= 0x00000083; // Enable DLAB, 8-bit char length
*U3DLM |= 0x00000000; // DLMSB ; Baud rate
*U3DLL |= 0x00000060; // DLLSB ; Baud rate
*U3LCR &= ~0x00000080; // Turn off DLAB
pc.printf("uart init()\n");
}
int main() {
int addrChip = 0x3A;
char buffer[3] = {0,0,0};
SetClockAndMode(250000, 0);
change_dots(0x02);
//Activer l'accéléromètre pour lecture 8 bits
char activation[2] = {0x2A, 0x03};
char fullScale[2] = {0x0E, 0x00};
char resultat[4] = {'0','0','0','0'};
i2c.write(addrChip, activation, 2, true);
i2c.write(addrChip, fullScale, 2, true);
while(1)
{
//Aller lire les valeurs d'accélération
buffer[0] = 0x01;
i2c.write(addrChip, buffer, 1, true);
i2c.read(addrChip, buffer, 3);
calculer_angle(resultat, buffer[2]);
chip_select(false);
write_to_7segment(resultat[0],resultat[1],resultat[2],resultat[3]);
chip_select(true);
wait(0.1);
}
}
void SetClockAndMode(int Speed, char Mode)
{
if (IS_USING_SPI)
{
spi.format(8,Mode);
spi.frequency(Speed);
}
else
{
uart_init();
}
}
void write_uart(unsigned char value)
{ pc.printf("%d - ", reverse(value));
*U3THR = reverse(value); // Data to send ; LSB first
*U3TER |= 0x80; // Enable TXEn
//*U3TER &= ~0x80; // Disable TXEn
}
// inverse bit order
unsigned char reverse(unsigned char b)
{
b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
return b;
}
// function to change displayed dots
void change_dots(char dot)
{
if (IS_USING_SPI)
{
spi.write(0x77);
spi.write(dot);
}
else
{
write_uart(0x77);
write_uart(dot);
}
}
void ResetCursor()
{
if (IS_USING_SPI)
{
spi.write(0x79);
spi.write(0);
}
else
{
write_uart(0x79);
write_uart(0);
}
}
// function used to write numbers to all four digits
void write_to_7segment(char d1, char d2, char d3, char d4)
{
ResetCursor();
if (IS_USING_SPI)
{
spi.write(d1);
spi.write(d2);
spi.write(d3);
spi.write(d4);
}
else
{
write_uart(d1);
write_uart(d2);
write_uart(d3);
write_uart(d4);
pc.printf("\n");
}
}
void chip_select(bool bSet)
{
if (IS_USING_SPI)
{
if (!bSet)
{
wait_us(25);
}
cs = bSet;
if (bSet)
{
wait_us(25);
}
}
}
// function used to calculate and return the new value of a moving average
int moyenne_mobile(int newData)
{
int sum = 0;
MovingAverage.buffer[MovingAverage.cursor] = newData;
MovingAverage.cursor++;
if (MovingAverage.cursor >= MOVING_AVG_SIZE)
{
MovingAverage.cursor = 0;
MovingAverage.bFilled = true;
}
if (MovingAverage.bFilled)
{
for (int i = 0; i < MOVING_AVG_SIZE; i++)
{
sum += MovingAverage.buffer[i];
}
sum = sum / MOVING_AVG_SIZE;
}
else
{
for (int i = 0; i < MovingAverage.cursor; i++)
{
sum += MovingAverage.buffer[i];
}
sum = sum / MovingAverage.cursor;
}
return sum;
}
