Go Down

Topic: "Tastiera" manuale (Read 415 times) previous topic - next topic

Fabiett0

Buonasera, prima di iniziare tengo a dire che sono nuovissimo del settore e mi scuso in anticipo se ho commesso errori che ad un occhio un po' più esperto potrebbero risultare banali, comunque, avrei problemi nel completare il codice del mio progetto, che consisterebbe in un motore servo attaccato ad un pezzo di carta su cui sono riportate tutte le lettere dell'alfabeto, la mia idea era quella di creare un piccolo indicatore con il braccio del motore servo, che attraverso due pulsanti si può muovere nelle due direzioni: una volta che l'indicatore si trova sulla lettera desiderata si preme un terzo pulsante che da il comando ad Arduino di scrivere quella lettera nel monitor seriale, il punto è che dopo aver programmato tutto ho scoperto che quando premo il terzo pulsante per far comparire la lettera lui scrive tutte le lettere che ho registrato, penso che il problema sia legato alla "definizione" dei campi delle lettere nel codice, allego il codice sperando che qualcuno mi possa dare una mano :D
Code: [Select]

#include <Servo.h>
Servo myServo;
int grad;
int maxGrad = 180;
int minGrad=0;
int rightButton = A1;
int leftButton = A0;
int servo = 3;
int redLed = 12;
int leftLed = 11;
int button = A3;
void setup(){
  pinMode(5,INPUT);
  pinMode(4,INPUT);
  pinMode(11, OUTPUT);
  pinMode(12,OUTPUT);
  myServo.attach(3);
  myServo.write(grad);
  Serial.begin(9600);
}
void loop(){
  if(analogRead(rightButton)>1000) {grad++;analogWrite(redLed,HIGH);}
  if(analogRead(leftButton)>1000) {grad--;analogWrite(leftLed,HIGH);}
  if(grad > maxGrad) {grad = maxGrad;}
  if(grad < minGrad) {grad = minGrad;}
  myServo.write(grad);
  delay(25);
  if(0<grad<=7){
    if(analogRead(button)>1000){
      Serial.print("A");
    }
  }
if(7<grad<=14){
    if(analogRead(button)>1000){
      Serial.print("B");
    }
  }
  if(14<grad<=21){
    if(analogRead(button)>1000){
      Serial.print("C");
    }
  }
  if(21<grad<=28){
    if(analogRead(button)>1000){
      Serial.print("D");
    }
  }
  if(28<grad<=35){
    if(analogRead(button)>1000){
      Serial.print("E");
    }
  }
  if(35<grad<=42){
    if(analogRead(button)>1000){
      Serial.print("F");
    }
  }
  if(42<grad<=49){
    if(analogRead(button)>1000){
      Serial.print("G");
    }
  }
  if(49<grad<=56){
    if(analogRead(button)>1000){
      Serial.print("H");
    }
  }
  if(56<grad<=63){
    if(analogRead(button)>1000){
      Serial.print("I");
    }
  }
  if(63<grad<=70){
    if(analogRead(button)>1000){
      Serial.print("J");
    }
  }
  if(70<grad<=77){
    if(analogRead(button)>1000){
      Serial.print("K");
    }
  }
  if(77<grad<=84){
    if(analogRead(button)>1000){
      Serial.print("L");
    }
  }
  if(84<grad<=91){
    if(analogRead(button)>1000){
      Serial.print("M");
    }
  }
  if(91<grad<=98){
    if(analogRead(button)>1000){
      Serial.print("N");
    }
  }
  if(98<grad<=105){
    if(analogRead(button)>1000){
      Serial.print("O");
    }
  }
  if(105<grad<=112){
    if(analogRead(button)>1000){
      Serial.print("P");
    }
  }
  if(112<grad<=119){
    if(analogRead(button)>1000){
      Serial.print("Q");
    }
  }
  if(119<grad<=126){
    if(analogRead(button)>1000){
      Serial.print("R");
    }
  }
  if(126<grad<=133){
    if(analogRead(button)>1000){
      Serial.print("S");
    }
  }
  if(133<grad<=140){
    if(analogRead(button)>1000){
      Serial.print("T");
    }
  }
  if(140<grad<=147){
    if(analogRead(button)>1000){
      Serial.print("U");
    }
  }
  if(147<grad<=154){
    if(analogRead(button)>1000){
      Serial.print("V");
    }
  }
  if(154<grad<=161){
    if(analogRead(button)>1000){
      Serial.print("W");
    }
  }
  if(161<grad<=168){
    if(analogRead(button)>1000){
      Serial.print("X");
    }
  }
 if(168<grad<=175){
    if(analogRead(button)>1000){
      Serial.print("Y");
    }
  }
  if(175<grad<=180){
    if(analogRead(button)>1000){
      Serial.print("Z");
    }
  }




SukkoPera

#1
Jan 13, 2017, 04:45 pm Last Edit: Jan 13, 2017, 04:46 pm by SukkoPera
Questa cosa non si può fare così in C:
Code: [Select]
if(42<grad<=49){

Compila, ma ha un significato diverso da quello che sicuramente intendevi. Correggili tutti così:
Code: [Select]
if(grad > 42 && grad <= 49){

Nota che potresti ottimizzare un po' ed eliminare una delle condizioni usando degli else if e soglie decrescenti, ma se ti è più chiaro così, lascia perdere.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

Fabiett0

Ah, grazie mille, adesso provo e poi ti faccio sapere.

gpb01

>Fabiett0:   Non avndolo tu ancora fatto, nel rispetto del regolamento, ti chiedo di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

>SukkoPera: Per quanto ti è possibile, prima di rispondere, cerca di verificare sempre se l'utente abbia effettuato la presentazione, cosa che, ovviamente, NON può essere possibile se il suo numero di post è 1. Grazie mille anticipatamente per la collaborazione. :)
Search is Your friend ... or I am Your enemy !

Go Up