Arduino dioder som tänds ut från kanterna till mitten

Permalänk
Medlem

Arduino dioder som tänds ut från kanterna till mitten

Tjena!
Vi har lyckats med att få lamporna att tändas som en våg men nu vill vi ändra så laporna tänds utifrån och in till mitten. Men vi är inte så erfarna med Arduino kod så vi får inte det att fungera. Någon som vet hur man kan göra?

/*
8 LEDs Test
Turns on one LED at a time rotating through all 8 LEDs
*/
// LED Pin Variables in an Array, First LED is attached to I/O 2 etc.
int LED_Pins[] = {2, 3, 4, 5, 6, 7, 8, 9};
// Temporary variable to use in e.g. for next loops etc.
int tmp;
// Variable to hold which LED was turned on last time
int Old_LED = 7;
void setup() {
// Make sure all I/O for external LEDs are outputs.
for (tmp = 0; tmp < 4; tmp++) {
pinMode(LED_Pins[tmp], OUTPUT);
}
}
void loop() {
for (tmp = 0; tmp < 8; tmp++) {
digitalWrite(LED_Pins[Old_LED], LOW); // Turn off previous LED
digitalWrite(LED_Pins[tmp], HIGH); // Turn on actual LED
Old_LED = tmp; // Save current LED into old LED variable
delay(69); // Delay 100ms
}
}

EDIT: Vi tänkte att man bara kan ändra for (tmp = 0; tmp < 4; tmp++) till for (tmp = 9; tmp > 4; tmp++ och lägga den efter men det fungerar inte

Permalänk
Medlem

Skoluppgift?

Så fall kan jag inte hjälpa er. Men mitt tips är att kolla på www.arduino.cc och kolla gärna på exemplet: https://www.arduino.cc/en/Tutorial/KnightRider

Med Knight rider exemplet kan ni med enkelt lösa detta problemet.

Lycka till.

Visa signatur
Permalänk
Medlem

@Arazand:

Nej, inte skoluppgift, Vår uppgift var att göra så dom tänds som en våg.

Vi valde själva att försöka få dom att tändas utifrån och in för vi skulle tycka det var intresant

Edit: Vi vet att man kan skriva lång kod så som det första exemplet i knightrider du länkade.

Men vi försöker göra den relativt simpelt som vi lyckades göra med uppgift

Permalänk
Medlem
Skrivet av Matsson82:

@Arazand:

Nej, inte skoluppgift, Vår uppgift var att göra så dom tänds som en våg.

Vi valde själva att försöka få dom att tändas utifrån och in för vi skulle tycka det var intresant

Edit: Vi vet att man kan skriva lång kod så som det första exemplet i knightrider du länkade.

Men vi försöker göra den relativt simpelt som vi lyckades göra med uppgift

Se längre ner på knightrider sidan för fler exempel.

Visa signatur
Permalänk
Medlem
Skrivet av Arazand:

Se längre ner på knightrider sidan för fler exempel.

Så här långt kom vi, men nu spazar alla lampor ur och tänds lite random.

int pinArray[] = {2, 3, 4, 5, 6, 7, 8, 9}; int count = 0; int timer = 30 0; void setup(){ for (count=0;count<9;count++) { pinMode(pinArray[count], OUTPUT); } } void loop() { for (count=0;count<4;count++) { digitalWrite(pinArray[count], HIGH); delay(timer); digitalWrite(pinArray[count + 1], HIGH); delay(timer); digitalWrite(pinArray[count], LOW); delay(timer*2); } for (count=9;count>5;count++) { digitalWrite(pinArray[count], HIGH); delay(timer); digitalWrite(pinArray[count + 1], HIGH); delay(timer); digitalWrite(pinArray[count], LOW); delay(timer*2); } }

Någon ide vad som orsakar det?

Permalänk

@Matsson82:

Om ni skall räkna ner måste ni använda decrement (--) istället för increment (++). Dessutom vill ni sannolikt tända count - 1 istället för count + 1 i den andra loopen. Testa och se om det blir bättre.

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

@Matsson82:

Om ni skall räkna ner måste ni använda decrement (--) istället för increment (++). Testa och se om det blir bättre.

När vi gör det fungerar vänstersida (0-4) men inte 9-5.

Permalänk

@Matsson82:

Du hann testa innan jag hade redigerat klart mitt inlägg. Såg du den delen om count - 1 istället för count + 1?

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

@Matsson82:

Du hann testa innan jag hade redigerat klart mitt inlägg. Såg du den delen om count - 1 istället för count + 1?

Fungerar nu, Tack så mycket!

Permalänk
Medlem
Skrivet av Matsson82:

Så här långt kom vi, men nu spazar alla lampor ur och tänds lite random.

int pinArray[] = {2, 3, 4, 5, 6, 7, 8, 9}; int count = 0; int timer = 30 0; //Ska det vara 300ms eller 30ms? Så dom det är skrivet här är det 300ms, notera att breakline inte innebär avslutning. void setup(){ for (count=0;count<9;count++) { pinMode(pinArray[count], OUTPUT); } } void loop() { for (count=2;count<5;count++) { // Ska ni inte börja räkna ifrån 2? Så att 2 tänds direkt, räknar ni ifrån 0 // så kommer den ju att spendera 300ms på att vänta innan den // tänder nästa osv. Så denna sida kommer alltid vara 2 steg efter. // Testa även räkna till 5, ni hade mindre än 4 så ni räkna bara 2, 3 och 4 men aldrig 5. digitalWrite(pinArray[count], HIGH); delay(timer); digitalWrite(pinArray[count + 1], HIGH); delay(timer); digitalWrite(pinArray[count], LOW); delay(timer*2); } for (count=9;count>5;count--) { // Räkna med -- här. digitalWrite(pinArray[count], HIGH); delay(timer); digitalWrite(pinArray[count + 1], HIGH); delay(timer); digitalWrite(pinArray[count], LOW); delay(timer*2); } }

Någon ide vad som orsakar det?

Första for-loopen, ni har skrivit count=0 det bör vara count=2 annars räknar den ifrån 0,1 och sen vidare tänds 2.
(Notera: Det var aslänge sedan jag skrev något program...)

Visa signatur
Permalänk
Medlem
Skrivet av Matsson82:

Fungerar nu, Tack så mycket!

Koden du skrev borde väl tända från ena kanten till mitten först, sen andra kanten till mitten?
Detta borde fungera så det tänds från båda kanterna samtidigt:)

void loop() { for (count=0;count<5;count++) { digitalWrite(pinArray[count], HIGH); digitalWrite(pinArray[7-count], HIGH); if (count != 0) { digitalWrite(pinArray[count-1], LOW); digitalWrite(pinArray[8-count], LOW); } delay(100); } }

@Arazand:
Count syftar på index i en array, inte själva pinnummret. Så ditt svar är fel

Visa signatur

VR: Oculus Rift CV1 + Touch
Dator: Ryzen 2600X | 16GB 2933 MHz | RTX 2070 FE | 2 x Samung 850 SSD 250GB | Corsair SF600 | Louqe Ghost S1 | Noctua L12
Server: HP ProLiant MicroServer G7 N54L