void loop() { if ((unsigned long) (millis() - previousEth) >= interval_ethernet) { //entra a cada 50ms previousEth = millis(); if(count_eth == 0) { //espera completar um ciclo de todas as funções chamadas int packetSize = Udp.parsePacket(); count_eth = 2; Serial.println("entrou eth"); received = 0; if (packetSize) { set_debug(PC3); #ifdef debug Serial.println("entrou eth RX "); Serial.print("Received packet of size "); Serial.println(packetSize); Serial.print("From "); IPAddress remote = Udp.remoteIP(); for (int i =0; i < 4; i++) { Serial.print(remote[i], DEC); if (i < 3) { Serial.print("."); } } Serial.print(", port "); Serial.println(Udp.remotePort()); Serial.println("Contents:"); Serial.println(packetBuffer); #endif received = Udp.read(); charBuffer.put(received); #ifdef debug Serial.println("\rchar recebido:"); Serial.write(received); #endif ///////////////////////////// clear_debug(PC3); } } else { count_eth--; Serial.println("entrou eth NADA"); if (charBuffer.getSize() > 5) charBuffer.clear(); if( charBuffer.getSize() > 0 ) received = charBuffer.get(); Serial.println("received:"); Serial.println(received); } } #ifdef debug Serial.println("client disconnected"); #endif /****************FIM ROTINA ETHERNET ***************************************************/ if ((unsigned long) (millis() - previousADC) >= interval_adc) { //entra a cada 60ms previousADC = millis(); set_debug(PC4); if (count_adc == 0) { count_adc = 1; /*testa obstaculo IR*/ Serial.println("entrou adc OBSTACULO "); IR_obstaculo = 0; IR_obstaculo = verificaObstaculoIR(); #ifdef debug Serial.println("distancia_ir"); Serial.println(IR_obstaculo); Serial.println("\r"); #endif if (IR_obstaculo > IR_OBSTACLE_THRESHOLD) obstacle_flag = 0; else if (IR_obstaculo > IR_OBSTACLE_THRESHOLD && IR_obstaculo < IR_OBSTACLE_UPPER_THRESHOLD) obstacle_flag = 1; else if (IR_obstaculo <= IR_OBSTACLE_THRESHOLD) obstacle_flag = 2; clear_debug(PC4); } else { count_adc=0; Serial.println("entrou adc NADA "); } } /***************** FIM ROTINA ADC********************************/ if ((unsigned long) (millis() - previousMotores) >= interval_motores) { //entra a cada 100ms previousMotores = millis(); if (ciclosClock_motor == 2) { //duas bordas de subida depois de acionar o motor (200ms depois de acionar o motor) Serial.println("motor stop "); stopMove(); ciclosClock_motor = 0; } if (count_motor == 0) { Serial.println("motor ANDA "); if (obstacle_flag == 0 || obstacle_flag == 1) { count_motor = 1; /*move motores*/ switch (received) { case 'u': goForward(obstacle_flag); break; case 'd': goBack(obstacle_flag); break; case 'l': goLeft(obstacle_flag); break; case 'r': goRight(obstacle_flag); break; default: received = 0; stopMove(); break; } } else { if (received == 'd') { goBack(WITH_CARE); } else { stopMove(); } } } else { ciclosClock_motor++; count_motor = 0; Serial.println("ciclosClock_motor++ "); } } // _delay_ms(500); }
context::context() :m_next_cb_ref(0) { clear_debug(); }