const float LOWER_THRESHOLD = 1.0; // Limiar inferior para codificar como '0'
const float UPPER_THRESHOLD = 3.5; // Limiar superior para codificar como '1'
void setup() {
Serial.begin(9600);
// Configura as 8 portas digitais como saída (para controlar os LEDs)
for (int i = 2; i <= 9; i++) {
pinMode(i, OUTPUT);
}
}
void loop() {
int inputValues[5]; // Vetor para armazenar os valores
//das entradas
char encodedLetter; // Letra correspondente à entrada
// Leitura das 5 entradas analógicas e codificação
for (int i = 0; i < 5; i++) {
int analogValue = analogRead(i);
if (analogValue < LOWER_THRESHOLD / 5 * 1023) {
inputValues[i] = 0;
} else if (analogValue > UPPER_THRESHOLD / 5 * 1023) {
inputValues[i] = 1;
} else {
Serial.println("Erro: Valor analógico fora da faixa válida.");
return; // Sair se o valor estiver fora da faixa válida
}
}
// Convertendo os valores para um único byte
//poner código expandido
byte encodedByte = 0;bool encoByte[5];
for (int i = 0; i < 5; i++) {
// encodedByte |= inputValues[i] << (4 - i);
int shiftedValue = inputValues[i] << (4 - i);
encodedByte |= shiftedValue;
}
// Mapeamento para a letra correspondente
if (encodedByte == 0x0F) {
encodedLetter = ' '; // Espaço
} else {
// Mapeamento de '0001' -> 'A', '0010' -> 'B', ...
encodedLetter = 'A' + encodedByte - 1;
}
Serial.print(encodedByte, BIN);
Serial.print(" -> ");
Serial.println(encodedLetter);
//Criptografo meus dados
byte resultByte = 4 * encodedByte;
//Serial.println(" Serial.print = ");
//Serial.println((resultByte));
// Realiza a operação e separa por bits
for (int i = 0; i < 8; i++) {
// Extrai o i-ésimo bit da resposta e envia para a porta digital correspondente
/*int bitValue = (resultByte & (1 << (7 - i))) ? HIGH : LOW;
digitalWrite(2 + i, bitValue);*/
int bitShift = 7 - i;// Valor mais representativo da mascara
int mask = 1 << bitShift;//Mascara de deslocamento
int bitValue;
if (resultByte & mask) {
bitValue = HIGH;
} else {
bitValue = LOW;
}
int pin = 2 + i;
digitalWrite(pin, bitValue);
// Exibe o valor enviado para a porta digital
Serial.print("Porta ");
Serial.print(i + 2); // Para exibir a porta correspondente (2 a 9)
Serial.print(": ");
Serial.println(bitValue == HIGH ? "HIGH" : "LOW");
delay(500);
}
// Envio do código e letra correspondente
//Serial.print("0000"); // Indicando início de transmissão de uma letra
delay(2000); // Aguarda um segundo antes de ler a próxima letra
}