• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Pierwszy samodzielny program. Pomocy!
#1
Question 
Witam, jestem początkującym programistą(jeżeli można to tak nazwać). Zacząłem pisać program sygnalizacji świetlnej, która na listwie RGB ma wyświetlać kolory, a na ekranie LCD 16x2 ma wyświetlać komunikaty.
Jeden kod wygląda tak:
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Adafruit_NeoPixel.h> 

Adafruit_NeoPixel linijka = Adafruit_NeoPixel(8, 3, NEO_GRB + NEO_KHZ800);
LiquidCrystal_I2C lcd(0x27,16,2);

#define guzik 5 
void setup() {
  pinMode(guzik, INPUT_PULLUP);
  linijka.begin();
  linijka.show();
  lcd.init();                 
  lcd.backlight();
  lcd.begin(16,2);
}

void loop() {
    czerwone();
    delay();
    nacisk();
    delay();
    przerwa();
    zielone();
    delay();
   
 }

 void nacisk(){
  if(digitalRead(guzik)==LOW){
      lcd.setCursor(0,0);
      lcd.print("  Swiatlo zaraz zmieni sie na zielone  ");
      for (int scrollCounter=0;scrollCounter<23;scrollCounter++)
      {
      lcd.scrollDisplayLeft();
      delay(500);
      }
      linijka.setPixelColor(3, linijka.Color(255, 255, 0));
      linijka.show(); 
      linijka.setPixelColor(4, linijka.Color(255, 255,0));
      linijka.show(); 
      delay(1000);
      lcd.clear();
  }
 }

 void zielone(){
  lcd.setCursor(0,0);
  lcd.print("    Zielone!   ");
  delay(500);
      linijka.setPixelColor(2, linijka.Color(0, 255, 0));
      linijka.show(); 
      linijka.setPixelColor(1, linijka.Color(0, 255,0));
      linijka.show(); 
      linijka.setPixelColor(0, linijka.Color(0, 255,0));
      linijka.show();
      delay(4000);
 }
 void czerwone(){
  lcd.setCursor(0,0);
  lcd.print("    Czerwone!   ");
  delay(500);
      linijka.setPixelColor(5, linijka.Color(255, 0, 0));
      linijka.show(); 
      linijka.setPixelColor(6, linijka.Color(255, 0,0));
      linijka.show(); 
      linijka.setPixelColor(7, linijka.Color(255, 0,0));
      linijka.show();
      delay(4000);
 }
 void przerwa(){
        linijka.setPixelColor(5, linijka.Color(0, 0, 0));
      linijka.show(); 
      linijka.setPixelColor(6, linijka.Color(0, 0,0));
      linijka.show(); 
      linijka.setPixelColor(7, linijka.Color(0, 0,0));
      linijka.show();
      linijka.setPixelColor(3, linijka.Color(0, 0, 0));
    linijka.show(); 
    linijka.setPixelColor(4, linijka.Color(0, 0,0));
    linijka.show();
 }
 

Jednakże nie potrafię obsługiwać się dobrze funkcjami i nie wiem jak włączyć jedną funkcje a następnie drugą.
Drugi kod działa za pierwszym razem czeka 5 sekund na czerwonym potem wyświetla zielone a podczas czekania na czerwonym jeżeli wcisnę guzik to wyświetla się komunikat i żółte światło:

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Adafruit_NeoPixel.h> 
unsigned long czas = 0;
unsigned long rczas = 0;
unsigned long wczas = 0;
Adafruit_NeoPixel linijka = Adafruit_NeoPixel(8, 3, NEO_GRB + NEO_KHZ800);
LiquidCrystal_I2C lcd(0x27,16,2);
#define guzik 5
void setup() {
  pinMode(guzik, INPUT_PULLUP);
  linijka.begin();
  linijka.show();
  lcd.init();                 
  lcd.backlight();
  lcd.begin(16,2);
}

void loop() {
  czas=millis();
  rczas=czas-wczas;
       lcd.setCursor(0,0);
       lcd.print("    Czerwone!   ");
       delay(500);
      linijka.setPixelColor(5, linijka.Color(255, 0, 0));
      linijka.show(); 
      linijka.setPixelColor(6, linijka.Color(255, 0,0));
      linijka.show(); 
      linijka.setPixelColor(7, linijka.Color(255, 0,0));
      linijka.show();
      millis();
      
      if(digitalRead(guzik)==LOW){
      linijka.setPixelColor(5, linijka.Color(0, 0, 0));
      linijka.show(); 
      linijka.setPixelColor(6, linijka.Color(0, 0,0));
      linijka.show(); 
      linijka.setPixelColor(7, linijka.Color(0, 0,0));
      linijka.show();
      linijka.setPixelColor(3, linijka.Color(0, 0, 0));
      linijka.show(); 
      linijka.setPixelColor(4, linijka.Color(0, 0,0));
      linijka.show(); 
      linijka.setPixelColor(2, linijka.Color(0, 0, 0));
      linijka.show(); 
      linijka.setPixelColor(1, linijka.Color(0, 0,0));
      linijka.show(); 
      linijka.setPixelColor(0, linijka.Color(0, 0,0));
      linijka.show(); 
      lcd.setCursor(0,0);
      lcd.print("  Swiatlo zaraz zmieni sie na zielone  ");
      for (int scrollCounter=0;scrollCounter<23;scrollCounter++)
      {
      lcd.scrollDisplayLeft();
      delay(500);
      }
      linijka.setPixelColor(3, linijka.Color(255, 255, 0));
      linijka.show(); 
      linijka.setPixelColor(4, linijka.Color(255, 255,0));
      linijka.show(); 
      delay(1000);
      lcd.clear();
      }
      if(rczas>=5000){
      linijka.setPixelColor(5, linijka.Color(0, 0, 0));
      linijka.show(); 
      linijka.setPixelColor(6, linijka.Color(0, 0,0));
      linijka.show(); 
      linijka.setPixelColor(7, linijka.Color(0, 0,0));
      linijka.show();
      linijka.setPixelColor(3, linijka.Color(0, 0, 0));
      linijka.show(); 
     linijka.setPixelColor(4, linijka.Color(0, 0,0));
      linijka.show();
      delay(1000);
  lcd.setCursor(0,0);
  lcd.print("    Zielone!   ");
  delay(500);
  linijka.setPixelColor(2, linijka.Color(0, 255, 0));
  linijka.show(); 
  linijka.setPixelColor(1, linijka.Color(0, 255,0));
  linijka.show(); 
  linijka.setPixelColor(0, linijka.Color(0, 255,0));
  linijka.show();
  millis();

      }


 
  setup();
}

Prosiłbym o jakieś rady co mogę poprawić, co mogę zastosować. Wierzę, że nie zwyzywacie mnie, tylko pomożecie jako doświadczeni koledzy zielonemu chłopakowi. Z góry dzięki!
 
Odpowiedź
  


Wiadomości w tym wątku
Pierwszy samodzielny program. Pomocy! - przez Tobikos - 21-01-2019, 14:34

Skocz do:


Przeglądający: 1 gości