From: Jan Michel Date: Mon, 27 Apr 2020 11:57:02 +0000 (+0200) Subject: working magnet warner code X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=3f337e749276d86a199aaabe49d9f35911c230b0;p=avr.git working magnet warner code --- diff --git a/sensors/MagnetWarner/MagnetSensor.c b/sensors/MagnetWarner/MagnetSensor.c index c1a8ed5..8db226b 100644 --- a/sensors/MagnetWarner/MagnetSensor.c +++ b/sensors/MagnetWarner/MagnetSensor.c @@ -1,6 +1,7 @@ #include "MagnetSensor.h" //#define CHIP_OLD 1 - +#define LED_RED_ON() PORTC |= (1< 32kHz, 256 cnts = 0.5 Hz + TCCR2B = (5 << CS20); //prescaler 1024 -> 1kHz, 256 cnts = 8 Hz TIMSK2 = (1 << TOIE2); //overflow interrupt ASSR = (1 << AS2); //asynchronous mode @@ -85,102 +88,29 @@ int main(void) { #endif while(1) { - LED_GREEN_ON(); -// _delay_ms(1); + MeasureMagSens(ADDR_MAG_0, TRef, &SensX, &SensY, &SensZ, TC_Enabled, &Meas[0]); - LED_GREEN_OFF(); - sleep_mode(); - }; + sum = abs(Meas[0]) + abs(Meas[1]) + abs(Meas[2]); + + if(first) {basesum = sum; first = 0;} + else { + diffsum = abs(sum - basesum); + if(diffsum > 500) { + LED_RED_ON(); + _delay_us(200); + LED_RED_OFF(); + } + else { + LED_GREEN_ON(); + _delay_us(200); + LED_GREEN_OFF(); + } + sleep_mode(); + sleep_mode(); + sleep_mode(); + } + }; -// _delay_ms(300); -// uint8_t Command[5]; -// uint8_t I2C_Address = 0; -// uint8_t status[7]; -// uint8_t status2; -// uint8_t ReadReg[3] = {0x1,0x3,0x5}; -// while (1) -// { -// -// if (mode == 0) { -// // normal running mode -// if (Status[0] == 0) { MeasureMagSens(ADDR_MAG_0, TRef[0], &SensX[0], &SensY[0], &SensZ[0], TC_Enabled[0]);} -// else { uputs("ERR Mag ");sprintf(SerNum,"%2u ",SERIALNUM);uputs(SerNum); uputsnl("0 NO_DEVICE"); } -// #if MULTISENSE == 0 -// if (Status[1] == 0) { MeasureMagSens(ADDR_MAG_1, TRef[1], &SensX[1], &SensY[1], &SensZ[1], TC_Enabled[1]);} -// else { uputs("ERR Mag ");sprintf(SerNum,"%2u ",SERIALNUM);uputs(SerNum); uputsnl("1 NO_DEVICE"); } -// if (Status[2] == 0) { MeasureMagSens(ADDR_MAG_2, TRef[2], &SensX[2], &SensY[2], &SensZ[2], TC_Enabled[2]);} -// else { uputs("ERR Mag ");sprintf(SerNum,"%2u ",SERIALNUM);uputs(SerNum); uputsnl("2 NO_DEVICE"); } -// if (Status[3] == 0) { MeasureMagSens(ADDR_MAG_3, TRef[3], &SensX[3], &SensY[3], &SensZ[3], TC_Enabled[3]);} -// else { uputs("ERR Mag ");sprintf(SerNum,"%2u ",SERIALNUM);uputs(SerNum); uputsnl("3 NO_DEVICE"); } -// #endif -// #if MULTISENSE == 1 -// char Temp[30]; char Pres[30]; char Hum[30]; -// sprintf(Temp,"%3.2f",readTempC(&bme280)); -// sprintf(Pres,"%6.3f",readFloatPressure(&bme280)); -// sprintf(Hum,"%4.3f",readFloatHumidity(&bme280)); -// uputs("Temp: ");uputs(Temp);uputs(" Pres: ");uputs(Pres);uputs(" Humid: ");uputsnl(Hum); -// -// uint32_t lum = TSL2591_getFullLuminosity(&tsl); -// uint16_t ir = lum >> 16; -// uint16_t full = lum & 0xFFFF; -// -// uputs("Bright: "); -// sprintf(s,"%u",full); uputs(s); -// uputs(" / "); -// sprintf(s,"%u",ir); uputsnl(s); -// #endif -// _delay_ms(500); -// } else {// CONFIG MODE -// //Setting: I2C Address, Mode, RegAddr, Data Byte Low, Data byte high. -// -// } -// -// //} -// } - //cli(); return 0; } -/* -ISR(USART_RX_vect) -{ - unsigned char buffer = UDR0; - if (buffer != 10 && buffer != 13 && uart_str_count<(uart_maxstrlen-1)){ - uart_string[uart_str_count] = buffer; - uart_str_count++; - uart_str_complete = 0; - } else { - uart_string[uart_str_count] = '\0'; - uart_str_complete = 1; - - } -} - - -int strToInt(char *str){ - uint32_t Command = 0; - while( *str ){ - Command*=10; - Command+= (((uint32_t) *str++) - 48); - } - - return (int) Command; -} - -int strToHexInt(char *str){ - uint32_t Command = 0; - while( *str ){ - Command*=16; - if ((uint32_t) *str >47 && (uint32_t) *str < 58 ) { - Command+= (((uint32_t) *str++) - 48); - } else if ((uint32_t) *str >64 && (uint32_t) *str < 71 ) { - Command+= (((uint32_t) *str++) - 55); - } else if ((uint32_t) *str >96 && (uint32_t) *str < 103 ) { - Command+= (((uint32_t) *str++) - 87); - } - } - - return (int) Command; -} -*/ - diff --git a/sensors/MagnetWarner/main.h b/sensors/MagnetWarner/main.h index 27adc12..094d2d5 100644 --- a/sensors/MagnetWarner/main.h +++ b/sensors/MagnetWarner/main.h @@ -8,6 +8,10 @@ #ifndef MAIN_H_ #define MAIN_H_ + +// #define USE_UART +#define USE_BME + //#define SERIALNUM 0 #include @@ -28,12 +32,12 @@ #include -#ifndef F_CPU -#define F_CPU 8000000 -#endif +// #ifndef F_CPU +// #define F_CPU 8000000 +// #endif -# define USART_BAUDRATE 19200 -# define BAUD_PRESCALE (unsigned int)(1.0 * F_CPU / USART_BAUDRATE / 16 - 0.5); +#define USART_BAUDRATE 19200 +#define BAUD_PRESCALE (unsigned int)(1.0 * F_CPU / USART_BAUDRATE / 16 - 0.5); #define ADDR_MAG_0 0x0C #define ADDR_MAG_1 0x0D