I have some code that works for a 3.5, but I cant get it to compile for a Teensy++ 2.0. Am I doing something wrong, or does the ++ 2.0 not support something that the 3.5 does??
Error
My code:
Error
Code:
test_multi_debounce: In function 'void check_switches()':
test_multi_debounce:86: warning: comparison between signed and unsigned integer expressions
if (millis() < lasttime) {
~~~~~~~~~^~~~~~~~~~
test_multi_debounce:90: warning: comparison between signed and unsigned integer expressions
if ((lasttime + DEBOUNCE) > millis()) {
~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S: Assembler messages:
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:64: Error: unknown pseudo-op: `.syntax'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:66: Error: unknown pseudo-op: `.thumb'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:69: Error: unknown pseudo-op: `.thumb_func'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:71: Error: unknown opcode `cpsid'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:73: Error: unknown opcode `b'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:76: Error: unknown pseudo-op: `.thumb_func'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:78: Error: unknown opcode `cpsid'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:80: Error: unknown opcode `b'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:83: Error: unknown pseudo-op: `.thumb_func'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:85: Error: unknown opcode `cpsid'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:86: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:87: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:88: Error: unknown opcode `movs'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:89: Error: unknown opcode `str'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:90: Error: unknown opcode `b'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:93: Error: unknown pseudo-op: `.thumb_func'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:98: Error: unknown opcode `cpsid'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:104: Error: unknown opcode `cmp'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:105: Error: unknown opcode `beq'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:106: Error: unknown opcode `cmp'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:107: Error: unknown opcode `beq'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:112: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:113: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:114: Error: unknown opcode `cmp'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:115: Error: unknown opcode `beq'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:116: Error: bad expression
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:116: Error: garbage at end of line
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:117: Error: unknown opcode `str'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:118: Error: unknown opcode `b'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:123: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:124: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:125: Error: unknown opcode `cmp'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:126: Error: unknown opcode `bne'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:134: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:135: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:136: Error: unknown opcode `stmia'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:147: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:148: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:149: Error: unknown opcode `cmp'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:150: Error: unknown opcode `bne'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:151: Error: unknown opcode `mrs'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:152: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:153: Error: unknown opcode `str'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:156: Error: unknown opcode `bl'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:159: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:160: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:161: Error: unknown opcode `ldmia'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:171: Error: constant value required
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:171: Error: constant value required
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:171: Error: garbage at end of line
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:172: Error: unknown opcode `orr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:173: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:174: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:175: Error: unknown opcode `cmp'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:176: Error: unknown opcode `bne'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:178: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:179: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:180: Error: unknown opcode `msr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:181: Error: unknown opcode `orr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:185: Error: unknown opcode `cpsie'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:187: Error: unknown opcode `bx'
Error compiling for board Teensy++ 2.0.
My code:
Code:
#include <Arduino.h>
#include "TeensyThreads.h"
const int LED = 11;
volatile int blinkcode = 0;
#define DEBOUNCE 10 // how many ms to debounce, 5+ ms is usually plenty
//define the buttons that we'll use.
byte buttons[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
//determine how big the array up above is, by checking the size
#define NUMBUTTONS sizeof(buttons)
//track if a button is just pressed, just released, or 'currently pressed'
byte pressed[NUMBUTTONS], justpressed[NUMBUTTONS], justreleased[NUMBUTTONS];
byte previous_keystate[NUMBUTTONS], current_keystate[NUMBUTTONS];
void setup() {
byte i;
Serial.begin(57600); //set up serial port
Serial.print("Button checker with ");
Serial.print(NUMBUTTONS, DEC);
Serial.println(" buttons");
// Make input & enable pull-up resistors on switch pins
for (i=0; i< NUMBUTTONS; i++) {
pinMode(buttons[i], INPUT);
digitalWrite(buttons[i], HIGH);
}
pinMode(LED, OUTPUT);
threads.addThread(blinkthread);
}
// for blink
int count = 0;
void loop() {
count++;
blinkcode = count;
delay(1000);
Serial.println(count);
byte thisSwitch=thisSwitch_justPressed();
switch(thisSwitch)
{
case 0:
pressButton(1);
Serial.println("switch 1 just pressed"); break;
case 1:
pressButton(2);
Serial.println("switch 2 just pressed"); break;
case 2:
pressButton(3);
Serial.println("switch 3 just pressed"); break;
case 3:
pressButton(4);
Serial.println("switch 4 just pressed"); break;
case 4:
pressButton(5);
Serial.println("switch 5 just pressed"); break;
case 5:
pressButton(5);
Serial.println("switch 6 just pressed"); break;
}
}
void pressButton(int myButton){
Joystick.button(myButton, 1);
delay(50);
Joystick.button(myButton, 0);
}
void check_switches()
{
static byte previousstate[NUMBUTTONS];
static byte currentstate[NUMBUTTONS];
static long lasttime;
byte index;
if (millis() < lasttime) {
// we wrapped around, lets just try again
lasttime = millis();
}
if ((lasttime + DEBOUNCE) > millis()) {
// not enough time has passed to debounce
return;
}
// ok we have waited DEBOUNCE milliseconds, lets reset the timer
lasttime = millis();
for (index = 0; index < NUMBUTTONS; index++) {
justpressed[index] = 0; //when we start, we clear out the "just" indicators
justreleased[index] = 0;
currentstate[index] = digitalRead(buttons[index]); //read the button
if (currentstate[index] == previousstate[index]) {
if ((pressed[index] == LOW) && (currentstate[index] == LOW)) {
// just pressed
justpressed[index] = 1;
}
else if ((pressed[index] == HIGH) && (currentstate[index] == HIGH)) {
justreleased[index] = 1; // just released
}
pressed[index] = !currentstate[index]; //remember, digital HIGH means NOT pressed
}
previousstate[index] = currentstate[index]; //keep a running tally of the buttons
}
}
byte thisSwitch_justPressed() {
byte thisSwitch = 255;
check_switches(); //check the switches & get the current state
for (byte i = 0; i < NUMBUTTONS; i++) {
current_keystate[i]=justpressed[i];
if (current_keystate[i] != previous_keystate[i]) {
if (current_keystate[i]) thisSwitch=i;
}
previous_keystate[i]=current_keystate[i];
}
return thisSwitch;
}
void blinkthread() {
while(1) {
if (blinkcode) {
for (int i=0; i<blinkcode; i++) {
digitalWrite(LED, HIGH);
threads.delay(150);
//digitalWrite(LED, LOW);
threads.delay(150);
}
blinkcode = 0;
}
threads.yield();
}
}