21-01-2019, 18:33
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Adafruit_NeoPixel.h>
unsigned long czas = 0;
unsigned long wczas1 = 0;
unsigned long wczas2 = 0;
unsigned long wczas3 = 0;
unsigned long wczas4 = 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();
if(czas-wczas1>=2500UL){
lcd.setCursor(0,0);
lcd.print(" Czerwone! ");
wczas1=czas;
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();
}
if(czas-wczas2>=5000UL){
wczas2=czas;
lcd.clear();
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();
}
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();
linijka.setPixelColor(3, linijka.Color(0, 0, 0));
linijka.show();
linijka.setPixelColor(4, linijka.Color(0, 0,0));
linijka.show();
}
if(czas-wczas3>=7500UL){
wczas3=czas;
lcd.setCursor(0,0);
lcd.print(" Zielone! ");
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();
}
if(czas-wczas4>=10000UL){
wczas4=czas;
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();
}
setup();
}
Trochę zmieniłem kod, ale dalej nie funkcjonuje tak jakbym chciał. Nie potrafię zrozumieć forbota i funkcji millis().
#include <Wire.h>
#include <Adafruit_NeoPixel.h>
unsigned long czas = 0;
unsigned long wczas1 = 0;
unsigned long wczas2 = 0;
unsigned long wczas3 = 0;
unsigned long wczas4 = 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();
if(czas-wczas1>=2500UL){
lcd.setCursor(0,0);
lcd.print(" Czerwone! ");
wczas1=czas;
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();
}
if(czas-wczas2>=5000UL){
wczas2=czas;
lcd.clear();
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();
}
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();
linijka.setPixelColor(3, linijka.Color(0, 0, 0));
linijka.show();
linijka.setPixelColor(4, linijka.Color(0, 0,0));
linijka.show();
}
if(czas-wczas3>=7500UL){
wczas3=czas;
lcd.setCursor(0,0);
lcd.print(" Zielone! ");
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();
}
if(czas-wczas4>=10000UL){
wczas4=czas;
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();
}
setup();
}
Trochę zmieniłem kod, ale dalej nie funkcjonuje tak jakbym chciał. Nie potrafię zrozumieć forbota i funkcji millis().