display 12864ZW-10
Moderatore: liftman
-
- Messaggi: 4
- Iscritto il: domenica 14 marzo 2021, 0:09
- Nome: Rinaldo
- Regione: Bergamo
- Città: Alzano Lombardo
- Stato: Non connesso
display 12864ZW-10
ho un display 12864zw-10 con encoder(tolto da una ender3)
il display ho capito come programmarlo con Spi e ho trovato i pin per collegarlo al mio arduino nano fin qui tutto ok
ho tovato i pin ENC_A ENC_B e il tasto ENC_SW
ma non trovo un tutorial che mi spieghi come fare per gestire l'encoder in modo che io possa muovermi su e giu nel display
potete aiutarmi
grazie
-
- Socio GAS TT
- Messaggi: 23415
- Iscritto il: mercoledì 26 ottobre 2011, 19:42
- Nome: Andrea
- Regione: Lombardia
- Città: Milano
- Ruolo: Amministratore
- Stato: Non connesso
Re: display 12864ZW-10
Grazie.
-
- Messaggi: 4
- Iscritto il: domenica 14 marzo 2021, 0:09
- Nome: Rinaldo
- Regione: Bergamo
- Città: Alzano Lombardo
- Stato: Non connesso
-
- Socio GAS TT
- Messaggi: 5600
- Iscritto il: lunedì 27 agosto 2012, 11:14
- Nome: Roberto
- Regione: Lombardia
- Città: Nova Milanese
- Stato: Non connesso
Re: display 12864ZW-10
-
- Messaggi: 4
- Iscritto il: domenica 14 marzo 2021, 0:09
- Nome: Rinaldo
- Regione: Bergamo
- Città: Alzano Lombardo
- Stato: Non connesso
Re: display 12864ZW-10
ti allego il codice che non mi funziona perche quando ruito l'encoder non mi cambia il valore mentre il tasto se lo premo va bene
#include "U8glib.h"
#define encoderPin1 2 //ENC_A
#define encoderPin2 3 //ENC_B
#define pinEncButt 4 //ENC_SW
volatile int lastEncoded = 0;
volatile long encoderValue = 10;
long lastencoderValue = 0;
int lastMSB = 0;
int lastLSB = 0;
float rad2grad=57.295779513;
U8GLIB_ST7920_128X64 u8g(13, 11, 10); //spi com visualizza lo schermo
void draw(void) {
u8g.setFont(u8g_font_fub11);
u8g.drawStr( 0, 12, "Test Encoder");
u8g.setFont(u8g_font_fub11);
char buf[8];
sprintf(buf, "%d<>%d",digitalRead(pinEncButt),(encoderValue/4)); //pinEncButt tasto encoderValue rotazione trimmer
u8g.drawStr( 10, 40, buf);
u8g.drawCircle(96, 34, 19);//disegna trimmer
u8g.drawCircle(96, 34, 20);
// genera la Linea
// enc 20 step = 360/20 = 18°
float ang = (((encoderValue/4)*18)/rad2grad);
byte x = (96+(sin(ang)*19));
byte y = (34-(cos(ang)*19));
u8g.drawLine(96, 34, x, y);
// firma
u8g.setFont(u8g_font_6x12);
u8g.drawStr( 0, 63, "www.mauroalfieri.it");
}
void updateEncoder(){
int MSB = digitalRead(encoderPin1);
int LSB = digitalRead(encoderPin2);
int encoded = (MSB << 1) |LSB;
int sum = (lastEncoded << 2) | encoded;
if(sum==0b1101||sum==0b0100||sum==0b0010||sum==0b1011) encoderValue++;
if(sum==0b1110||sum==0b0111||sum==0b0001||sum==0b1000) encoderValue--;
lastEncoded = encoded; //store this value for next time
}
void setup(void) {
Serial.begin(9600);
pinMode(encoderPin1, INPUT);//legge can A
pinMode(encoderPin2, INPUT);//legge can_B
pinMode(pinEncButt, INPUT);//legge tasto
digitalWrite(encoderPin1, HIGH);
digitalWrite(encoderPin2, HIGH);
digitalWrite(pinEncButt, HIGH);
attachInterrupt(0, updateEncoder, CHANGE);
attachInterrupt(1, updateEncoder, CHANGE);
}
void loop(void) {
// Serial.println( digitalRead(pinEncButt) ), ( digitalRead(encoderValue) );
Serial.println ( digitalRead(encoderPin1)),( digitalRead(encoderPin2));
u8g.firstPage();
do { draw(); } while( u8g.nextPage() );
delay(500);
}