Hej igen. Jag är som sagt helt ny på det här med kodning överhuvudtaget och nu har jag suttit i några timmar och försökt förstå vad jag gör för fel.
Jag har lyckats koppla en LCD display och får den att fungera. Jag har också kopplat en knapp som jag får fungera så kopplingarna är det inget fel på. Det är koden som jag inte förstår vad jag bör göra.
Jag vill alltså ha en en text som står innan jag trycker på en knapp samt en serie neopixlar (just nu är det dock bara en led på pin 13) som är avstängda tills jag trycker på knappen. Då skall en annan text dyka upp typ "skjuter" och neopixlarna börja blinka. Sedan när jag släpper knappen skall en "loading %" visas i LCDn och lamporna sluta blinka. Efter detta skall allt gå tillbaka till som det var innan knapptryckningen.
Här kommer min kod:
#include <LiquidCrystal.h>
const int buttonPin = 7; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
byte percentage_1[8] = { B10000, B10000, B10000, B10000, B10000, B10000, B10000, B10000 };
byte percentage_2[8] = { B11000, B11000, B11000, B11000, B11000, B11000, B11000, B11000 };
byte percentage_3[8] = { B11100, B11100, B11100, B11100, B11100, B11100, B11100, B11100 };
byte percentage_4[8] = { B11110, B11110, B11110, B11110, B11110, B11110, B11110, B11110 };
byte percentage_5[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111 };
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
lcd.createChar(0, percentage_1);
lcd.createChar(1, percentage_2);
lcd.createChar(2, percentage_3);
lcd.createChar(3, percentage_4);
lcd.createChar(4, percentage_5);
lcd.begin(16, 2);
lcd.clear();
lcd.print("Laddar upp");
delay(2000);
lcd.clear();
lcd.print("Ektoplasma 13%");
delay(2000);
lcd.clear();
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == LOW) {
for(int i = 0; i <= 100; i++){
lcd.setCursor(0,0);
lcd.print("Loading :");
lcd.print(i);
lcd.print("%");
lcd_percentage(i, 0, 16, 1);
delay(50);
}
lcd.clear();
}
void lcd_percentage(int percentage, int cursor_x, int cursor_x_end, int cursor_y){
int calc = (percentage*cursor_x_end*5/100)-(percentage*cursor_x*5/100);
while(calc >= 5){
lcd.setCursor(cursor_x,cursor_y);
lcd.write((byte)4);
calc-=5;
cursor_x++;
}
while(calc >= 4 && calc < 5){
lcd.setCursor(cursor_x,cursor_y);
lcd.write((byte)3);
calc-=4;
}
while(calc >= 3 && calc < 4){
lcd.setCursor(cursor_x,cursor_y);
lcd.write((byte)2);
calc-=3;
}
while(calc >= 2 && calc < 3){
lcd.setCursor(cursor_x,cursor_y);
lcd.write((byte)1);
calc-=2;
}
while(calc >= 1 && calc < 2){
lcd.setCursor(cursor_x,cursor_y);
lcd.write((byte)0);
calc-=1;
}
// turn LED on:
digitalWrite(ledPin, LOW);
} else {
// turn LED off:
digitalWrite(ledPin, HIGH);
}
}
Här är alltså koden. Jag inser ju att det är nått enkelt jag missar i språket men kan inte lista ut vad jag gör för fel.