Pages: [1]   Go Down
Author Topic: Aiuto per capire qual'è il mio errore  (Read 353 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti ho creato questo programmino (è ancora in attesa di migliorie)
 
Code:
#include <LiquidCrystal.h>

LiquidCrystal lcd(2, 3, 4, 5, 6, 7, 8);
char password[5] = {95,95,95,95};
char Pcorretta[5] = {"1992"};
char tasti[5][5] = {
                    {"1", "2", "3", "A"},
                    {"4", "5", "6", "B"},
                    {"7", "8", "9", "C"},
                    {"*", "0", "#", "D"}
                   };
char tastoPremuto1;
char tastoPremuto2;
int latchPin = 12;
int clockPin = 13;
int dataPin = 11;
long oldTime;
int lockCr;
boolean Blink = HIGH;
boolean risposta = 0;
byte chiave1 [8] = {14,17,17,17,17,17,14};
byte chiave2 [8] = {0,0,0,31,2,2,0};

void setup()

{
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(14, INPUT);
  pinMode(15, INPUT);
  pinMode(16, INPUT);
  pinMode(17, INPUT);
  lcd.createChar(1, chiave1);
  lcd.createChar(2, chiave2);
  lcd.begin(7, 2);
  lcd.noCursor();
  Serial.begin(9600);
  //
  oldTime = 650;
  lcd.home();
  lcd.print("PASSWORD");
  Blink = 1;
}

void loop()
{
  while(1)
  {
    for(int cr=0; cr<4; cr++)
    {
      if ((Blink == LOW) && (password[cr] == 95)){
        password[cr] = 32;
      }
      if ((Blink == HIGH) && (password[cr] == 32)){
        password[cr] = 95;
      }
      lcd.setCursor((cr+4), 1);
      lcd.write(password[cr]);
    }
    if (oldTime < millis())
    {
      Blink = !Blink;
      oldTime = (millis() + 650); 
    }
    if (lockCr == 4){
      break;
    }
    leggoKeyboar();
  }
 
 
  delay(1000);
  lcd.clear();
  for(int i=0; i<48; i++)
  {
    if(password[i]!=Pcorretta[i])
    {
      risposta=1;
      break;
    }
    else
    {
      risposta=0;
    }
  }
  Serial.println(risposta);
  if(risposta == 0)
  {
    lcd.clear();
    lcd.home();
    lcd.print("UNLOCKED");
    lcd.setCursor(6, 1);
    lcd.write(1);
    lcd.setCursor(7, 1);
    lcd.write(2);
    delay(5000);
    while(1){
    }
  }else{
    lcd.clear();
    lcd.home();
    lcd.print("ERROR");
    for(int j=0; j<9; j++)
    {
      lcd.setCursor(6, 1);
      lcd.write(1);
      lcd.setCursor(7, 1);
      lcd.write(2);
      delay(400);
      lcd.setCursor(6, 1);
      lcd.write(120);
      lcd.setCursor(7, 1);
      lcd.write(120);
      delay(400);
    }
    oldTime = 650;    //reset
    lcd.clear();
    lcd.home();
    lcd.print("PASSWORD");
    Blink = 1;
    lockCr=0;
    for(int i=0; i<5; i++)
    {
      password[i] = 95;
    }
   
  }
}


void leggoKeyboar()
{
  for (int k=0, k<4, k++)
  {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, (B00000001 << k));
    digitalWrite(latchPin, HIGH);
    for (int l=0, l<4, l++)
    { 
      if (digitalRead(l+14) != 0)
      {
        tastoPremuto1 = tasti[l][k];
        break;
      }else{
        tastoPremuto1 = 0;
      }
    }
  }
  delay(30);
  for (int k=0, k<4, k++)
  {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, (B00000001 << k));
    digitalWrite(latchPin, HIGH);
    for (int l=0, l<4, l++)
    { 
      if (digitalRead(l+14) != 0)
      {
        tastoPremuto2 = tasti[l][k];
        break;
      }else{
        tastoPremuto2 = 0;
      }
    }
  }
  if(tastoPremuto1 == tastoPremuto2) && (tastoPremuto1 != 0)
  {
    while(tastoPremuto1 == tastoPremuto2)
    {
      for (int k=0, k<4, k++)
      {
        digitalWrite(latchPin, LOW);
        shiftOut(dataPin, clockPin, LSBFIRST, (B00000001 << k));
        digitalWrite(latchPin, HIGH);
        for (int l=0, l<4, l++)
        { 
          if (digitalRead(l+14) != 0)
          {
            tastoPremuto2 = tasti[l][k];
            break;
          }else{
            tastoPremuto2 = 0;
          }
        }
      }
    }
    password[lockCr] = tastoPremuto1;
    lockCr++;
  }
}

l'ho controllato e ricontrollato ma non mi sembra ci siano errori eppure l'IDE mi da i seguenti errori

Code:
password_lcd:11: error: too many initializers for 'char [5]'
password_lcd:11: error: too many initializers for 'char [5]'
password_lcd:11: error: too many initializers for 'char [5]'
password_lcd:11: error: too many initializers for 'char [5]'
password_lcd.ino: In function 'void leggoKeyboar()':
password_lcd:134: error: expected initializer before '<' token
password_lcd:191: error: expected primary-expression at end of input
password_lcd:191: error: expected `;' at end of input
password_lcd:191: error: expected primary-expression at end of input
password_lcd:191: error: expected `)' at end of input
password_lcd:191: error: expected statement at end of input
password_lcd:191: error: expected `}' at end of input
mi riuscireste ad aiutare a capire di che si tratta perchè io non riesco a far coincidere gli errori riportati con ciò che c'è scritto nello Sketch
Logged

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 2795
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
char tasti[4][4] = {
                    {'1', '2', '3', 'A'},
                    {'4', '5', '6', 'B'},
                    {'7', '8', '9', 'C'},
                    {'*', '0', '#', 'D'}
                   };

Così dovrebbe funzionare. Il numero degli elementi effettivo è 4, enumerabili partendo da 0. 'A' per il compilatore è uguale a 65 e gli altri caratteri sono codificati secondo lo standard ASCII.

Quando un array è inizializzato con {1,2,3,4, ecc} non è necessario specificare il numero di elementi perchè il compilatore dimesiona l'array contando il numero di elementi. Se l'array è grande 5 e inizializzi solo 4 elementi, il 5 potrebbe contenere spazzatura, oppure essere inizializzato a 0.

Le stringhe sono collezioni di caratteri contenuti in un array nel quale l'ultimo elemento viene riempito con il carattere di fine stringa '\0'. Nota che '\' apre la sequenza di escape e tutto ciò che segue viene interpretato in modo speciale, così '\t', '\n' sono rispettivamente una tabulazione e un fine riga.

La rappresentazione umana della stringa o di altro viene trattata sempre come numeri, anche il numero decimale è trattato come binario a fare questo è il compilatore. Il C/C++ è un linguaggio molto vicino alla macchina e molto meno all'uomo e si trova un gradino più alto dell'assembley il quale si trova un gradino più alto del linguaggio macchina composto da sequenze binarie.

Code:
void leggoKeyboar()
{
  for (int k=0, k<4, k++)

Al posto della virgola metti il punto e virgola.

Il compilatore protesta con messagi di errore criptici, che però sono molto dettagliati, c'è il nome del file, la funzione, il numero di riga, l'errore, ecc, il difficile è che non c'è un . a fine errore ma è una sequenza da interpretare.

Parere personale:
È frustrante perdersi per così poco, gli errori lessicali derivano da distrazione o mancato studio, ma anche da una predisposizione che porta l'osservatore ad osservare l'insieme è non il dettaglio, confondendo di conseguenza le virgole e altri caratteri considerati minori nella nostra lingua. Il compilatore è fiscale è non ha alternativa, fosse una macchina intelligente si rischierebbe di essere fraintesi come accade fra gli umani.

Codice troppo complicato per un principiante, devi costringerti a scrivere codice di tuo pugno che svolga anche funzionalità banali ma che coinvolga tutti i costrutti del linguaggio, if, if else, switch case, while, do while, ecc. Scrivendole di tuo pugno ti verra automatico aggiungere il ; a fine riga, non farai l'errore if (k=0) ma scriverai if (k==0) ecc.


Ciao.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

aggiungerei che per evitare casini con gli indici, un sistema veloce e sicuro è non metterli se si inizializza l'array alla creazione!
Code:
char tasti[][] = {
                    {'1', '2', '3', 'A'},
                    {'4', '5', '6', 'B'},
                    {'7', '8', '9', 'C'},
                    {'*', '0', '#', 'D'}
                   };
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1]   Go Up
Jump to: