some success, still errors

main.cpp

Committer:
candre97
Date:
2019-11-27
Revision:
102:780b4ecac614
Parent:
100:ec006d6f3cb6
Child:
108:b8d05666d95f

File content as of revision 102:780b4ecac614:

/* mbed Microcontroller Library
 * Copyright (c) 2018 ARM Limited
 * SPDX-License-Identifier: Apache-2.0
 */

#include "mbed.h"
#include "platform/mbed_thread.h"
#include "stats_report.h"
#include <AnalogIn.h>
#include <AnalogOut.h>

AnalogOut v_src(GPIO0);
AnalogIn therm(GPIO2);

#define SLEEP_TIME                  50 // (msec)
#define PRINT_AFTER_N_LOOPS         20

void ConfigureADC()
{
    GPIO_InitTypeDef gpioInit;
 
    __GPIOC_CLK_ENABLE();
    __ADC1_CLK_ENABLE();
 
    gpioInit.Pin = GPIO_PIN_1;
    gpioInit.Mode = GPIO_MODE_ANALOG;
    gpioInit.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOC, &gpioInit);
 
    HAL_NVIC_SetPriority(ADC1_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(ADC1_IRQn);
 
    ADC_ChannelConfTypeDef adcChannel;
    
    // error here
    g_AdcHandle.Instance = ADC1;
 
    g_AdcHandle.Init.ClockPrescaler = ADC1_CLOCKPRESCALER_PCLK_DIV2;
    g_AdcHandle.Init.Resolution = ADC1_RESOLUTION_12B;
    g_AdcHandle.Init.ScanConvMode = DISABLE;
    g_AdcHandle.Init.ContinuousConvMode = ENABLE;
    g_AdcHandle.Init.DiscontinuousConvMode = DISABLE;
    g_AdcHandle.Init.NbrOfDiscConversion = 0;
    g_AdcHandle.Init.ExternalTrigConvEdge = ADC1_EXTERNALTRIGCONVEDGE_NONE;
    g_AdcHandle.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
    g_AdcHandle.Init.DataAlign = ADC1_DATAALIGN_RIGHT;
    g_AdcHandle.Init.NbrOfConversion = 1;
    g_AdcHandle.Init.DMAContinuousRequests = ENABLE;
    g_AdcHandle.Init.EOCSelection = DISABLE;
 
    HAL_ADC_Init(&g_AdcHandle);
 
    adcChannel.Channel = ADC_CHANNEL_11;
    adcChannel.Rank = 1;
    adcChannel.SamplingTime = ADC_SAMPLETIME_480CYCLES;
    adcChannel.Offset = 0;
 
    if (HAL_ADC_ConfigChannel(&g_AdcHandle, &adcChannel) != HAL_OK)
    {
        asm("bkpt 255");
    }
}

// main() runs in its own thread in the OS
int main()
{
    GPIO_InitTypeDef GPIO_InitStructure; //Variable used to setup the GPIO pins
    SystemReport sys_state( SLEEP_TIME * PRINT_AFTER_N_LOOPS /* Loop delay time in ms */);
    v_src = 1.0; /* Going to use a digital output as V_src */
    float max = 0; 
    while (true) {
        thread_sleep_for(SLEEP_TIME);
        v_src = 1.0;
        float raw_analog_val = 0; 
        
        for(int i = 0; i < 10; i++) {
            raw_analog_val += therm.read();
        }
        raw_analog_val /= 10;
        printf("Raw Analog Percentage 10 read AVG %f\n", raw_analog_val); 
        if (raw_analog_val > max) {
            max = raw_analog_val;
            printf("NEW MAX: %f\n", max);
            thread_sleep_for(3000); 
        }
    }
}