Añadir leds a gps neo 6m.

Muy buenas compañeros/as solicito que alguien gustosamente me pueda añadir tres leds a mi código gps da igual la función no hace falta ir a la par con nada solo que se encienda uno,otro se apague y otro se encienda paulatinamente los tres,es decir tipo semáforo… no entiendo mucho de programación y haceindolo yo viendo varios tutoriales/videos lo hice y el resultado fue que queme mi Neo 6m e tenido que comprar otro neo 6m ¿por favor alguien me puede ayudar? mas que nada contribuiría en mi economía en no tirar el dinero y si en aprender algo mas.

Gracias de antemano.

este es el código solo del gps:

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);  // 4x20 LCD on I2C

TinyGPSPlus gps;

SoftwareSerial ss(8, 9);  //Tx/Rx

void setup()
{
  Serial.begin(115200);
  ss.begin(9600); //default baudrate for EM406
  lcd.init();
  lcd.backlight();
  Serial.println("Starting ..."); //debug
}

void loop()
{
  // This sketch displays information every time a new sentence is correctly encoded.
  while (ss.available() > 0)
    if (gps.encode(ss.read()))
      displayLCD();

  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println("No GPS detected: check wiring");
    while(true);
  }
}

void displayLCD()
{    
    lcd.setCursor(0, 0);
    lcd.print("Lat: ");                ///////// Lat
    lcd.print(gps.location.lat(), 6);
    
    lcd.setCursor(0, 1);
    lcd.print("Lon: ");                 ///////// Long
    lcd.print(gps.location.lng(), 6);
    
    lcd.setCursor(0, 2);
    lcd.print("Spd: ");              ///////// Speed
    lcd.print(gps.speed.kmph());
    
    lcd.setCursor(11, 2);
    lcd.print("Hdop: ");              ///////// Hdop - Horizontal Dim. of Precision
    lcd.print(gps.hdop.value());
        
    lcd.setCursor(0, 3);
    lcd.print("Alt: ");               ///////// Altitude
    lcd.print(gps.altitude.meters());
    
    lcd.setCursor(11, 3);
    lcd.print("Sat: ");               ///////// Satellite
    lcd.print(gps.satellites.value()), 2;
    
}

Entiendo que los leds, los colocarás en pines del arduino. De ser así, no entiendo cómo se puede quemar el GPS...

Dicho esto, no sería más añadir al código una "versión ampliada" a tres leds del "blink without delay"

Al meterle un codigo que tengo,void loop con void loop y void setup en void setup lel codigo era para hacer semaforo,los leds se quedaron fijos y el gps se quedo sin papardear y ya no funciona aun asi le meti en 5 v,leyendo e visto que el gps va a 3,5 v aun asi ya no hace nada el gps ni coje nada de nada,solo pido que no me vuelva a suceder y no la lie otra vez.

este es el código que le meti:

void setup() {
   pinMode (2,OUTPUT);
   pinMode (3,OUTPUT);
   pinMode (4,OUTPUT);
   digitalWrite(3,HIGH);
   digitalWrite (4,HIGH);
  digitalWrite (2,HIGH);
 }
 void loop() {
   digitalWrite (2,LOW);
   delay (4000);
   digitalWrite (2,HIGH);
   for (int cuenta = 0;cuenta <5;cuenta++)
   {
     digitalWrite (3,LOW);
     delay (1000);
     digitalWrite (3,HIGH);
     delay (200);
    }
   digitalWrite (4,LOW);
   delay (6000);
   digitalWrite (4,HIGH);
   delay (6000);

 
 }

Bueno, yo diria que el problema ha sido alimentarlo a 5v, cuando debe alimentarse a 3,3v, no por culpa de los leds. Habría que mirar qué módulo tienes, ya que el que yo uso, lleva un regulador y puede alimentarse a 5v sin problemas.

Por otro lado, esos delays, son fatales si quieres usar un gps.

Gracias carmeloco,ya sabes que ando haciendo mis primeros proyectos en arduino y es lo que encuentro,pruebo veo y pummm! es lo que tiene meterte de bombero cuando eres albañil.

Entonces que tipo de código me aconsejas o de donde puedo sacar un código de leds en condiciones?

Gracias por tu paciencia.

BlinkWithoutDelay.ino

const byte ledPin1 =  13;      // the number of the LED pin

// Variables will change :
int ledState = LOW;             // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change :
const long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

Gracias por el aporte surbyte e estado investigando un poco y e metido 4 leds al código,ahora lo que no se hacer es que haga apagar encender uno d etras de otro,pues se apagan y encienden los cuatro a la vez con el delay si sabia hacerlo pero con millis estoy empezando a toquetearlo,agradeceria una pista/ayuda mas.

Gracis por ser tan pacientes.

este es el código que e generado con los cuatros leds:

const byte ledPin1 =  13;      // the number of the LED pin

// Variables will change :
int ledState = LOW;             // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change :
const long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(13, OUTPUT);
    pinMode(12, OUTPUT);
      pinMode(11, OUTPUT);
        pinMode(10, OUTPUT);
}

void loop()
{
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    // set the LED with the ledState of the variable:
    digitalWrite(13, ledState);
      digitalWrite(12, ledState);
        digitalWrite(11, ledState);
          digitalWrite(10, ledState);
  }
}

No lo tomes como una burla porque no lo es pero tienes dos caminos:

  1. Investiga mas pero creo que no vale la pena.
  2. Estudia arduino y programación. Vas a Documentación y los dos primeros post corresponden a un muy buen curso.
    También hay libros sugeridos y todo tipo de tutoriales. Yo que tu, me los consumo todos y luego sigué con esto.

De todas maneras si alguien quiere hacerte el programa bien.
Lo que debes hacer es una máquina de estados:
Tu estado va cambiando de 0 hasta el último cuando se cumpla se vuelve a comenzar por el primero.
Imagina que estado es un contador, que va 0..1..2..3..4...... n donde n es el último.
Ahora como pasas de 0 a 1, de acuerdo a una tarea y a que dicha tarea se cumpla.

No te lo iba a hacer pero ... acá esta

Lo demás ya sabes, sigue los tutoriales y aprende

#define INTERVALO 1000

const byte Led1     = 10;
const byte Led2     = 11;
const byte Led3     = 12;
const byte Led4     = 13;

// Variables will change :
int ledState = LOW;             // ledState used to set the LED

unsigned long previousMillis = 0;        // will store last time LED was updated

byte estado = 0;
unsigned long currentMillis;

void setup() {
  // set the digital pin as output:
  pinMode(Led1, OUTPUT);
  pinMode(Led2, OUTPUT);
  pinMode(Led3, OUTPUT);
  pinMode(Led4, OUTPUT);
  currentMillis = millis();
}

void loop() {
   
  switch (estado) {
      case 0: Leds(1,0,0,0);  // Esto activa led1 y apaga los demas
              if (millis() - currentMillis > INTERVALO)    // cuando se cumple el intervalo pasan dos cosas
                  estado = 1;                              // cambio de estado
              break;
      case 1: Leds(0,1,0,0);                               // Esto activa led2 y apaga los demas
              if (millis() - currentMillis > INTERVALO)    // cuando se cumple el intervalo pasan dos cosas
                  estado = 2;                              // cambio de estado
              break;
      case 2: Leds(0,0,1,0);                               // Esto activa led3 y apaga los demas
              if (millis() - currentMillis > INTERVALO)    // cuando se cumple el intervalo pasan dos cosas
                  estado = 3;                              // cambio de estado
              break;        
      case 3: Leds(0,0,0,1);                               // Esto activa led4 y apaga los demas
              if (millis() - currentMillis > INTERVALO)    // cuando se cumple el intervalo pasan dos cosas
                  estado = 1;                              // cambio de estado
              break;                    
      case 4: Leds(0,0,0,0);                               // Esto apaga todos. SI no te gusta en el anterior pasa al estado 0
              if (millis() - currentMillis > INTERVALO)    
                  estado = 0;                              
              break;
  }
}
    
void Leds(byte Valor1, byte Valor2, byte Valor3, byte Valor4) {

  digitalWrite(Led1, Valor1); 
  digitalWrite(Led2, Valor2); 
  digitalWrite(Led3, Valor3); 
  digitalWrite(Led4, Valor4);
}

Gracias seguire tus consejos surbyte,una sola duda e estado mirando los tutoriales y no veo nada referente a millis,el código que me has echo el cual te agradesco se quedan los les fijos y por mas que e estado indagando no doy donde cambiar los valores para hacer el tipo semáforo,agradesco la ayuda de cualquiera de vosotros please quiero terminar mi proyecto al menos el código hasta que me llegue el gps nuevo.

Gracias a todos.

Hay uno hecho por Max_saeta, pero ya debe estar 4 o 5 paginas atras.

Funcion Millis() traducción del trabajo de Nick Gammon