Abaixo, um esboço que demonstra como fazer duas coisas ao mesmo tempo baseado na função millis().
/* Cronômetro* Paul Badger 2008* Demonstra o uso de millis(), resistores pull-up,* como fazer duas coisas acontecerem ao mesmo tempo,* imprime frações** Montagem física: interruptor momentâneo ao pino 4 e ao* terra, e o LED com um resistor em série entre o pino 13* e o terra*/#define ledPin 13 // LED ao pino digital 13#define buttonPin 4 // botão ao pino 4int value = LOW; // valor anterior do LEDint buttonState; // variável a guardar estado do botãoint lastButtonState; // variável a guardar o último estado do botãoint blinking; // condição para piscamento - o cronômetro venceulong interval = 100; // intervalo de piscamento - mude à vontadelong previousMillis = 0; // variável a guardar o último momento de atualização do LEDlong startTime ; // momento de partida do cronômetrolong elapsedTime ; // tempo decorrido no cronômetroint fractional; // variável a guardar parte fracionária do tempovoid setup(){Serial.begin(9600);pinMode(ledPin, OUTPUT); // ajuste o pino digital como saídapinMode(buttonPin, INPUT); // linha não muito necessária, já que os pinos são por padrão entradasdigitalWrite(buttonPin, HIGH); // ligue resistores de pull-up}void loop(){// aguarde pressionamento do botãobuttonState = digitalRead(buttonPin); // leia e guarde estado do botãoif (buttonState == LOW && lastButtonState == HIGH && blinking == false){// veja se houve transição de HIGH para LOW// em caso positivo, então trata-se de um novo pressionamento enquanto o relógio não corre: parta o relógiostartTime = millis(); // guarde o tempo de partidablinking = true; // ligue o piscar enquanto corre o relógiodelay(5); // pequena pausa para filtrar ruído mecânico do botãolastButtonState = buttonState; // guarde buttonState em lastButtonState, para que possa comparar mais tarde}else if (buttonState == LOW && lastButtonState == HIGH && blinking == true){// veja se houve transição de HIGH para LOW// em caso positivo, trata-se de um novo pressionamento enquanto o relógio corre: pare o relógio e exiba mensagemelapsedTime = millis() - startTime; // guarde tempo decorridoblinking = false; // desligue o pisca-piscalastButtonState = buttonState; // guarde buttonState em lastButtonState, para comparar mais tarde// rotina para exibir tempo decorridoSerial.print( (int)(elapsedTime / 1000L)); // divida por 1000 para converter a segundos - e então converta a inteiroSerial.print("."); // imprima ponto decimal// use operador módulo para obter parte fracionária part do tempofractional = (int)(elapsedTime % 1000L);// preencha com zeros à esquerda - não seria ótimo se// a linguage Arduino tivesse algo específico para tratar disso? :)if (fractional == 0)Serial.print("000"); // inclua 3 zeroselse if (fractional < 10)Serial.print("00"); // inclua 2 zeroselse if (fractional < 100)Serial.print("0"); // inclua 1 zeroSerial.println(fractional); // imprima parte fracionária do tempo}else{lastButtonState = buttonState; // guarde buttonState em lastButtonState, para comparar mais tarde}// rotina de piscamento - pisca LED enquanto conta o tempo// verifique se já é hora de piscar LED; isto é, a diferença// entre o tempo atual e o último momento em que piscamos o LED é maior que// o intervalo ao qual queremos piscá-lo?if ( (millis() - previousMillis > interval) ) {if (blinking == true){previousMillis = millis(); // lembre-se da última vez que piscou-se o LED// se LED está desligado, ligue-o e vice-versaif (value == LOW)value = HIGH;elsevalue = LOW;digitalWrite(ledPin, value);}else{digitalWrite(ledPin, LOW); // desligue o LED caso não esteja a piscar}}}
Boa tarde amigo, estou iniciando agora no arduino e gravei um programinha bobo para teste em meu arduido (fazendo um led piscar pelo pino 13 e gnd) mas toda vez que tento gravar outro programa por cima não consigo, da um erro no programa de gravação, tem como eu retirar este programa ou retira-lo do arduino para que eu possa colocar um novo? Obrigado, acredito que seja uma coisa fácil mas ainda não encontrei.
ResponderExcluir--
Thierri Victorino