Arduino – die besten Beiträge

mehrere Funktionen mit einem Taster ausführen?

Hallo

Ich möchte, dass ich wenn ich den Taster 1x drücke, die LEDs Weiss sind und wenn ich ihn 2x drücke, dass sie z.B. Blau sind. Wie kann ich so etwas machen?

Ich habe den Code, damit sie weiss sind schon einmal. Doch wie kann ich bei 2x drücken eine Funktion ausführen?



#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif




int tasterPin = 5; //taster an pin5






#define PIN        4 // An welchem Pin ist die LED angeschlossen


#define NUMPIXELS 60 // Anzahl LEDs




Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);


#define DELAYVAL 30 // Definiert, dass die Variabel DELAYVAL 30millisekunden pause bedeutet




void setup() {


  //
  Serial.begin(115200);
  Serial.println();
  Serial.println("ESP gestartet");


  pinMode(tasterPin, INPUT_PULLUP);
  //




  //einstellungen für LEDs
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  // nur, falls man eine externe energiequelle hat


  pixels.setBrightness(255); // Helligkeit auf 50 - höchster wert : 255
  pixels.begin();
}
//einstellungen für LEDs ende


void loop() {




  if (digitalRead(tasterPin) == LOW) {
    Serial.println("Status: Taster Gedrückt");
    Serial.println("Effekt wird abgespielt...");
    delay(100);


    pixels.clear(); // Schaltet alle Pixel auf "OFF"


    for (int i = 0; i < NUMPIXELS; i++) { // Für jede LED...


      //Das ist ein RGB LED streifen das R steht für ROT G = Grün und B = Blau
      pixels.setPixelColor(i, pixels.Color(255, 255, 255));


      pixels.show();   // Sendet die geänderten LED farben zum LED Streifen (neue Farbe)


      delay(DELAYVAL); //pause
    } //...


    //
    delay(30000); //30000 Millisekunden weiss (wartet 10000 Millisekunden)
    //


    for (int i = 0; i < NUMPIXELS; i++) { // Für jede LED...


      pixels.setPixelColor(i, pixels.Color(0, 0, 0));


      pixels.show();


      delay(DELAYVAL); // Pause bevor es neu startet


    }


  } else {
    Serial.println("Status: Taster nicht Gedrückt");
    delay(100);
  }




}//...

Danke für die Antworten :)

LG

Computer, Technik, Elektronik, programmieren, Arduino, Technologie, taster, ESP8266, Spiele und Gaming, Arduino IDE

Arduino integer mit binärem Wert in decimal umwandeln?

// Probleme wurden gelöst. Teil des Problems war dass ich den Chip außversehen nach dem umprogrammieren eine Reihe zu weit nach Oben gemacht habe... Leichtsinnsfehler... :)

Hallo. Bin gerade an einem Projekt bei dem ich LED's mit einem 8Bit shift register zum leuchten bringen will.

1 bedeutet leuchten und 0 bedeutet aus.

Jetzt will ich einen Wert wie "10000001" angeben können und die LED's werden direkt so eingeschalten wie es im int aussieht.

Gerade im Moment probiere ich es so zu lösen dass ich der ShiftOut Funktion den decimalen Wert gebe welche diese dann wieder in decimal umwandelt und raus schiebt:

  int bits = 10000001;

  digitalWrite(latchPin, LOW);
  //Binary to decimal Versuch
  int decimal =
  (((bits / 10000000U) % 10) * 128)
  + (((bits / 1000000U) % 10) * 64)
  + (((bits / 100000U) % 10) * 32)
  + (((bits / 10000U) % 10) * 16)
  + (((bits / 1000U) % 10) * 8)
  + (((bits / 100U) % 10) *4)
  + (((bits / 10U) % 10) *2)
  + ((bits / 1U) % 10);

  shiftOut(dataPin, clockPin, MSBFIRST, decimal);

  digitalWrite(latchPin, HIGH);

Ich bin mir sicher dass man das wesentlich effizienter und schlauer lösen kann. Unter anderem funktioniert mein Code nicht mal... wenn ich ihn laufen lasse sind die LED's volgendermaßen angeschaltet: "00010000"...

Würde mich über Hilfe freuen und danke schon mal im Vorraus.

Liebe Grüße, Leo

Bild zum Beitrag
Computer, Technik, Programm, programmieren, Arduino, Code, Informatik, Technologie, binär, Integer, Spiele und Gaming

7 Segment anzeige Aktualisierrate ändern Arduino?

Hallo, ich baue ein Voltmeter mit esc steuerung und als anzeige verwende ich ein 7 Segment Display. Mein Problem ist, dass sich das Display zu schnell aktualisiert, so dass die Zahlen nicht lesbar sind.

Ich möchte das sich die Spannung jede sekunde aktualisiert und das display das ohne flackern anzeigt.

Vielen Dank im Vorraus!!

#include "SevSeg.h" ;
int sum = 0;          
unsigned char sample_count = 0; 
float voltage = 0.0;       
#include <Servo.h>
#define PIN_MOTOR 13
#define PIN_POTI A2
#define NUM_SAMPLES 10
SevSeg sevseg; 
Servo servo;
unsigned long startTime, delayTime = 1000; 
int val = 0;
void setup() 
{
  
  startTime = micros();
  servo.attach(PIN_MOTOR);
  servo.write(25); 
  delay(2000);
   
byte numDigits = 4; 
byte digitPins[] = {2, 3, 4, 5}; 
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 1}; 
sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins); 
}
void loop() 
{
sevseg.setNumber(voltage * 1132,2);
sevseg.refreshDisplay();
sevseg.setBrightness(90); 
while (sample_count < NUM_SAMPLES) {
    sum += analogRead(A0);
    sample_count++;
     
    
     
  }
   
  voltage = ((float)sum / (float)NUM_SAMPLES * 5.015) / 1024.0;
   
  Serial.print(voltage * 11.132);
  Serial.println (" V");
  sample_count = 0;
  sum = 0;
   
   
  if ((millis() - startTime) >= delayTime){
    val = map(analogRead(PIN_POTI), 0, 676, 30, 110);
    servo.write(val);
    Serial.println(val);
    startTime = micros();
  }  }

https://www.youtube.com/watch?v=1zuE3fo1_lQ

Technik, Arduino

Arduino if Bedinung mit 2 Werten ?

ich schreibe gerade einen Sketch das man mit einem Taster 4 LEDS weiterschalten

und wen der 2 Taster gedrückt wird blinken die anderen LEDS .

aber bei der if Bedingung bei der beide werte überprüft werden funktioniert es nicht

Weiß da jemand weiter

Das ist der Sketch:

int taster1=7;
int taster2=8;


int tasterstatus1=0;
int tasterstatus2=0;


int led1=12;
int led2=11;
int led3=10;
int led4=9;


bool oldButtonState = HIGH;
bool newButtonState;
int count = 0;


void setup() {
 pinMode (taster1,INPUT);
pinMode (taster2,INPUT_PULLUP);




pinMode (led1,OUTPUT);
pinMode (led2,OUTPUT);
pinMode (led3,OUTPUT);
pinMode (led4,OUTPUT);
}


void loop() {
  newButtonState = digitalRead(taster1);
  
  tasterstatus2 = digitalRead(taster2);
  
  if (oldButtonState == HIGH && newButtonState == LOW) {
    count++;
    oldButtonState = newButtonState;


    if (count == 3) {
      digitalWrite(led1, HIGH);
    }
    if (count == 4) {
      digitalWrite(led1, LOW);
      digitalWrite (led2,HIGH);
    }


    if (count == 5 ){
      digitalWrite (led2,LOW);
      digitalWrite (led3,HIGH);
    }


    if (count == 6){
      digitalWrite (led3,LOW);
      digitalWrite (led4,HIGH);
    }


    if (count == 7){
      digitalWrite (led4,LOW);
    }




    


    if ((tasterstatus2 == HIGH && count == 3)){
      digitalWrite (led1,HIGH);
      delay (1000);
      digitalWrite (led1,LOW);
      digitalWrite (led2,HIGH);
      delay (1000);
      digitalWrite (led2,LOW);
      digitalWrite (led3,HIGH);
      delay (1000);
      digitalWrite (led3,LOW);
      digitalWrite (led4,HIGH);
      delay (1000);
      digitalWrite (led4,LOW);
    }




    if ((tasterstatus2 == HIGH) && (count == 4)){
      digitalWrite (led2,HIGH);
      delay (1000);
      digitalWrite (led2,LOW);
      digitalWrite (led3,HIGH);
      delay (1000);
      digitalWrite (led3,LOW);
      digitalWrite (led4,HIGH);
      delay (1000);
      digitalWrite (led4,LOW);
      digitalWrite (led1,HIGH);
      delay (1000);
      digitalWrite (led1,LOW);
    }
    
        
    delay(100);
  } else if (oldButtonState == LOW && newButtonState == HIGH) {
    oldButtonState = newButtonState;
  }
}
Computer, Programm, Arduino

Meistgelesene Beiträge zum Thema Arduino