Diody podłącz do A2, założyłem wg opisu z Allegro, że jest ich 15 sztuk. Gdyby była inna ilość to trzeba zmienić jedną linijkę w kodzie.
Powodzenia.
Kod:
#include <LiquidCrystal.h>
#include <max6675.h> //https://github.com/adafruit/MAX6675-library
#include <Adafruit_NeoPixel.h> //dolaczyc przez szkic>Dołącz bibliotekę>Zarządzaj bibliotekami> i szukamy neopixel
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
MAX6675 thermocouple(10,11,12); //SO,CS, CSK pins
Adafruit_NeoPixel swiatelko = Adafruit_NeoPixel(15, A2 , NEO_GRB + NEO_KHZ800);
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
uint8_t degree[8] = {140,146,146,140,128,128,128,128};
boolean pokaz;
int grzalka = 1;
int temperatura_zadana;
int temperatura_zmierzona;
int read_LCD_buttons(){
adc_key_in = analogRead(0);
if (adc_key_in > 1000) return btnNONE;
// For V1.1 us this threshold
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 250) return btnUP;
if (adc_key_in < 450) return btnDOWN;
if (adc_key_in < 650) return btnLEFT;
if (adc_key_in < 850) return btnSELECT;
return btnNONE;
}
void setup(){
lcd.begin(16, 2);
lcd.createChar(0, degree);
lcd.setCursor(0,0);
lcd.print(" rcclub.eu");
lcd.setCursor(0,1);
lcd.print("----------------");
delay(2000);
pinMode(grzalka, OUTPUT);
digitalWrite(grzalka, HIGH);
temperatura_zadana=100;
swiatelko.begin();
swiatelko.show();
}
void loop(){
temperatura_zmierzona = thermocouple.readCelsius();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp.");
lcd.setCursor(7,0);
lcd.print("Zad.");
lcd.setCursor(0,1);
lcd.print(temperatura_zmierzona);
lcd.write((byte)0);
lcd.setCursor(7,1);
lcd.print(temperatura_zadana);
lcd.write((byte)0);
if (pokaz == true){
char ascii=0x00+219;
lcd.setCursor(15,1);
lcd.print(ascii);
}
if ((temperatura_zmierzona >=0) and (temperatura_zmierzona <=25)){
niebieski();
}
if ((temperatura_zmierzona >=26) and (temperatura_zmierzona <=50)){
zielony();
}
if ((temperatura_zmierzona >=51) and (temperatura_zmierzona <=79)){
pomarancz();
}
if ((temperatura_zmierzona >=80) and (temperatura_zmierzona <=120)){
czerwony();
}
delay(300);
//----------------------------------------------
read_LCD_buttons();
lcd_key = read_LCD_buttons();
switch (lcd_key){
case btnRIGHT: {
temperatura_zadana++;
if (temperatura_zadana>=140) {temperatura_zadana=140;}
break;
}
case btnUP: {
temperatura_zadana++;
if (temperatura_zadana>=140) {temperatura_zadana=140;}
break;
}
case btnDOWN: {
temperatura_zadana--;
break;
}
case btnLEFT: {
temperatura_zadana--;
break;
}
}
//----------------------------------------------
if(temperatura_zadana>temperatura_zmierzona) {
digitalWrite(grzalka, LOW); //ON
pokaz = true;
}
if(temperatura_zadana+2<=temperatura_zmierzona) {
digitalWrite(grzalka, HIGH); //OFF
pokaz = false;
}
}
//----------------------------------------------
void zielony(){
int i = 0;
for (i = 0; i < 14; i++) {
swiatelko.setPixelColor(i, swiatelko.Color(0, 255, 0));
}
swiatelko.show();
}
//----------------------------------------------
void czerwony(){
int i = 0;
for (i = 0; i < 14; i++) {
swiatelko.setPixelColor(i, swiatelko.Color(255, 0, 0));
}
swiatelko.show();
}
//----------------------------------------------
void niebieski(){
int i = 0;
for (i = 0; i < 14; i++) {
swiatelko.setPixelColor(i, swiatelko.Color(0, 0, 255));
}
swiatelko.show();
}
//----------------------------------------------
void pomarancz(){
int i = 0;
for (i = 0; i < 14; i++) {
swiatelko.setPixelColor(i, swiatelko.Color(255, 153, 0));
}
swiatelko.show();
}