Go Down

Topic: ¿Como puedo añadir un led usando el mismo pulsador a este codigo? (Read 253 times) previous topic - next topic

Rafagar

Oct 06, 2018, 12:41 am Last Edit: Oct 06, 2018, 01:26 am by surbyte Reason: Agregado de etiquetas de código/error
Buenas noches. Tengo el siguiente código y quiero añadirle un led, para que cuando pulse el botón (pin 10) se encienda y en cuanto suelte el botón se apague, como un pulsador. ¿Alguien me echa una mano? Gracias por adelantado!


Code: [Select]

#include <Wire.h>
#include <LiquidCrystal.h>

#define SLEUTEL 10  
#define BUZZER 8  

LiquidCrystal lcd(7,6,5,4,3,2);

void setup() {
 pinMode(SLEUTEL, INPUT_PULLUP);
 pinMode(BUZZER, OUTPUT);
 Serial.begin(115200);
 lcd.begin(16,2);
     
}

float StreepDuur = 200.0;
boolean PrevS = false;
long tStartTeken, tStartPauze;
boolean S;
String kar = "";
void loop() {
 S = !digitalRead(SLEUTEL);

 if (S) {
   if (S != PrevS) {
     tStartTeken = millis();
     DecodeerPauze(tStartPauze);
   }
   digitalWrite(BUZZER, HIGH);
 }
 else {
   if (S != PrevS) {
     tStartPauze = millis();
     Decodeer(tStartTeken);
   }
   digitalWrite(BUZZER, LOW);
 }

 if (abs(millis() - tStartPauze) > StreepDuur * 10) {
   DecodeerPauze(tStartPauze);
 }

 PrevS = S;
}

void Decodeer(long starttijd) {
 char teken = '?';
 long tijd = abs(millis() - starttijd);
 float PuntDuur = StreepDuur / 3.0;

 if (tijd <= 4) return;

 if (tijd <= PuntDuur) teken = '.';
 else if (tijd > StreepDuur) teken = '-';
 else if ((tijd > (StreepDuur + PuntDuur) / 0.3) && tijd <= StreepDuur) teken = '-';
 else teken = '.';

 if (teken == '-') {
   if (tijd > StreepDuur) StreepDuur++;
   if (tijd < StreepDuur) StreepDuur--;
 }
 else if (teken == '.') {
   if (tijd > StreepDuur / 3.0) StreepDuur++;
   if (tijd < StreepDuur / 3.0) StreepDuur--;
 }
 kar += teken;
 //Serial.println(teken);
}

void DecodeerPauze(long starttijd) {
 if (kar == "") return;

 char teken = '?';
 long tijd = abs(millis() - starttijd);
 if (tijd > StreepDuur - StreepDuur / 40) {
   DecodeerKar();
   //Serial.print();
 }
 if (tijd > StreepDuur * 10) {
   DecodeerKar();
   Print(" "); Serial.print(" ");
 }
 //else DecodeerKar();
 //Serial.println(teken);
}

void DecodeerKar() {
 static String letters[] = {
   ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-",
   ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "E"
 };
 int i = 0;
 while (letters[i] != "E") {
   if (letters[i] == kar) {
     Print((char)('A' + i));
     Serial.print((char)('A' + i));
     break;
   }
   i++;
 }
 if (letters[i] == "E") {
   Print(kar);
   Serial.print(kar);
 }
 kar = "";
}

int y = 0, x = 0;
void Print(String &s) {
 for (int i = 0; i < s.length(); i++) {
   upd();
   lcd.print(s[i]);
 }
}
void Print(char s) {
 upd();
 lcd.print(s);
}
void Print(char *s) {
 for (int i = 0; i < strlen(s); i++) {
   upd();
   lcd.print(s[i]);
 }
}

void upd() {
 lcd.setCursor(x, y);
 x++; if (x >= 20) {
   x = 0;
   y++;
 }
 if (y >= 4) {
   lcd.clear();
   x=y = 0;    
 }
}

Rafagar

Tienes razón,  uno de mis mayores defectos   es pecar de impaciente. Fue tan   facil hacerlo que ayer   por la noche lo hice (añadir el led). Supongo que estoy queriendo aprender programacion desde un punto de partida erroneo. Lejos de parecerme borde tu comentario te lo agradezco, pues me sirve para ver que no voy por el camino que deberia. Un saludo.

Go Up