Example #1
0
void testApp::randomPlay() {
    
    generateRandomSample = ofRandom(100);
    
    if (generateRandomSample == 50) {
        triggerSample();
    }

}
void *Seq::runThroughSequencer()
{
	LOG_INFO("Run through Seq");
    setThreadPriority();
	unsigned int tempI = 0;
	while(sequencerPlaying){
		if(currTime == -1L){
			currTime = getTimeInMillsec();
			triggerSample();
		}
		if((getTimeInMillsec()-currTime)>=incrementalNoteDuration){
			++tempI;
			seqI = tempI % numberOfNotes;
			triggerSample();
			currTime = getTimeInMillsec();
		}
	}
	currTime = -1L;
	seqI = 0;
	pthread_exit(NULL);
}
void *Seq::startSeqPrivate()
{
	LOG_INFO("Start Seq (private)");
	setThreadPriority();
	unsigned int tempI = 0;
	while(sequencerRunning){
		if(currTime == -1L){
			currTime = getTimeInMillsec();
			triggerSample();
		}
		if((getTimeInMillsec()-currTime)>=incrementalNoteDuration){
			++tempI;
			seqI = tempI % numberOfNotes;
			triggerSample();
			currTime = getTimeInMillsec();
		}
	}
	currTime = -1L;
	seqI = 0;
	pthread_exit(NULL);
}
Example #4
0
void mcp3301Task(void *p_arg){
     
     uint16_t v;
     uint16_t temp;
     uint32_t i;
     uint16_t j;
     char ch;
   
     (void)p_arg;
     
     rtcInit();
               
//    mcp3301Init(64,0x43,0x50,0);     /// wrong use, spiInit should be called only once!!!
    m25p40Init(32,0x43,0x50,0);
      
    AD1_Init();
    dinInit();
    doutInit();
//    wfx40Init();   //rs485 水位计
    YSIInit();
//    RS485Init();
    
             
//   TUFInit();
   
    at24Init();          //参数初始化
    configParaInit();
   
    
    getDin16(&wdin);/// get Din;

    rtc_pause_count = 0;
    mcu_time_count = 0;    
      //m25p40Init(32,0x43,0x90,0);
//    m25p40Init(64,0x43,0x90,0);
    
/////////////////////////////   fix it!//////////////////////////////////////////////////    

/*********************************** 
    m25p40EraseCmd(0);
    m25p40EraseCmd(SECTOR_BYTES);
    m25p40EraseCmd(SECTOR_BYTES*2);
    m25p40EraseCmd(SECTOR_BYTES*3);
    m25p40EraseCmd(SECTOR_BYTES*4);
    m25p40EraseCmd(SECTOR_BYTES*5);
    m25p40EraseCmd(SECTOR_BYTES*6);
    m25p40EraseCmd(SECTOR_BYTES*7);*******************/ 
   
    
    OSTimeDly(500);         // waiting for GPRS ready
    
    pcf8563Init();   //RTC
    trigger_minutes = 0;        //启动后发送数据
    //////此处增加参数初始化//
    fixed_sendtime1 = 0xffff;  //需要改为从at24中读取
    fixed_sent = 0;   
    

    m25p40ParaInit();
    
    m25_add = m25sector.start_addr; 
     
    pcf8563GetTime();
    m25p40Write(m25_add,"reset:",6);
    m25_add+=6;
    m25p40Write(m25_add,(uint8_t *)&pcfTime,6); 
    m25_add+=6; 
    pre_minutes =  BCD2char(pcfTime.hour)*60 + BCD2char(pcfTime.min);
    
    stop_check_minutes = pre_minutes;
    ////////循环开始    ////////////////////////////////////////////
    req_sample = 0;
    rtc_pause_count = 0;
    mcu_time_count = 0;
    raingaugebak = raingauge;
    
    
    OSTimeDly(3500);         // waiting for GPRS ready
    

    while(1){
    
      
     
      pcf8563GetTime();
      
      current_minutes =  BCD2char(pcfTime.hour)*60 + BCD2char(pcfTime.min);
/*      if(current_minutes - pre_minutes >= para_send_gap_min){
            req_sample = 1;
            req_send = 1;
            pre_minutes = current_minutes;
            
      }  */
       //需要修改,防止一分钟内重复进入
         
      if((TRUE == triggerTime(current_minutes))&&(current_minutes != pre_minutes)){
           req_sample = 1;
            req_send = 1;
            pre_minutes = current_minutes;  
      }
      
      if(fixed_sendtime1 == current_minutes){
          if(0 == fixed_sent){
              req_send = 1; 
              fixed_sent = 1;   
          }
      }
      if(current_minutes > fixed_sendtime1 ){
            fixed_sent = 0;      //恢复
      }
      if((TRUE == triggerSample(current_minutes))&&(current_minutes != pre_minutes)){
           req_sample = 1;
           pre_minutes = current_minutes;  
      }
      
    //判断PCF8536是否正常
    
     if(rtc_pause_count > 15){      //大于一分钟却没有变化
        if(stop_check_minutes == current_minutes){
            
            if(mcu_time_count > 60*para_send_gap_min){
                req_sample = 1;
                req_send = 1;
                
                mcu_time_count = 0;
            }
        }else{
            stop_check_minutes = current_minutes; 
            rtc_pause_count = 0; 
            mcu_time_count = 0; 
        }
      } 
    rtc_pause_count++;    //每个循环6秒钟
     mcu_time_count++;
    
    
  //翻斗式雨量计
          /**** 雨量采集 ****/   /** 实时采集,有降雨就发送 **/
        if(raingaugebak != raingauge){
            if(raingauge - raingaugebak>= RAIN_TRIGGER){
                req_sample = 1;
                req_send = 1;
            }
            raingaugebak = raingauge;
             ch = '#';
            sc16puts(&ch,1); 
            configParaSet(PARA_RAIN,&raingauge,2);   //只在雨量有变化才存贮
            if(0 ==(raingauge%para_rain_cont)){
                
                req_sample = 1;
                req_send = 1;
            }
        }
    
    
    
     if(reUDPsend){    //需要重发
        ch = '$';
        sc16puts(&ch,1); 
         req_sample = 1;
         req_send = 1;
        reUDPsend = 0;
      }
//    req_sample = 1;
    if(req_sample){
        
        
        
        //数字量采集
        getDin16(&wdin);/// get Din;
        ///模拟量采集
        for(i=0;i<9;i++){
            adAverage[i] = 0;
      
        }
        for(i=0;i<3;i++){
      
            AD1_Measure(1);
            AD1_GetValue16(adValues);
            for(j=0;j<9;j++){
                adAverage[j] += (adValues[j]>>4);
            }
        }
        for(j=0;j<9;j++){
            adAverage[j] /= 3;
        }   
      
        for(j=0;j<4;j++){
            ch = adAverage[8]>>((3-j)*4)&0x0f;
            ch += '0';
            sc16puts(&ch,1);
        }
        sc16puts(" ",1);
        //485采集
        /*
        */
#if  WFX_485        
        setDout(0);         //打开电源
        OSTimeDly(200);
        wfx40Write();       //

        OSTimeDly(100);
        if(TRUE == wfx40Data(&waterlevel)){
            sc16puts(&waterlevel,2);    
       
        }
        /*判断界限**/
        if(waterlevel > para_water_high){
                req_send = 1;   
        }
        OSTimeDly(100);
        clrDout(0);         //关闭电源
#endif
        YSIWeekup();
       OSTimeDly(50);
       YSITwipeb();
       OSTimeDly(50);
  
       
       YSIWrite();
       OSTimeDly(10);
       YSIClr();
       
       OSTimeDly(700);
       YSIRead(); 
        OSTimeDly(50);
       YSISleep();           
        
        
 /*

TUFRead();
TUFWrite();
  OSTimeDly(3);
//   TUFCSRxd();

TUFRead();
*/
        
        protocolConstruct();
      
        m25p40Write(m25_add,(uint8_t *)&rtufile,rtufile.len*2+4);
        m25_add+= rtufile.len*2+4;
        
        
        ///以下代码根据阀值判断是否需要发送
        /*
        if((waterlevel > high) ||(waterlevel < low)){
            req_send = 1;
        } 
        
        */
        
      
        if(1 == req_send ){
            if(0 == gprsIPdone){
                rebootflag = 1;   //重新配置gprs标志
                    task_active[TASKACTIVE_SAMPLE]++;
                gprsPrepare();  
                    task_active[TASKACTIVE_SAMPLE]++;              
                rebootflag = 0;
            }
                 
            if((1 ==gprsIPdone) && (0== gprsLock)) { 
            pro_in.no_received++;     //先增加,避免在3秒时间内收到数据而统计错误
                gprsSendData((uint8_t *)&rtufile,rtufile.len*2+2+2);    // head + crc
                for(j=0;j<3;j++){
                    if(1 == gprsStnDone[j]){
                        OSTimeDly(500);
                      gprsData(j+2,(uint8_t *)&rtufile,rtufile.len*2+2+2 + 5);    // head + crc  
                      
                    }
                }
//               pro_in.no_received++;
                    noUDPrec = rtc_pause_count;     //记录发送时间,六秒为单位
                    
                      
            }
            /*else  if((1 == SMSdone)&&(0== gprsLock)){
                msgProtocolSend("13910996917",&rtufile);
            
                myReset();     
            } */
            req_send = 0;
             OSTimeDly(300);
            msgGetList();      //短信列表
             OSTimeDly(300);
         
            gprsShutdown();
            clrDout(1);
            gprsIPdone =0;
            
        }else{              //增加心跳包
                            
        }
      
        for(j=0;j<4;j++){
            ch = rtufile.time[2]>>((3-j)*4)&0x0f;
            ch += '0';
            sc16puts(&ch,1);
        }
        sc16puts(" ",1);
        req_sample = 0; 
         
         
        
         
       
       
    }
    if(0 == task_active[TASKACTIVE_SAMPLE]&0x0f){
        
        msgGetList();      //短信列表
    }
    
    if(udp_download){          //召测
            i = timegap_end-timegap_start ;
            time_add = timegap_start;
            frame_buffer[0] = 'Z';
            frame_buffer[1] = 'C';
            j = 0;
            while(i){
                if(i>80){
                    for(temp=0;temp<80;temp++){
                        m25p40RD(time_add,&frame_buffer[temp+2],1);
                        time_add++;
                                
                    }
                    frame_buffer[82]= j>>8;
                    frame_buffer[83]= j&0xff;
                    gprsSendData(frame_buffer,84);
                    i-=80;
                }else{
                    for(temp=0;temp<i;temp++){
                        m25p40RD(time_add,&frame_buffer[temp+2],1);        
                        time_add++;
                    }
                    frame_buffer[temp+2]= 0xE5;
                    frame_buffer[temp+3]= 0xE5;    //最后一帧
                    gprsSendData(frame_buffer,i+4);  
                    i=0;
                }
                j++;
                task_active[TASKACTIVE_SAMPLE]++;
            }
       
          udp_download = 0;
        
    }
          
    OSTimeDly(300);
    task_active[TASKACTIVE_SAMPLE]++;
    OSTimeDly(300);
    }
Example #5
0
//--------------------------------------------------------------
void testApp::update(){
   
    /// SPHERES UPDATE  ///
       
    for (int i = 0; i < redObjects.size(); i++) {
        
        //individual noise
        
        float time = ofGetElapsedTimef();
        float timeScale = 5.0;
        float displacementScale = 2.75;
        
        ofVec3f timeOffsets = noiseObjects[i];
        
        redObjects[i].point.x += (ofSignedNoise(time * timeScale + timeOffsets.x)) * displacementScale;
        redObjects[i].point.y += (ofSignedNoise(time * timeScale + timeOffsets.y)) * displacementScale;
        redObjects[i].point.z += (ofSignedNoise(time * timeScale + timeOffsets.y)) * displacementScale;
        
        redObjects[i].update();
               
    }
    
    redObjects[counterObject].colorChange.set(0, 255, 180, 90);
    
    if (counterObject == redObjects.size()) {
        
        counterObject = 0;
    }
    
    
    //cout << redObjects.size() << endl;
    
    ///     AUDIO UPDATE    ///
    introVolume += 0.01;
    
    mixer.setOutputVolume(introVolume);

    if (introVolume >= 0.90) {
        introVolume = 0.95;
    }
    
    //MODE
    
    if (generativeMode == true) {

        randomPlay();
        modeColor = redObjects[0].colorChange;
        indicator = "on";
        
    } else if (!generativeMode) {
        
        modeColor = ofColor::black;
        indicator = "off";
    
    }
    ///     INTERACTION UPDATE     ///
    ///Trigger samples by movement
    
    moveHand.update();
    
    
     //Use the most left, middle, and right zones of screen
    if (moveHand.zone[0] >= 500) {
        
        triggerSample();
        reactiveCircle.set(0, 255, 180, 90);
        moveHand.zone[0] = 0;
        
        }
        else
        {
        reactiveCircle = redObjects[0].colorChange;
        }
    

}