int main(void) { // -------- Inits --------- // clock_prescale_set(clock_div_1); /* CPU clock 8 MHz */ initUSART(); printString("\r\nWelcome to the Servo Sundial.\r\n"); printString("Type S to set time.\r\n"); initTimer0_Clock(); initTimer1_Servo(); sei(); /* set enable interrupt bit */ LED_DDR |= (1 << LED0); /* blinky output */ LASER_DDR |= (1 << LASER); /* enable laser output */ // ------ Event loop ------ // while (1) { /* Poll clock routine */ if (ticks == OVERFLOWS_PER_SECOND) { ticks = 0; everySecond(); } pollSerial(); } /* End event loop */ return (0); /* This line is never reached */ }
MainWindow::MainWindow( QWidget *parent, P_ImgSrc imgsrc ) : QMainWindow( parent ), ui( new Ui::MainWindow ), barcodeTimeoutCounter{ 0 }, imageSource{ imgsrc }, barcodeTimeoutAlarmRaised{ false }, invalidBarcodeCounter{ 0 } { ui->setupUi( this ); //Setup seconds timer connect( &secondsTimer, SIGNAL( timeout() ), this, SLOT( everySecond() ) ); secondsTimer.start( 1000 ); //Timer to update glwidget connect( &imageDisplayTimer, SIGNAL( timeout() ), this, SLOT( updateImageDisplay() ) ); imageDisplayTimer.start( 33 ); //Adjust size proportions of splitter QList<int> sizes; sizes.append( 150 ); sizes.append( 1 ); ui->splitter->setSizes( sizes ); ui->tabWidget->setCurrentIndex( 0 ); //Load widget states loadAlarmCheckboxStates(); loadBarcodeTimeoutSpinBoxState(); connect( &imgproc, SIGNAL( foundBarcode( const QString ) ), this, SLOT( validateBarcode( const QString )) ); //Load settings barcode_settings.load(); resetBarcodeTimeoutCounter(); camera_settings.load(); general_settings.load(); on_hsThreshold_valueChanged( general_settings.threshold ); loadHsThresholdState(); hole_settings.load(); //Valid barcodes combo box cmbValidBarcodeModel.setStringList( barcode_settings.valid_barcodes ); ui->cmbValidBarcode->setModel( &cmbValidBarcodeModel ); //Alarms ui->tvAlarms->setModel( &tvAlarmsModel ); ui->tvAlarms->horizontalHeader()->setSectionResizeMode( 0, QHeaderView::ResizeToContents ); ui->tvAlarms->horizontalHeader()->setSectionResizeMode( 1, QHeaderView::Stretch ); ui->tvAlarms->horizontalHeader()->setSectionResizeMode( 2, QHeaderView::ResizeToContents ); connect( this, SIGNAL( barcode_timeout_alarm() ), &tvAlarmsModel, SLOT( raiseBarcodeTimeoutAlarm() ) ); connect( this, SIGNAL( invalid_barcode_alarm() ), &tvAlarmsModel, SLOT( raiseInvalidBarcodeTimeoutAlarm() ) ); connect( &imgproc, SIGNAL( missingHole() ), &tvAlarmsModel, SLOT( raiseMissingHoleAlarm() ) ); connect( &imgproc, SIGNAL( invalidProfile() ), &tvAlarmsModel, SLOT( raiseInvalidProfileAlarm() ) ); connect( &imgproc, SIGNAL( noHolesInProfile() ), &tvAlarmsModel, SLOT( raiseNoHolesInProfileAlarm() ) ); connect( ui->tabWidget, SIGNAL( currentChanged(int) ), this, SLOT( tab_switched( int ) ) ); //Image source imageSource->setProcessFunction( &imgproc ); //IO #ifdef USE_IO io.setup(); connect( &tvAlarmsModel, SIGNAL( barcodeRelatedAlarmRaised() ), &io, SLOT( signalBarcodeAlarm() ) ); connect( &tvAlarmsModel, SIGNAL( holeRelatedAlarmRaised() ), &io, SLOT( signalHoleAlarm() ) ); connect( &updateIoTimer, SIGNAL( timeout() ), &io, SLOT( update() ) ); updateIoTimer.start( 100 ); #endif }