Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C Arduino - uszczuplanie kodu

Mpelit 31 Paź 2013 14:29 990 5
  • #1 31 Paź 2013 14:29
    Mpelit
    Poziom 8  

    Witam
    bawię się z Arduino i pisze sobie prosty program binarny -> 10tny z wykorzystaniem LEDow. Wszystko ok ale zastanawiam się czy nie można uszczuplić tego kodu tak na przyszłość


    Spoiler:
    int p3 = 9;
    int p2 = 10;
    int p1 = 11;
    int d1 = 8;
    int d2 = 7;
    int d3 = 6;
    int d4 = 5;
    int d5 = 4;
    int d6 = 3;
    int d7 = 2;
    int d8 = 1;

    int przycisk1 = 0;
    int przycisk2 = 0;
    int przycisk3 = 0;

    void setup() {
    pinMode(p1, INPUT);
    pinMode(p2, INPUT);
    pinMode(p3, INPUT);
    pinMode(d1, OUTPUT);
    pinMode(d2, OUTPUT);
    pinMode(d3, OUTPUT);
    pinMode(d4, OUTPUT);
    pinMode(d5, OUTPUT);
    pinMode(d6, OUTPUT);
    pinMode(d7, OUTPUT);
    pinMode(d8, OUTPUT);
    }

    void loop() {
    przycisk1 = digitalRead(p1);
    przycisk2 = digitalRead(p2);
    przycisk3 = digitalRead(p3);

    if (przycisk1 && przycisk1 == HIGH) { // 001 = 1
    digitalWrite(d1, HIGH);
    digitalWrite(d8, HIGH);
    delay(1000);
    digitalWrite(d8, LOW);
    delay(1000);
    }
    else {
    digitalWrite(d1, LOW);
    digitalWrite(d8, LOW);
    }
    if (przycisk1 && przycisk2 == HIGH) { // 011 = 3
    digitalWrite(d1, HIGH);
    digitalWrite(d2, HIGH);
    digitalWrite(d3, HIGH);
    digitalWrite(d8, HIGH);
    delay(100);
    digitalWrite(d8, LOW);
    delay(1000);

    }
    else {
    digitalWrite(d1, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(d3, LOW);
    digitalWrite(d8, LOW);
    }
    if (przycisk2 == HIGH) { // 010 = 2
    digitalWrite(d1, HIGH);
    digitalWrite(d2, HIGH);
    digitalWrite(d8, HIGH);
    delay(1000);
    digitalWrite(d8, LOW);
    delay(100);
    }
    else {
    digitalWrite(d1, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(d8, LOW);
    }
    if (przycisk3 == HIGH) { // 100 = 4
    digitalWrite(d1, HIGH);
    digitalWrite(d2, HIGH);
    digitalWrite(d3, HIGH);
    digitalWrite(d4, HIGH);
    digitalWrite(d8, HIGH);
    delay(100);
    digitalWrite(d8, LOW);
    delay(100);
    }
    else {
    digitalWrite(d1, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(d3, LOW);
    digitalWrite(d4, LOW);
    digitalWrite(d8, LOW);
    }
    if (przycisk3 && przycisk1 == HIGH) { // 101 = 5
    digitalWrite(d1, HIGH);
    digitalWrite(d2, HIGH);
    digitalWrite(d3, HIGH);
    digitalWrite(d4, HIGH);
    digitalWrite(d5, HIGH);
    digitalWrite(d8, HIGH);
    delay(10);
    digitalWrite(d8, LOW);
    delay(1000);
    }
    else {
    digitalWrite(d1, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(d3, LOW);
    digitalWrite(d4, LOW);
    digitalWrite(d5, LOW);
    digitalWrite(d8, LOW);
    }
    if (przycisk3 && przycisk2 == HIGH) { // 110 = 6
    digitalWrite(d1, HIGH);
    digitalWrite(d2, HIGH);
    digitalWrite(d3, HIGH);
    digitalWrite(d4, HIGH);
    digitalWrite(d5, HIGH);
    digitalWrite(d6, HIGH);
    digitalWrite(d8, HIGH);
    delay(1000);
    digitalWrite(d8, LOW);
    delay(10);
    }
    else {
    digitalWrite(d1, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(d3, LOW);
    digitalWrite(d4, LOW);
    digitalWrite(d5, LOW);
    digitalWrite(d6, LOW);
    digitalWrite(d8, LOW);

    }
    if (przycisk1 && przycisk2 && przycisk3 == HIGH) { // 111=7
    digitalWrite(d1, HIGH);
    digitalWrite(d2, HIGH);
    digitalWrite(d3, HIGH);
    digitalWrite(d4, HIGH);
    digitalWrite(d5, HIGH);
    digitalWrite(d6, HIGH);
    digitalWrite(d7, HIGH);
    digitalWrite(d8, HIGH);
    delay(10);
    digitalWrite(d8, LOW);
    delay(10);

    }
    else {
    digitalWrite(d1, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(d3, LOW);
    digitalWrite(d4, LOW);
    digitalWrite(d5, LOW);
    digitalWrite(d6, LOW);
    digitalWrite(d7, LOW);
    digitalWrite(d8, LOW);
    }


    }


    Widać w kodzie ze jest duża powtarzalność, nie da rady tego zmniejszyć coś w stylu
    digitalWrite(d1; d2; d3; d4 == LOW); lub coś w tym stylu?


    PS.
    Proszę nie przejmować się d8, to taki bajer tylko

    Proszę pamiętać o używaniu znaczników syntax. Opcja Listing kodu. Proszę to poprawić! - arnoldziq

    0 5
  • #2 31 Paź 2013 14:38
    mi14chal
    Poziom 28  

    Wykorzystaj pętle.

    0
  • #3 31 Paź 2013 14:39
    Mpelit
    Poziom 8  

    Nie potrafie

    0
  • #5 31 Paź 2013 15:16
    Mpelit
    Poziom 8  

    Problem jest taki ze na internecie wyjaśnienie petl jest zbyt ogólnikowe a zas w książkach zbyt szczegółowa, dla małego głupiego zastosowania albo musisz ryc analizując ksiazke cofając sie do poprzednich tematów gdzie bylo opisane poprzednie jakieś elementy albo z internetu okrojona wersje gdzie duzo rzeczy jest nie jasnych i nie wiadomo jak zastosować. Pisze tutaj z nadzieja ze ktos da po prostu szablon, na którym będę mógł sie wzorować później rozbudowując go dodatkowymi rzeczami poznając C. Wiem ze warunki sa spełnione dla innych petli - nie mam bladego pojęcia jak to usunac

    0