Il sito per chi ama smanettare con Arduino, Raspberry Pi & Co.
Share:
Notifications
Clear all

come rifiutare lettere da monitor seriale di arduino  

   RSS

0

Ciao a tutti colleghi del forum...

Sto facendo un programma con un display a 7 segmenti controllato dal monitor serial di arduino.

Esso deve funzionare solo per i numeri da 0 a 9 e BASTA! escludendo numeri maggiori di 9 e soprattutto lettere.

il problema è che quando inseriamo una lettera essa assume il valore di zero (infatti se mettiamo serial.print(comando) esce "hai acceso 0" con qualsiasi lettera e addirittura carattere) e noi vogliamo che quando si inserisca una lettera, sul monitor seriale, esca "non si accettano le lettere" e che sul display a 7 segmenti non appaia nulla, al posto che il fatidico 0.

ci potete aiutare? ci stiamo dietro da 10 ore ma non troviamo soluzione, il problema sta nel fatto che non riusciamo a far distinguere ad arduino le lettere dallo 0.

questo è il testo del programma

byte digit[11][7] = { 
{ 1,1,1,1,1,1,0 },
{ 0,1,1,0,0,0,0 },
{ 1,1,0,1,1,0,1 },
{ 1,1,1,1,0,0,1 },
{ 0,1,1,0,0,1,1 },
{ 1,0,1,1,0,1,1 },
{ 1,0,1,1,1,1,1 },
{ 1,1,1,0,0,0,0 },
{ 1,1,1,1,1,1,1 },
{ 1,1,1,0,0,1,1 },
{ 0,0,0,0,0,0,0 }
};

int comando;
char Data[8];
int i;
unsigned long Tempo;

void setup(){
for (int pin=2; pin<10; pin++){
pinMode(pin, OUTPUT);
}

Serial.begin(9600);
Serial.println("Inserisci un numero da 0 a 9");
Serial.setTimeout(5);

}

void accendi_numero (int comando) {

for (byte i=0, pin=2; i<7; i++, pin++) {
digitalWrite(pin, digit[comando][i]);
}
}

void loop(){

do {

if (Serial.available()) {
Data[i] = Serial.read();
i++;
}
if(i<1)Tempo = millis();
} while (i<5&&(millis()-Tempo) < 500);

Data[i] = 0;
comando = atoi(Data);
i=0;

if (comando>=0&&comando<=9){
accendi_numero(comando);
Serial.print("Hai acceso ");
Serial.println(comando);
delay(1995);
Serial.find(comando);
accendi_numero(10);

}else {
Serial.print("Hai acceso ");
Serial.println(comando);
Serial.println("Il numero inserito non e' valido");}
Serial.println("Inserisci un numero da 0 a 9");

}

per le immagini di come è montato ci sono questi link di wetransfer

https://drive.google.com/drive/folders/1Sa01-c2j6S8GBiC65QfAbSBxky4zKt3p?usp=sharing

Questa discussione è stata modificata 2 mesi fa da Alfredofuzzi
Questa discussione è stata modificata 2 mesi fa da Alessandro
Topic Tags
2 Answers
0

Rifiutare qualcosa dalla seriale non credo sia possibile, la cosa giusta da fare è trovare la maniera per trattare solo quello che ci interessa e non gestire il resto

Questo post è stato modificato 2 mesi fa da Alessandro
0

Devi cambiare la funzione atoi in quanto non adatta al tuo scopo, magari con un cast del carattere ad intero riesci ad avere il corretto valore ascii dell carattere e quindi gestirlo correttamente, da verificare...

Ciao

Questo post è stato modificato 2 mesi fa da Alessandro
Share:

Entra nel forum

Hai un nuovo progetto in mente ma hai dei dubbi su come realizzarlo? Vuoi condividere la tua conoscenza da maker con gli altri? Registrati nella nostra community e potrai chiedere fare la tua domanda o rispondere e condividere la tua conoscenza in internet.