Go Down

Topic: Millis() (Read 716 times) previous topic - next topic

Salvo1969

Guten Abend

ich habe eine frage ist es möglich mit Arduino 
wenn ich über einen switch  über eine taste
in meinen fall Taster1   auf Zb. case1: binn
einen  Zeit laufen lassen  unter 10000ms  soll
er auf LOW bleiben danach auf HIGH und nach
30000ms wieder auf LOW Gehen und sol danach
da auch bleiben und wen ich mit der taste auf case2:
wiederzurückkomme soll das ganze wiede passieren

danke  ich habe einen kleinen exsperiment gemacht
mi diesem sketch unten haber wen ich auf case1: binn
nach 10000ms geht er auf LOW


Code: [Select]
#include <Arduino.h>
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>


#define S1 41
#define S2 42


int Taster1=0 ;
int Pulsante2=0 ;

int counterP1=0;
int counterP2=0;


unsigned long Timer1 = 0;
unsigned long Timer2 = 0;

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


void setup()
{
  Serial.begin(9600);
  Serial.read();

   pinMode (Pulsante1,INPUT);
   pinMode (Pulsante2,INPUT);

}


void funzione_scambio()

{
     Taster1=digitalRead (S1);

 if (Taster1 ==HIGH)

{
 counterP1++;
if( counterP1>2)
counterP1 = 0;

}

 switch (counterP1)

{

case 0:

 lcd.begin(16, 2);
lcd.print (" case 0");



break;





case 1:
  lcd.begin(16, 2);
  lcd.print (" case 1");

 if (Timer1 == 0) {                    // timer1 non attivo
    Timer1 = millis();                    // parte ritardo accensione
    break;                                 // esci
  }

  if (Timer2 == 0) {                   // timer2 non attivo
    if (millis() - Timer1 > 10000) {  // ritardo accensione scaduto
  Serial.println("HIGH");
 // digitalWrite(pin, HIGH);
    }
    Timer2 = millis();
              // accensione LED
  }
  else {                                     // timer2 attivo
    if (millis() - Timer2 > 30000) {   // spegnimento LED
     Serial.println("LOW");
      //digitalWrite(pin, LOW);
      Timer1 = 0;
      Timer2 = 0;
    }
  }
  break;











case 2:
lcd.begin(16, 2);
lcd.print (" case 2");

break;



  }
}





void loop()
{
  funzione_scambio();
}

uwefed

Mir fällt auf daß Pulsante1 gar nicht definiert ist und Pulsante2 den Pin0 verwendet, der für das Upload des Sketches und die Verbindung über Serial zum PC notwendg ist.
Du definierst S1 nicht als Eingang.

Mit einem Arduino MEGA brauchst Du die SoftwareSerial nicht; der  hat 4 Serielle Hardware-Schnittstellen


CounterP1 zählt unkontrolliert hoch, denn er zählt solange der Taster gedrückt ist und nicht nur 1 mal bei jedem betätigen des Tasters.
siehe Beispiel 3 http://www.electroschematics.com/8964/turn-on-led-button-arduino/ ( der Taster wird auch entprellt).
oder
https://www.arduino.cc/en/tutorial/switch Aber gib einen Vorwiderstand in Reihe zum LED. Das Uraltmodel das verwendet wurde, könnte noch einen Widerstand auf Pin 13 gehabt haben.

was soll das "Serial.read();" im setup?


PS: C'é anche la parte italiana del forum.
Ciao Uwe

Go Up