41
* Main source file for the VirtualSerial demo. This file contains the main tasks of
42
* the demo and is responsible for the initial application hardware configuration.
41
* Main source file for the VirtualSerial demo. This file contains the main
42
* tasks of the demo and is responsible for the initial application hardware
45
46
#include "VirtualSerial.h"
46
47
#include "wiring.h"
48
/** LUFA CDC Class driver interface configuration and state information. This structure is
49
* passed to all CDC Class driver functions, so that multiple instances of the same class
50
* within a device can be differentiated from one another.
49
/** LUFA CDC Class driver interface configuration and state information. This
50
* structure is passed to all CDC Class driver functions, so that multiple
51
* instances of the same class within a device can be differentiated from one
52
54
USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
78
/** Standard file stream for the CDC interface when set up, so that the virtual CDC COM port can be
79
* used like any regular character stream in the C APIs
80
/** Standard file stream for the CDC interface when set up, so that the virtual
81
* CDC COM port can be used like any regular character stream in the C APIs
81
83
static FILE USBSerialStream;
84
86
#define BUTTON 0b10000000
85
87
#define LEDB 0b00100000
88
#define RELAY 0b00000010
89
// set PD7 (button) to input
92
// set PD7 (button) to input and enable pull-up
92
// enable pull-up on PD7 (button)
95
96
// set PD5 (ledb) to output
99
// set PB1 (relay) to output
101
static bool sent = false;
103
// if PD7 is low, we have a press!
109
fprintf( &USBSerialStream, "%lu\r\n", millis() );
110
// fputs( "press\r\n", &USBSerialStream );
105
// debounce button (PD7)
106
static int button_state = 0;
107
static int saved_button_state = 0;
108
static int saved_since = 0;
109
unsigned long now = millis();
110
unsigned long real_button_state = PIND & BUTTON;
111
if( saved_button_state != real_button_state ) {
112
saved_button_state = real_button_state;
115
else if( saved_button_state != button_state &&
116
now - saved_since > 25 )
118
button_state = saved_button_state;
121
// on rising edge of press, set toggle
122
static int last_button_state = 0;
124
if( last_button_state != button_state )
126
last_button_state = button_state;
127
if( !button_state ) toggle = true;
132
static bool relay_state = false;
135
relay_state = !relay_state;
126
/** Main program entry point. This routine contains the overall program flow, including initial
127
* setup of all components and the main program loop.
152
/** Main program entry point. This routine contains the overall program flow,
153
* including initial setup of all components and the main program loop.
133
/* Create a regular character stream for the interface so that it can be used with the stdio.h functions */
159
/* Create a regular character stream for the interface so that it can be
160
* used with the stdio.h functions */
134
161
CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream);
136
163
LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
143
/* Must throw away unused bytes from the host, or it will lock up while waiting for the device */
170
/* Must throw away unused bytes from the host, or it will lock up while
171
* waiting for the device */
144
172
CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
146
174
CDC_Device_USBTask(&VirtualSerial_CDC_Interface);