Programmeringshjälp, Arduino + Neopixel, tidtagning
Programmeringshjälp, Arduino + Neopixel, tidtagning
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).
}
}
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).
}
}
Re: Programmeringshjälp, Arduino + Neopixel, tidtagning
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
Re: Programmeringshjälp, Arduino + Neopixel, tidtagning
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.
Re: Programmeringshjälp, Arduino + Neopixel, tidtagning
Ä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å.
...samt även förlägga fördröjningen utanför for-loopen då alltså.
Re: Programmeringshjälp, Arduino + Neopixel, tidtagning
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?
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?
Re: Programmeringshjälp, Arduino + Neopixel, tidtagning
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.
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.
Re: Programmeringshjälp, Arduino + Neopixel, tidtagning
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.
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.
Re: Programmeringshjälp, Arduino + Neopixel, tidtagning
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
Man kanske även skulle kunna använda millis på något sätt.
Vet bara inte hur jag skall börja...*hmm
Re: Programmeringshjälp, Arduino + Neopixel, tidtagning
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
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