Programmeringshjälp, Arduino + Neopixel, tidtagning

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
xenonfire
Inlägg: 143
Blev medlem: 4 april 2004, 14:12:42
Ort: Skaraborg

Programmeringshjälp, Arduino + Neopixel, tidtagning

Inlägg av xenonfire »

Vill bygga en klocka som räknar sekunder med resetfunktion.
Har en neopixelring med 60 led och en Trinket.
Varje diod motsvarar 1 sekund.
När jag startar programmet skall tiden börja räkna, men när jag triggar en input så skall räknaren resetas och börja räkna om från noll.

Vet inte hur jag skall göra för att kunna göra en reset på klockan.
Jag misstänker att delay bör bytas ut mot något annat kommande för att inte störa resetknappen.



// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library

#include <Adafruit_NeoPixel.h>
#include <avr/power.h>

// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1
#define PIN 1

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 60

// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 1000; // delay for half a second

void setup() {
// This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
#if defined (__AVR_ATtiny85__)
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
// End of trinket special code

pixels.begin(); // This initializes the NeoPixel library.
}

void loop() {



// For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.


for(int i=0;i<NUMPIXELS;i++)

{

// pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
pixels.setPixelColor(i, pixels.Color(50,0,0)); // Moderately bright green color.

pixels.show(); // This sends the updated pixel color to the hardware.

delay(delayval); // Delay for a period of time (in milliseconds).



}
}
Premix
Inlägg: 140
Blev medlem: 15 april 2004, 21:58:05
Ort: Trollhättan

Re: Programmeringshjälp, Arduino + Neopixel, tidtagning

Inlägg av Premix »

Du får sätta variabeln i till 0, dock så får du först deklarera den utanför din for loop, globalt antar jag
Användarvisningsbild
xenonfire
Inlägg: 143
Blev medlem: 4 april 2004, 14:12:42
Ort: Skaraborg

Re: Programmeringshjälp, Arduino + Neopixel, tidtagning

Inlägg av xenonfire »

Jag skulle vilja använda "millis" så att klockan räknar hela tiden och när man gör en ingång hög så skall klockan resetas.
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: Programmeringshjälp, Arduino + Neopixel, tidtagning

Inlägg av hanzibal »

Är det inte onödigt att göra pixels.show() för varje led? Vore väl bättre att pytsa ut alla pixlar som skall sättas på en gång, dvs efter for-loopen eller har jag missat nåt?

...samt även förlägga fördröjningen utanför for-loopen då alltså.
Användarvisningsbild
Wedge
Inlägg: 1026
Blev medlem: 8 juli 2012, 17:33:33

Re: Programmeringshjälp, Arduino + Neopixel, tidtagning

Inlägg av Wedge »

Det finns ju en resetingång på kortet.
Kan du leva med att bootloadern tar några ögonblick på sig att starta din applikation så är det väl bara att koppla in din signal där och brutal-resetta!

Fast funktionen är lite dåligt specad.
Vad ska hända när din resetinput aktiveras... startar tidräkningen om på flanken, eller hålls räknaren på noll så länge signalen är aktiv?
Vad ska hända efter 60 sekunder när alla LEDar är tända?
Användarvisningsbild
xenonfire
Inlägg: 143
Blev medlem: 4 april 2004, 14:12:42
Ort: Skaraborg

Re: Programmeringshjälp, Arduino + Neopixel, tidtagning

Inlägg av xenonfire »

Att invänta att bootloadern skall starta upp funkar tyvärr inte.

Det skall bli en klocka med sekundvisare som grafiskt visar sekunder på en urtavla men man skall enkelt kunna nollställa sekundvisaren med hjälp av en tryckknapp.
Premix
Inlägg: 140
Blev medlem: 15 april 2004, 21:58:05
Ort: Trollhättan

Re: Programmeringshjälp, Arduino + Neopixel, tidtagning

Inlägg av Premix »

Ok, din delay är 1000ms nu. Vilket gör att du nu kollar knappen max en gång i sekunden.
Testa att använda en interrupt på din pinne eller gör en loop där du kör en delay på 10ms 100 gånger och kollar pinnen varje loop.
Användarvisningsbild
xenonfire
Inlägg: 143
Blev medlem: 4 april 2004, 14:12:42
Ort: Skaraborg

Re: Programmeringshjälp, Arduino + Neopixel, tidtagning

Inlägg av xenonfire »

Låter ju bättre att använda interrupt istället.
Man kanske även skulle kunna använda millis på något sätt.

Vet bara inte hur jag skall börja...*hmm
slo
Inlägg: 103
Blev medlem: 7 januari 2009, 10:57:35
Ort: Åbo, Finland
Kontakt:

Re: Programmeringshjälp, Arduino + Neopixel, tidtagning

Inlägg av slo »

Du börjar med att läsa Arduino exemplen:
http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
och
http://www.arduino.cc/en/Reference/AttachInterrupt

ifall du vill kan du även köra Atmegans interna timers för att inte behöva polla millis()
http://playground.arduino.cc/Code/Timer1

och i korta drag skulle programmet vara

Kod: Markera allt

counter = 0
lastCounter = 0

setup:
   konfigurera alla interrupts
 
interruptButton:
   counter = 0

interruptTimer:
   counter = counter +1 
   if counter > 59:
      counter = 0 

loop:
  if lastCounter != counter:
     uppdatera alla leddar
     lastCounter = counter
  
  delay
Skriv svar