// interface between avr-libc stdio and software-UART static int my_stdio_putchar( char c, FILE *stream ) { if ( c == '\n' ) { softuart_putchar( '\r' ); } softuart_putchar( c ); return 0; }
void printButton2(void) { if(BUTTON2 == oldbutton2) return; oldbutton2 = BUTTON2; if(BUTTON2) softuart_putchar(0x70 + 1); else softuart_putchar(0x70 + 0); for(l=0;l<1000;l++); }
void printButton1(void) { if(BUTTON1==0 && buttoncount != 0xFFFF) buttoncount++; if(buttoncount > 300 && BUTTON1==0){ if(buttoncount == 0xFFFF){ return; } softuart_putchar(0x40 + 3); for(l=0;l<1000;l++); buttoncount = 0xFFFF; return; } if(BUTTON1 == oldbutton1) return; if(oldbutton1 == 255){ if((BUTTON1==0)){ softuart_putchar(0x40 + 2); for(l=0;l<1000;l++); oldbutton1 = 254; return; }else{ //softuart_putchar(0x40 + 4); //for(l=0;l<1000;l++); oldbutton1=BUTTON1; return; } } if(oldbutton1 == 254){ if(BUTTON1==0) return; //softuart_putchar(0x40 + 2); oldbutton1 = BUTTON1; return; } oldbutton1 = BUTTON1; if(buttoncount==0xFFFF){ buttoncount=0; return; } buttoncount=0; if(BUTTON1) softuart_putchar(0x40 + 1); else softuart_putchar(0x40 + 0); for(l=0;l<1000;l++); }
void ACCEL_calibrate() { #ifdef ACCEL_CHAN_X uint32_t sumX = 0; #endif uint32_t sumY = 0; uint32_t sumZ = 0; uint16_t i = 0; for (; i < ACCEL_CALIB_SAMPLES; i++) { #ifdef ACCEL_CHAN_X sumX += ACCEL_getXRaw(); #endif sumY += ACCEL_getYRaw(); sumZ += ACCEL_getZRaw(); #ifdef DEBUG if (i % 100 == 0) softuart_putchar('.'); #endif } /*#ifdef DEBUG PRINT_NL; printInt((uint16_t) (sumX / ACCEL_CALIB_SAMPLES)); PRINT_NL; printInt((uint16_t) (sumY / ACCEL_CALIB_SAMPLES)); PRINT_NL; printInt((uint16_t) (sumZ / ACCEL_CALIB_SAMPLES)); PRINT_NL; #endif*/ #ifdef ACCEL_CHAN_X ACCEL_offSets[0] = (uint16_t) (sumX / ACCEL_CALIB_SAMPLES); #endif ACCEL_offSets[1] = (uint16_t) (sumY / ACCEL_CALIB_SAMPLES); ACCEL_offSets[2] = (uint16_t) (sumZ / ACCEL_CALIB_SAMPLES); }
int main(void) { static char cmd[10]; char c, *p = cmd; setup(); while(1) { if(softuart_kbhit()) { c = softuart_getchar(); switch(c) { case '\n': case '\r': { softuart_putchar(c); *p = 0; p = cmd; if((cmd[0] == '\0') || (execute_cmd(cmd) == CMD_OK)) softuart_puts_p(PSTR("ok\r\n")); else softuart_puts_p(PSTR("error\r\n")); break; } default: { if(p < cmd+(sizeof(cmd))) { *p++ = c; softuart_putchar(c); } else { softuart_putchar(7); // bell } } } } } return 0; }
static void printnum(unsigned long number) { char tmp[10]; byte i; if (number) { tmp[sizeof(tmp)-1] = 0; for (i = sizeof(tmp)-2; i > 0 && number > 0; --i) { tmp[i] = '0' + number % 10; number /= 10; } softuart_puts(tmp + i + 1); } else { softuart_putchar('0'); } }
void shake_detect_update() { // if (shakeDetected == 0) SHAKE_DETECT_TIMER_COUNTER = 0; // reset timer when no shake was detected const int32_t totalG = ACCEL_getTotalVectorSquared(); if (shakeDetected == 1 && minShakeTimeExceeded == 0 && SHAKE_DETECT_TIMER_COUNTER >= minShakeTimeCounterVal) // it was shaken long enough { minShakeTimeExceeded = 1; // DIGIWRITE_H(PORTB, PB1); } if (shakeLevel > 0) { // when a shake level is given, shakeLevel--; // calm down again #ifdef DEBUG softuart_putchar('l'); softuart_putchar('='); printInt(shakeLevel);PRINT_NL; #endif } // check if we can end the shake event if (shakeLevel < SHAKE_DETECT_THRESH && shakeDetected != 0 && minShakeTimeExceeded != 0) { #ifdef DEBUG softuart_putchar('s');PRINT_NL; #endif shakeDetected = 0; // DIGIWRITE_L(PORTB, PB1); minShakeTimeExceeded = 0; (*shakeDetectEndCallback)(); } else if (totalG > SHAKE_DETECT_SHOCK_THRESH && shakeLevel + SHAKE_DETECT_SHOCK_LEVEL_INCREASE < SHAKE_DETECT_MAX_LEVEL) { shakeLevel += SHAKE_DETECT_SHOCK_LEVEL_INCREASE; // get more excited #ifdef DEBUG // printUInt(totalG);PRINT_NL; softuart_putchar('l'); softuart_putchar('='); printInt(shakeLevel);PRINT_NL; #endif // check if we can start the shake event if (shakeLevel >= SHAKE_DETECT_THRESH && shakeDetected == 0) { #ifdef DEBUG softuart_putchar('S');PRINT_NL; #endif shakeDetected = 1; SHAKE_DETECT_TIMER_COUNTER = 0; // reset the timer (*shakeDetectBeginCallback)(); } } }
static void _cmd_status() { unsigned long elapsed; ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { elapsed = ticks; } elapsed = elapsed * timerTick_us / 1000000; printnum(elapsed); softuart_puts_P(" / "); printnum(timeoutTicks * timerTick_us / 1000000); softuart_puts_P("\r\n"); // Print the last stored timestamp. byte c; byte i = 0; while ((c = read1EEPROM(i++))) softuart_putchar(c); softuart_puts_P("\r\n"); }
int main(void) { wdt_enable(WDTO_120MS); init(); softuart_putchar(255); while(1){ wdt_reset(); checkState(); if(gotanalogs){ printAnalog1(); printAnalog2(); printButton1(); printButton2(); } for(l=0;l<1000;l++); } }
void send_ant_packet( UCHAR msgID, UCHAR argCnt, ...) { va_list arg; va_start (arg, argCnt); uint8_t i; uint8_t buf[MESG_MAX_SIZE]; buf[0] = MESG_TX_SYNC; buf[1] = argCnt; buf[2] = msgID; for(i = 0; i < argCnt; i++) { buf[i+MESG_HEADER_SIZE] = va_arg(arg, int); } buf[argCnt+MESG_HEADER_SIZE] = checkSum(buf,argCnt+MESG_HEADER_SIZE); for(i = 0; i < argCnt+MESG_FRAME_SIZE; i++) { softuart_putchar(buf[i]); } }
/** Writes a character to the serial port * * This function writes one character to the serial port. * */ int clixxIOSerial::write(const char c) { softuart_putchar((const unsigned char) c); return(0); }
int main(void) { char c; unsigned short cnt = 0; #if (F_CPU > 4000000UL) #define CNTHALLO (unsigned int)(0xFFFF) #else #define CNTHALLO (unsigned int)(0xFFFF/3) #endif unsigned short mycnt=0; CLKPR=_BV(CLKPCE); CLKPR=0; pir=0; DDRA |= 0xe2; PORTA |= 0x81; adc_init(); softuart_init(); TCCR1A=_BV(COM0B1)|_BV(WGM00); TCCR1B=_BV(CS00); softuart_turn_rx_on(); /* redundant - on by default */ sei(); #if WITH_STDIO_DEMO stdio_demo_func(); #endif OCR1A=0x10; OCR1B=0xf0; for (;;) { if((PINB&4)==4 ) pir=1; if ( softuart_kbhit() ) { c = softuart_getchar(); //softuart_putchar( '[' ); //softuart_putchar( c ); //softuart_putchar( ']' ); if(c=='g') { c=softuart_getchar(); if(c==C_ID(ID)) { softuart_putchar(3); softuart_putchar(2); send(); pir=0; } } else if( c=='s') { unsigned int pwm; c=softuart_getchar(); if(c==C_ID(ID)) { sprintf(line,"made it"); // char line[32]; for(cnt=0;cnt<=31;cnt++) { c=softuart_getchar(); if(c=='\n') {line[cnt]=0; break;} else line[cnt]=c; } int ret=sscanf_P(&line[0],PSTR("inTopic/pwm/"STD_ID(ID)" %d"),&pwm); sprintf_P(dbg,PSTR("%dpwm:%d"),ret,pwm); OCR1B=pwm; } } } } return 0; /* never reached */ }