Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

programmare un ATMEGA328P con LCD E TASTIERA

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] programmare un ATMEGA328P con LCD E TASTIERA

Messaggioda Foto Utentealessandrofava10 » 11 apr 2015, 16:00

ciao ragazzi sto realizzando un progetto con atmega328 con il boostloader programandolo con arduino il problema teoricamente è semplice devo fare un programma che acquisca dei bit da tastiera in paricolare 4 tasti

appena accendo il sistema su lcd compagliono due scritte: caso1 e caso2 e tramite due bottoni scelgo uno dei due casi appena scelgo uno dei due casi parte un sotto programma

potreste darmi uno pseudocodice oppure un idea ben dettagliata su come realizzarlo?? un mio amico mi ha detto che potrei farlo tramite un vettore di due elementi dove ogni elemento è il percorso di un sotto programma e tramite tasti scelgo gli elementi del vettore ma in pratica non so come farlo
Avatar utente
Foto Utentealessandrofava10
8 3
 
Messaggi: 45
Iscritto il: 6 nov 2014, 21:04

0
voti

[2] Re: programmare un ATMEGA328P con LCD E TASTIERA

Messaggioda Foto Utentebobina » 11 apr 2015, 16:55

tastiera è troppo generico :) Intendi una tastiera per computer con attacco PS2 o USB oppure una tastiera creata da te con 4 pulsanti?
Avatar utente
Foto Utentebobina
212 6
Frequentatore
Frequentatore
 
Messaggi: 177
Iscritto il: 27 dic 2009, 14:22

0
voti

[3] Re: programmare un ATMEGA328P con LCD E TASTIERA

Messaggioda Foto Utentealessandrofava10 » 11 apr 2015, 17:05

specifico meglio sto ordinando un LCD 1602 shield con 6 pulsanti, visto che sul sito non ci sono le specifiche pero dalle foto si vede che ha 16 piedini dell LCD e 10 per i pulsanti adesso la logica che li governa non la so in quanto ancora non l ho acquistato
Avatar utente
Foto Utentealessandrofava10
8 3
 
Messaggi: 45
Iscritto il: 6 nov 2014, 21:04

0
voti

[4] Re: programmare un ATMEGA328P con LCD E TASTIERA

Messaggioda Foto Utentedadduni » 11 apr 2015, 17:18

per la scelta a video io la farei molto più facile, forse non serve nemmeno un array se devi lavorare con solo due scelta basta una flag booleana.

Codice: Seleziona tutto
int menu=0;

void loop{
  if(menu) {
    lcd.setCursor(0,0);
    lcd.print("caso1");  //se menu vale 1 stampo a video caso1
  }

  if(!menu){
    lcd.setCursor(0,0);
    lcd.print("caso0");  //se menu vale 0 stampo a video caso0   
  }
//questo bottone ti fa spostare tra le due voci del menu
if(!digitalRead(__TUO_BUTTON)){
  delay(50); //debouce
  menu= 1-menu; //se è 1 diventa 0 e viceversa
  }

//quando premi il pulsante "ok" che ti fa scegliere distingui i casi...
if(!digitalRead(__ALTRO_BOTTONE)){
    delay(50); //debouce
    if(menu) sottoProgrammaUno();  //se quando lo premi sei sulla voce 1 del menu lanci il primo sottoprogramma
    if(!menu) sottoProgrammaDue();   //senno lanci il secondo
  }
}


questa è una soluzione moooolto blanda, gestisce solo due scelte del menu e il tempo non deve essere critico (presenta il debouce con delay in cui il micro è congelato).
una scelta migliore ptrebbe essere gestire i pulsanti con delle interrupt. spero di essere stato utile (e spero di non aver detto baggianate) in ogni caso aspettiamo risposte di utenti più esperti in microcontrollori
Avatar utente
Foto Utentedadduni
2.073 2 7 12
Expert EY
Expert EY
 
Messaggi: 1370
Iscritto il: 23 mag 2014, 16:26

0
voti

[5] Re: programmare un ATMEGA328P con LCD E TASTIERA

Messaggioda Foto Utentedadduni » 11 apr 2015, 17:26

ops, ci siamo accavallati con le risposte #-o #-o
quell'lcd ha un solo pin che gestisc tutti i pulsanti in quanto li comanda in maniera analogica. nel mio codice di prima bisogna sotituire i digitalRead con analogRead e il valore del pulsante indicato per quella shield :)
Avatar utente
Foto Utentedadduni
2.073 2 7 12
Expert EY
Expert EY
 
Messaggi: 1370
Iscritto il: 23 mag 2014, 16:26

0
voti

[6] Re: programmare un ATMEGA328P con LCD E TASTIERA

Messaggioda Foto Utentealessandrofava10 » 11 apr 2015, 18:14

ti ringrazio della risposta ma da quanto ho capito il tuo codice utilizza solo due bottoni nel senso con uno scendi e sali tra le due opzioni e il secondo bottone serve per selezionare giusto ?? se non e cosi non sono riuscito ad immaginare cosa vedo su lo schermo
Avatar utente
Foto Utentealessandrofava10
8 3
 
Messaggi: 45
Iscritto il: 6 nov 2014, 21:04

0
voti

[7] Re: programmare un ATMEGA328P con LCD E TASTIERA

Messaggioda Foto Utentedadduni » 11 apr 2015, 19:10

ovviamente il mio non è un codice finito e farebbe rabbrividire qualsiasi microcontrolista qui su EY. Ho buttato giù giusto il "menu", all'accensione hai solo la scritto "caso0"(ovviamente ci scivi quello che vuoi), alla pressione di un pulsante cambia in "caso1", se premi l'altro pulsante invece esegue funzioni diverse in base a se ti trovi su caso0 o 1 tutto qui.
Avatar utente
Foto Utentedadduni
2.073 2 7 12
Expert EY
Expert EY
 
Messaggi: 1370
Iscritto il: 23 mag 2014, 16:26

0
voti

[8] Re: programmare un ATMEGA328P con LCD E TASTIERA

Messaggioda Foto Utentealessandrofava10 » 11 apr 2015, 19:54

quindi la variabile menu non è un pulsante perche io l ho aggiustato in questo modo pero ce qualcosa che non va nell esecuzione del simulatore
Codice: Seleziona tutto
#include<LiquidCrystal.h>
#include<stdio.h>
LiquidCrystal lcd(12,11,5,4,3,2);
int menu=0;
int bottone1=A2;
int bottone2=A3;
int luminosita;
int umidita;
int  pinled=13;
int  pinsensoreumi=A1;
int pinsensorelumi=A0;



void setup(){
Serial.begin(9600);
pinMode(pinled,OUTPUT);
pinMode(pinsensorelumi,INPUT);
pinMode(pinsensoreumi,INPUT);
pinMode(bottone1,INPUT);
pinMode(bottone2,INPUT);
lcd.begin(16, 2);}
void loop(){
  if(menu) {
    lcd.setCursor(0,0);
    lcd.print("mod auto");  //se menu vale 1 stampo a video caso1
  }

  if(!menu){
    lcd.setCursor(0,0);
    lcd.print("mod temp ");  //se menu vale 0 stampo a video caso0   
  }
//questo bottone ti fa spostare tra le due voci del menu
if(!analogRead(bottone1)){
  delay(50); //debouce
  if(menu) menu=0;
  else menu=1 ;//se è 1 diventa 0 e viceversa
  }

//quando premi il pulsante "ok" che ti fa scegliere distingui i casi...
if(!analogRead(bottone2)){
    delay(50); //debouce
    if(menu) sottoprogramma1();  //se quando lo premi sei sulla voce 1 del menu lanci il primo sottoprogramma
    if(!menu){  lcd.clear();
                lcd.setCursor(0,0);
                lcd.print("hello"); }   //senno lanci il secondo
  }
}
void sottoprogramma1() {

  for(;;) {
  umidita=analogRead(pinsensoreumi);
  luminosita=analogRead(pinsensorelumi);
  lcd.home();
  lcd.print("luce: ");
  lcd.println(luminosita);
  lcd.setCursor(0,1);
  lcd.print("umidita: ");
  lcd.println(umidita);
  lcd.noDisplay();
  delay(5);
  lcd.clear();
 
  if (luminosita<400) {
    if(umidita<500){
  digitalWrite(pinled,HIGH);
  }
   else digitalWrite(pinled,LOW);}
 
  else digitalWrite(pinled,LOW);
}}
Avatar utente
Foto Utentealessandrofava10
8 3
 
Messaggi: 45
Iscritto il: 6 nov 2014, 21:04

0
voti

[9] Re: programmare un ATMEGA328P con LCD E TASTIERA

Messaggioda Foto Utentealessandrofava10 » 11 apr 2015, 20:10

problema risolto la simulazione funziona egregiamente pero sono molto ma molto lontano dalla reaalizzazione finale del programma... ultima cosa la delay perche è stata impostata a 50 ??
Avatar utente
Foto Utentealessandrofava10
8 3
 
Messaggi: 45
Iscritto il: 6 nov 2014, 21:04

0
voti

[10] Re: programmare un ATMEGA328P con LCD E TASTIERA

Messaggioda Foto Utentedadduni » 12 apr 2015, 1:42

Non fidarti troppo dei simulatori, la realtà può risultare essere ben diversa. La shield che hai acquistato utilizza un solo pin analogico come uscita per tutti i pulsanti. L analog read su questo pin assumerà valori diversi in base al pulsante premuto quindi il codice è da adattare:
Codice: Seleziona tutto
If(analogRead (pin) > soglia bassa && analogRead(pin)< soglia alta) {…}

Così quella if verrà eseguita solo se il pin ha valore analogico entro una soglia (che devi trovare sperimentalmente) diversa da pulsante a pulsante.
Per capire Chr valore assume ogni pulsante puoi lanciare uno sketch " preparatorio" in cui ti fai stampare a seriale l analog read sul pin e annoti che valori assume alla pressione di ogni tasto.
Avatar utente
Foto Utentedadduni
2.073 2 7 12
Expert EY
Expert EY
 
Messaggi: 1370
Iscritto il: 23 mag 2014, 16:26


Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite