Si, stai correndo troppo, nel senso che corri troppo e vuoi fare molte cose allo stesso tempo.
Ti descrivo in parte la configurazione hardware che ho al momento su arduino.....
ho i piedini 2,3,4,5 10,11,12 utilizzati per il display
le 2 uscite dell'encoder sono collegate ai piedini 6 e 7 di arduino.... e per il momento nessun tasto.....
Ok, e questo va benissimo. Adesso prima di scrivere il codice, pensa a assegnare il resto dei pin, da non dover riscrivere il firmware troppe
volte. Diciamo questo e´ lo step 0.
Poi hai detto questi Steps:
1) ad esempio come visualizzare sul display il dro di emc2?
2) configurare i piedini 6 e 7 per utilizzare l'encoder per il movimento degli assi....
3) configurare un paio di piedinio analogici per utilizzare due potenziometri per spindle e feed override.....
Da quello che hai detto, hai l´encoder e il display funzionante come Hardware. Benissimo.
Scrivi del SW per questi componenti, questo non sembra male per quanto riguarda lencoder di quadratura, te lo incollo qui sotto.
Poi aggiungi il display, inserisci il codice che visualizza le coordinate dell´encoder, magari X normale e Y diviso 10 e Z diviso 1000.
Praticamente dovresti testare il tutto che funzioni solo con arduino e il display e utilizzare per ogni cosa una variablile diversa.
Se tutto poi funziona, si va avanti a interfacciarlo con EMC come descritto dalla pagina.
#include
#include
int ledPin = 13; // LED connected to digital pin 13
int ENCODE_A = 2;
int ENCODE_B = 3;
boolean CW = HIGH;
unsigned long counter = 0;
unsigned long oldCounter = 0;
void flash()
{
static uint16_t stateA = 0; // Current debounce status A
static uint16_t stateB = 0; // Current debounce status B
stateA = (stateA<<1) | digitalRead(ENCODE_A);
stateB = (stateB<<1) | digitalRead(ENCODE_B);
// High to Low transitions
if ((stateA == 0xf000) && (stateB == 0xffff)) counter++;
if ((stateB == 0xf000) && (stateA == 0x0000)) counter++;
// Low to High transitions
if ((stateA == 0x0fff) && (stateB == 0x0000)) counter++;
if ((stateB == 0x0fff) && (stateB == 0xffff)) counter++;
// High to Low transitions
if ((stateB == 0xf000) && (stateA == 0xffff)) counter--;
if ((stateA == 0xf000) && (stateB == 0x0000)) counter--;
// Low to High transitions
if ((stateB == 0x0fff) && (stateA == 0x0000)) counter--;
if ((stateA == 0x0fff) && (stateB == 0xffff)) counter--;
}
void setup()
{
// sets the digital pin as output
pinMode(ledPin, OUTPUT);
//During set up, we want to enable the pull-up resistors
//for pin 2 and pin 4 with:
pinMode(ENCODE_A, INPUT); // Pin 2
digitalWrite(ENCODE_A, HIGH); // Enable pull-up resistor
pinMode(ENCODE_B, INPUT); // Pin 3
digitalWrite(ENCODE_B, HIGH); // Enable pull-up resistor
MsTimer2::set(1, flash); // 1ms period
MsTimer2::start();
Serial.begin(9600);
}
void loop()
{
if (counter != oldCounter)
{
oldCounter = counter;
Serial.println(counter,DEC);
}
}