como é que eu faço de maneira a que, por exemplo ao clicar num botao, acende me um led e mostra no display o numero, e ao mesmo tempo queria que aparecesse uma mensagem no coolterm.
ao contrario já fiz num outro trabalho.
#define OE2 8 //Atribui valor do nome constante ao pino digital 8
#define OE1 7 //Atribui valor do nome constante ao pino digital 7
#define LE2 10 //Atribui valor do nome constante ao pino digital 10
#define LE1 9 //Atribui valor do nome constante ao pino digital 9
#define Clear 11 //Atribui valor do nome constante ao pino digital 11
#define SClk 12 //Atribui valor do nome constante ao pino digital 12
#define SData 13 //Atribui valor do nome constante ao pino digital 13
#define FOSC 16000000 //clock speed
#define BAUD 9600 //taxa de transmissao
#define MYUBRR FOSC/16/BAUD-1 //
#define CR 13
void USART_Init(unsigned int ubrr){ // definir taxa de transmissão
UBRR0H = (unsigned char)(ubrr>>8);
UBRR0L = (unsigned char) ubrr; // Ativar receptor e transmissor
UCSR0B = (1<<RXEN0)|(1<<TXEN0); // Definir o formato do quadro: 8 dados, bit de 2 paradas
UCSR0C = (1<<USBS0)|(3<<UCSZ00);
}
byte auxiliar = 0;
byte contagem = 0; // Definição e inicialização a zero da variável contagem
const int LED0 = 4;
const int LED1 = 5;
const int LED2 = 6;
int LED0state = HIGH;
int LED1state = HIGH;
int LED2state = HIGH;
#define Key0 A2
byte buttonState = 0;
byte lastbuttonState = 0;
#define Key1 A3
byte buttonState1 = 0;
byte lastbuttonState1 = 0;
#define Key2 A4
byte buttonState2 = 0;
byte lastbuttonState2 = 0;
unsigned long lastDebounceTime = 0; // the last time the output pin was toggled
unsigned long debounceDelay = 20; // the debounce time; increase if the output flickers
unsigned long lastDebounceTime1 = 0; // the last time the output pin was toggled
unsigned long debounceDelay1 = 20; // the debounce time; increase if the output flickers
unsigned long lastDebounceTime2 = 0; // the last time the output pin was toggled
unsigned long debounceDelay2 = 20; // the debounce time; increase if the output flickers
void setup() {
USART_Init(MYUBRR);
pinMode(Key0,INPUT);
pinMode(Key1,INPUT);
pinMode(Key2,INPUT);
pinMode(OE2,OUTPUT); //configuracao do pino digital OE2 como saída
pinMode(OE1,OUTPUT); //configuracao do pino digital OE1 como saída
pinMode(LE2,OUTPUT); //configuracao do pino digital LE2 como saída
pinMode(LE1,OUTPUT); //configuracao do pino digital LE1 como saída
pinMode(Clear,OUTPUT); //configuracao do pino digital Clear como saída
pinMode(SClk,OUTPUT); //configuracao do pino digital SClk como saída
pinMode(SData,OUTPUT); //configuracao do pino digital SData como saída
digitalWrite(LE1, LOW);
digitalWrite(OE1,HIGH); //Desativa o display OE1 com valor lógico 1
digitalWrite(OE2,HIGH);
digitalWrite(Clear, OUTPUT);
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
noInterrupts(); //disable all interrupts
TCCR1A = B00000000; //registo do modo de operação - normal
TCCR1B = B00000011; //registo da fonte de clk interna com div 64
TCCR1C = B00000000; //registo de ativação por interrupção do Timer1
TCNT1 = 53036; // tempo de configuração do Timer 1 (53ms)
TIMSK1 = B00000001; //registo da ativação das interrupções do timer1
interrupts(); //ativa todas as interrupções
}
volatile byte Counter50ms = 0; //variável qualificadora, que é usada para modificar a forma como o compilador trata a variável
volatile byte Counter50ms1 = 0; //variável qualificadora, que é usada para modificar a forma como o compilador trata a variável
volatile byte Counter50ms2 = 0; //variável qualificadora, que é usada para modificar a forma como o compilador trata a variável
ISR(TIMER1_OVF_vect){
TCNT1 = 53036; // tempo de configuração do Timer 1 (50ms)
Counter50ms++; // variável de contagem
Counter50ms1++; //variável de contagem
Counter50ms2++; //variável de contagem
}
void loop() {
if(auxiliar == 0){
EnviarString();
byte auxiliar = USART_Receive(); // atribuição da variavel
Display7Seg(auxiliar-48);
}
buttonState = digitalRead(Key0);
buttonState1 = digitalRead(Key1);
buttonState2 = digitalRead(Key2);
if(buttonState != lastbuttonState){
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (buttonState != lastbuttonState) {
lastbuttonState = buttonState;
if (buttonState == HIGH) {
contagem++;
digitalWrite(LED0,HIGH);
Counter50ms = 0;
Display7Seg(contagem);
}
}
}
if(buttonState1 != lastbuttonState1){
lastDebounceTime1 = millis();
}
if ((millis() - lastDebounceTime1) > debounceDelay1) {
if (buttonState1 != lastbuttonState1) {
lastbuttonState1 = buttonState1;
if (buttonState1 == HIGH) {
contagem--;
digitalWrite(LED1,HIGH);
Counter50ms1 = 0;
Display7Seg(contagem);
}
}
}
if(buttonState2 != lastbuttonState2){
lastDebounceTime2 = millis();
}
if ((millis() - lastDebounceTime2) > debounceDelay2) {
if (buttonState2 != lastbuttonState2) {
lastbuttonState2 = buttonState2;
if (buttonState2 == HIGH) {
digitalWrite(OE2,HIGH);
digitalWrite(LE2,LOW);
shiftOut(13, 12, MSBFIRST, 0x86);
digitalWrite(OE2,LOW); //Ativa output enable com valor Low
digitalWrite(LE2,HIGH);
digitalWrite(LED0,HIGH);
digitalWrite(LED1,HIGH);
delay(1000);
digitalWrite(LED0,LOW);
digitalWrite(LED1,LOW);
delay(1000);
Counter50ms2 = 0;
}
}
}
lastbuttonState = buttonState;
lastbuttonState1 = buttonState1;
lastbuttonState2 = buttonState2;
if(Counter50ms == 50){
digitalWrite(LED0,LOW);
Counter50ms = 0;}
if(Counter50ms1 == 50){
digitalWrite(LED1, LOW);
Counter50ms1 = 0;}
if(Counter50ms2 == 20){
digitalWrite(LED2, LOW);
Counter50ms2 = 0;}
}
void USART_Transmit( unsigned char data ){
// Aguarda o buffer de transmissão vazio
while ( !( UCSR0A & (1<<UDRE0)) );
// Coloca dados no buffer, envia os dados
UDR0 = data;
}
unsigned char USART_Receive( void ){
//Aguarda a data ser recebida
while ( !(UCSR0A & (1<<RXC0)) );
//Obter e retornar dados recebidos do buffer
return UDR0;
}
void EnviarString(){
char string1[51] = "OLA CLICA ENTRE 0 E 9 PARA APARECER NO DISPLAY"; // criação da mensagem
byte i; // função que armazena os bytes de i
for(i=0;i<51;i++){ // criação da rotina
USART_Transmit(string1[i]); // chamar a função string
}
USART_Transmit(13); // da reset à posiçao do texto
USART_Transmit(10); // indica o fim de uma linha de texto e da incio a uma nova
}
void Display7Seg(byte valor){
digitalWrite(OE2,HIGH);
digitalWrite(LE2,LOW);
digitalWrite(Clear, HIGH);
if(valor == 0) shiftOut(13, 12, MSBFIRST, 0xC0); //Mostra o número 0 no display
if(valor == 1) shiftOut(13, 12, MSBFIRST, 0xF9); //Mostra o número 1 no display
if(valor == 2) shiftOut(13, 12, MSBFIRST, 0xA4); //Mostra o número 2 no display
if(valor == 3) shiftOut(13, 12, MSBFIRST, 0xB0); //Mostra o número 3 no display
if(valor == 4) shiftOut(13, 12, MSBFIRST, 0x99); //Mostra o número 4 no display
if(valor == 5) shiftOut(13, 12, MSBFIRST, 0x92); //Mostra o número 5 no display
if(valor == 6) shiftOut(13, 12, MSBFIRST, 0x82); //Mostra o número 6 no display
if(valor == 7) shiftOut(13, 12, MSBFIRST, 0xF8); //Mostra o número 7 no display
if(valor == 8) shiftOut(13, 12, MSBFIRST, 0x80); //Mostra o número 8 no display
if(valor >= 9) shiftOut(13, 12, MSBFIRST, 0xC7); //Mostra o número 9 no display
digitalWrite(OE2,LOW); //Ativa output enable com valor Low
digitalWrite(LE2,HIGH); //Ativa RCLK Input Com valor High
}
a parte que deve ser para alterar é na zona do void loop onde está "enviarstring" juntamente com a variavel auxiliar.