E=MC / Mbed 2 deprecated linecam_practice

Dependencies:   mbed

main.cpp

Committer:
mawk2311
Date:
2015-03-20
Revision:
6:53d521496469
Parent:
5:60560dd127a2
Child:
7:f7f4308c7ac0

File content as of revision 6:53d521496469:

#include "mbed.h"
#include "stdlib.h"

DigitalOut led1(LED1);
DigitalOut clk(PTD5);
DigitalOut si(PTD4);
AnalogIn camData(PTC2);
PwmOut servo(PTA5);
Serial pc(USBTX, USBRX); // tx, rx

float ADCdata [128];
float slopeAccum;
float slopeCount;
float approxPos;
float minVal;

int minLoc;

float straight = 0.00155f;
float hardLeft = 0.0013f;
float slightLeft = 0.00145f;
float hardRight = 0.0018f;
float slightRight = 0.00165f;

float currDirection = straight;

int main() {
    //servo.period(SERVO_FREQ);
    int integrationCounter = 0;
    
    while(1) {
            
        if(integrationCounter % 151== 0){
            si = 1;
            clk = 1;
            //wait(.00001);
            si = 0;
            clk = 0;
            integrationCounter = 0;
            
            slopeAccum = 0;
            slopeCount = 0;
            approxPos = 0;
            /*peak1 = 0;
            peak2 = 0;
            risEdge = 0;
            peakLoc1 = 0;
            peakLoc2 = 0;
            peakVal1 = 0;
            peakVal2 = 0;
            */
                
        }
        else if (integrationCounter > 129){
            minVal = ADCdata[14];
            for (int c = 15; c < 110; c++) {
               /* if (ADCdata[c+1] < ADCdata[c] && ADCdata[c+2] < ADCdata[c+1] && !peak1 && !risEdge && !peak2){
                    peak1 = 1;
                    peakLoc1 = c;
                    peakVal1 = ADCdata[c];
                    minVal = ADCdata[c];
                } else if (ADCdata[c] < minVal && peak1 && !peak2){
                    minVal = ADCdata[c];
                } else if (ADCdata[c+1] > ADCdata[c] && ADCdata[c+2] > ADCdata[c+1] && peak1 && !peak2){
                    risEdge = 1;
                } else if (ADCdata[c+1] < ADCdata[c] && ADCdata[c+2] < ADCdata[c+1] && peak1 && risEdge && !peak2){
                    peak2 = 1;
                    peakLoc2 = c;
                    peakVal2 = ADCdata[c];
                }
            }
            
            for (int c = peakLoc1; c < peakLoc2; c++) {
                if (ADCdata[c] > minVal && ADCdata[c] - minVal < 0.01f && ADCdata[c] > 0.1f){
                    slopeAccum += c;
                    slopeCount++;
                }
            }*/
             if (ADCdata[c] < minVal){
                    minVal = ADCdata[c];
                    minLoc = c;
                }
            }
            
            for (int c = 15; c < 110; c++) {
                if (ADCdata[c] > minVal && ADCdata[c] - minVal < 0.01f && ADCdata[c] > 0.1f){
                    slopeAccum += c;
                    slopeCount++;
                }
            }
            
            approxPos = (float)slopeAccum/(float)slopeCount;
            
            if(approxPos > 0 && approxPos <= 40){
                    servo.pulsewidth(hardLeft);
            } else if (approxPos > 40 && approxPos <= 60){
                servo.pulsewidth(straight);
            } else if (approxPos > 70 && approxPos <= 128){
                    servo.pulsewidth(hardRight);
            }
            integrationCounter = 150;
        }
        else{
            clk = 1;
            wait_us(60);
            ADCdata[integrationCounter - 1] = camData;
            clk = 0;
        }

        //clk = 0;
        integrationCounter++;
        //camData.
        
    }
}