Show Posts
Pages: [1]
1  International / Scandinavia / Re: Hur ska jag avgöra vilken av två sensorer som triggas först? on: March 27, 2013, 06:29:17 pm
Hej!

Jag gjorde om koden i dit problem lite. Var det meningen att knapp2 skulle göra Reset?
I vilket fall så blev det så här:
KnappA tänder Led1 i läget då KnappA trycks in. Det finns ett värde hur länge knappen "får" vara intryckt innan den känner av att man trycker på knappen igen, variabeln debounce. Detta för att få bort lite störningar när inputen går från Low till High.
Trycker man gång nr 2 så släcks Led1 och tänder Led2.
Om KnappB trycks in så gör man reset och slänger både Led1 och Led2.

På Uno-kortet så kan man använd Interrupt på pin 2 (pin 2 = interrupt 0) och 3 (pin 3 = interrupt 1) . Dvs gör något när knappen trycks in eller ändrar från High till Low osv. RISING är att ingången ändrar från Low till High. Här finns info om attachInterrupt och hur det fungerar http://arduino.cc/en/Reference/AttachInterrupt
Genom att använda interrupt på knapparn så blir renare kod i loop-metoden för annan logik som körs helatiden.


Code:
int buttonAPin = 2;    // button A pin number (interrupt 0)
int buttonBPin = 3;    // button B pin number (interrupt 1)

int ledAPin = 12;      // led A pin number
int ledBPin = 13;      // led A pin number

volatile long time = 0; // the last time the output pin was toggled
long debounce = 400; // the debounce time, increase if the output flickers

volatile byte lastCount = 0; // 0 to 255

void setup() {
  pinMode(ledAPin, OUTPUT);
  pinMode(ledBPin, OUTPUT);
 
  // Arduino Uno interrupt setting:
  attachInterrupt(0, onButtonAPress, RISING);
  attachInterrupt(1, reset, RISING);
}

void loop() {
  // Do something else here.
}

void toggleLed() {
  switch (lastCount % 2 == 0) {
    case 0:
digitalWrite(ledAPin, HIGH);
digitalWrite(ledBPin, LOW);
      break;
    case 1:
digitalWrite(ledAPin, LOW);
digitalWrite(ledBPin, HIGH);
      break;
    default:
      digitalWrite(ledAPin, LOW);
digitalWrite(ledBPin, LOW);
  }
}

void onButtonAPress() {
  if (millis() - time > debounce) {
if (lastCount == 255)
lastCount = 0;
else
lastCount++;
time = millis();
}
toggleLed();
}

void reset() {
if (millis() - time > debounce) {
lastCount = 0;
digitalWrite(ledAPin, LOW);
digitalWrite(ledBPin, LOW);
time = millis();
}
}


Mvh
Dan
2  Using Arduino / Displays / Re: 2.4 tft lcd touch shield no response when touching screen on: March 10, 2013, 07:18:24 pm
Hi,

I'm also using the Arduino 2.4" TFT LCD Touch shield and by reviewing the product specification I use another pin setup.
(The TFT driver is based on S6D112 with 8bit data and 4bit control interface)

The pin mapping with Arduino Uno R3 board that I use is:

Code:
#define TOUCH_ORIENTATION  PORTRAIT // If ribbon cable is on the short side the set orientation equal to PORTRAIT.

#define T_CLK 15   //Touch_CLK
#define T_CS 17    //TFT_CS  (SD_CS on 10)
#define T_DIN 14   //Touch_Din
#define T_DOUT 8   //Touch_Dout
#define T_IRQ 9    //Touch_IRQ

// Arduino 2009/UNO - Arduino 2.4" TFT LCD Touch shield
UTFT       myGLCD(ITDB24E_8, 19, 18, 17, 16);
UTouch     myTouch(T_CLK, T_CS, T_DIN, T_DOUT, T_IRQ);


Br.
DS
Pages: [1]