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

Trädvy Permalänk
Medlem
Registrerad
Jun 2012

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

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Okt 2011

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.

h+

Main: Ncase M1, MSI Z170 mITX, Intel i7 6700, GTX 980 Ti, 16 GB 2400 Mhz, Samsung 850 Evo 500GB, Silverstone SFX 600watt
Portable: Microsoft Surface Pro 4, i7, 8 GB, 256 GB

Trädvy Permalänk
Medlem
Registrerad
Jun 2012

@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

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Okt 2011
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.

h+

Main: Ncase M1, MSI Z170 mITX, Intel i7 6700, GTX 980 Ti, 16 GB 2400 Mhz, Samsung 850 Evo 500GB, Silverstone SFX 600watt
Portable: Microsoft Surface Pro 4, i7, 8 GB, 256 GB

Trädvy Permalänk
Medlem
Registrerad
Jun 2012
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?

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Dec 2008

@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.

Trädvy Permalänk
Medlem
Registrerad
Jun 2012
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.

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Dec 2008

@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?

Trädvy Permalänk
Medlem
Registrerad
Jun 2012
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!

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Okt 2011
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...)

h+

Main: Ncase M1, MSI Z170 mITX, Intel i7 6700, GTX 980 Ti, 16 GB 2400 Mhz, Samsung 850 Evo 500GB, Silverstone SFX 600watt
Portable: Microsoft Surface Pro 4, i7, 8 GB, 256 GB

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2015
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

VR: Oculus Rift CV1 + Touch
Dator: i5-4690K @ 4.5 GHz | Crucial 16GB 1600 | MSI 100ME GTX 970 | Samung 850 SSD 250GB | Corsair RM550 | Win10 | FD Define R5 | Noctua D15
Server: Pentium g3258 | Crucial 16GB 1600 | 2x3TB 120gb Cache ZFS | Corsair CX430 | Ubuntu Server | FD Node 304 | Cooler Master Hyper 212 Evo