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: BSP_DISCO_L476VG LCD_DISCO_L476VG
main.cpp
- Committer:
- mygore
- Date:
- 2020-10-19
- Revision:
- 0:0949c00010ff
- Child:
- 1:28d1cf3f31f7
File content as of revision 0:0949c00010ff:
/* Project: Data Fitting Code
Description: Base functionality for lighting controller.
Author: Alex Mueller and Marissa Gore
Date: 10/18/2020
*/
//Includes
#include "mbed.h" //includes mbed header file
#include "LCD_DISCO_L476VG.h" //includes LCD libraries
#include <stdio.h> //includes studio header file
#include <fstream> //include file handing library
DigitalOut Ctrl(PA_2); //Controls relay
DigitalIn button(PA_0); //Push button changes display mode
AnalogIn ain(PA_1); //Sensor
LCD_DISCO_L476VG lcd;
//Global variables
float sampledData[10000];
int numDataSamples = 0;
//int StateEx = 1;
//Initalize functions
void SensorValues(float value);
void Timer(); //not done
int PersonId();
int PeakLocation();
void Counter(int count);
void Status();
//void DisplayHandler(int count);
int main()
{
float value;
bool incident = false;
float baseline = 65; //75cm
int count = 0;
int person;
uint8_t DisplayedString[7] = {0};
while(1)
{
// printf("%i\n", count*50);
// DisplayHandler(count);
value = 30 * pow(ain.read(), -1.173);
printf("%f \n", value);
if(value < baseline)
{
incident = true;
SensorValues(value);
}
else if(incident == true && value >= baseline)
{
person = PersonId();
if(person == 1)
{
Ctrl = 1; //change to set low to turn on relay
count++;
Counter(count);
}
else if(person == 0)
{
count--;
Counter(count);
if(count == 0)
{
Ctrl = 0; //change to set high to turn off relay
}
}
incident = false;
numDataSamples = 0;
}
ThisThread::sleep_for(5);
}
}
void SensorValues(float value)
{
sampledData[numDataSamples] = value;
numDataSamples++;
}
////void Timer()
////{
//// pizza
////}
int PeakLocation()
{
int min = sampledData[0];
int saveLow;
for (int i = 1; i < numDataSamples; ++i)
{
if(sampledData[i] < min)
{
min = sampledData[i];
saveLow = i;
}
}
return saveLow;
}
int PersonId()
{
int lowest = PeakLocation();
if(lowest < (numDataSamples*(1/2 - 0.1))) // Lowest < midpoint - 10%
{
return -1;
}
else if(lowest > (numDataSamples*(1/2 + 0.1))) // Lowest > midpoint + 10%
{
return 1;
}
else
{
return 0;
}
}
void Counter(int count)
{
lcd.Clear();
uint8_t DisplayedString[7] = {0};
sprintf((char *)DisplayedString, "%d\n", count);
lcd.DisplayString(DisplayedString);
// if(button == 1)
// {
// StateEx =2;
// }
}
//void Status()
//{
// lcd.Clear();
// if(Ctrl == 1)
// {
// lcd.DisplayString((uint8_t *)"OFF");
// }
// if(Ctrl == 0)
// {
// lcd.DisplayString((uint8_t *)"ON");
// }
// if(button == 1)
// {
// StateEx =1;
// }
//}
//void DisplayHandler(int count)
//{
// switch(StateEx)
// {
// case PersonCount: Counter(count);
// break;
// case LEDstatus: Status();
// break;
// case ErrorState: printf("Error the cookie monster is going to eat you");
// break;
// }
// wait(0.1);
//}