Validando se uma data é válida, com o Arduino.
Através do Monitor Serial o usuário digita uma data e o Arduino analisa se é válida ou não, verificando as regras de dia, mês, ano e se o formato está correto.
O foco desse projeto não é a data em si, mas o estudo de lógica de programação, usando o Arduino como a ferramenta para interpretar textos e aplicar as regras.
O objetivo principal é trabalhar conceitos básicos de programação, como:
- Manipulação de Strings, extraindo partes do texto digitado
- Uso do tipo char, validando o formato da data caractere por caractere
- Conversão de texto para números, transformando dia, mês e ano em valores inteiros
Assim como no projeto Validador de Senhas, é para quem está começando e quer entender como o computador lê e interpreta textos, aplicando regras simples para resolver um problema.
👉Compile esse fonte no Arduino, abra o Monitor Serial e digite as datas no formato DD/MM/AAAA para testar a validação.
Mexa no código e adicione as suas validações. Tente validar outros formatos, como o padrão de sistemas AAAA-MM-DD. Faça evoluir para tratar ano bissexto e outras regras.
Segue o código fonte com comentários para entendimento.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | /*---------------------------------------------------------- Programa : VALIDADOR DE DATAS (DD/MM/AAAA) Autor : Fellipe Couto [ https://www.efeitonerd.com.br ] Data : 25/12/2025 ----------------------------------------------------------*/ void setup() { //Inicia a comunicação serial Serial.begin(115200); //Delay para garantir que o Monitor Serial conecte delay(1000); //Mensagens iniciais Serial.println("VALIDADOR DE DATAS"); Serial.println("www.efeitonerd.com.br"); Serial.println("\nDigite uma data (ex: 25/12/2025):"); } void loop() { //Verifica se existe algum dado vindo pela Serial if (Serial.available() > 0) { //Lê a linha digitada até o ENTER (\n) e retorna uma String inteira String dataSerial = Serial.readStringUntil('\n'); dataSerial.trim(); //Remove espaços do início e fim //Se o usuário só apertar ENTER, ignora if (dataSerial.length() == 0) { Serial.println("Nenhuma data foi digitada."); return; } //Valida a data e já imprime o resultado validarData(dataSerial); delay(1000); Serial.println("\nDigite outra data:"); } } void validarData(String data) { //Valida do formato - 10 caracteres if (data.length() != 10) { Serial.println("Data invalida: formato deve ser DD/MM/AAAA"); return; } //Valida se as barras estão nas posições corretas if (data.charAt(2) != '/' || data.charAt(5) != '/') { Serial.println("Data invalida: faltando '/' nas posicoes corretas"); return; } //Valida se os demais caracteres são números (tudo exceto posição 2 e 5) for (int i = 0; i < data.length(); i++) { if (i == 2 || i == 5) continue; //Pula as barras char c = data.charAt(i); //char é um número (ASCII). '0' a '9' são valores consecutivos. bool isNumero = (c >= '0' && c <= '9'); if (!isNumero) { Serial.println("Data invalida: use apenas numeros e '/' (ex: 25/12/2025)"); return; } } //Extrai o dia, mês e ano usando substring String diaStr = data.substring(0, 2); // "25" String mesStr = data.substring(3, 5); // "12" String anoStr = data.substring(6, 10); // "2025" //Converte para int int dia = diaStr.toInt(); int mes = mesStr.toInt(); int ano = anoStr.toInt(); //Valida os intervalos de dia, mês e ano if (ano <= 0) { Serial.println("Data invalida: ano invalido"); return; } if (mes < 1 || mes > 12) { Serial.println("Data invalida: mes deve estar entre 01 e 12"); return; } if (dia < 1) { Serial.println("Data invalida: dia deve ser maior ou igual a 1"); return; } //Valida o número de dias de acordo com o mês int maxDia = diasNoMes(mes); if (dia > maxDia) { Serial.print("Data invalida: esse mes vai ate "); Serial.println(maxDia); return; } //Aqui passou por todas as validações e a data é válida Serial.print("Data valida -> "); Serial.println(data); } int diasNoMes(int mes) { //Meses com 31 dias: 1, 3, 5, 7, 8, 10 e 12 if (mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12) { return 31; } //Meses com 30 dias: 4, 6, 9 e 11 if (mes == 4 || mes == 6 || mes == 9 || mes == 11) { return 30; } //Fevereiro (2) sem considerar anos bissextos return 28; } |

Nenhum comentário:
Postar um comentário