Gå til innhold

Den lille Arduino-tråden


Anbefalte innlegg

Jeg holder på å bygge et tripwire system, og trenger litt hjelp. Jeg har nå laget 1 kode for sensoren jeg bruker, og har en kode for alarmlyden jeg ønsker å bruke. Jeg trenger å få kodene inn i hverandre. Noen som kan hjelpe meg?

 

Koden for alarmlyden:

 

#define ALARM 3

 

float sinVal;

int toneVal;

void setup() {

pinMode(ALARM, OUTPUT );

}

 

void loop() {

for (int x=0; x<180; x++) {

// convert degrees to radians then obtain sin value

sinVal = (sin(x*(3.1412/700)));

// generate a frequency from the sin value

toneVal = 2000+(int(sinVal*1000));

tone(ALARM, toneVal);

}

 

delay(350); }

 

 

 

Koden for sensoren:

 

/*

Arduino Starter Kit example

Project 6 - Light Theremin

 

This sketch is written to accompany Project 6 in the

Arduino Starter Kit

 

Parts required:

photoresistor

10 kilohm resistor

piezo

 

Created 13 September 2012

by Scott Fitzgerald

 

http://arduino.cc/starterKit

 

This example code is part of the public domain

*/

 

// variable to hold sensor value

int sensorValue;

// variable to calibrate low value

int sensorLow = 1023;

// variable to calibrate high value

int sensorHigh = 0;

// LED pin

const int ledPin = 13;

const int irLedPin = 12;

float voltage = 0;

int i=0;

 

void setup() {

// Make the LED pin an output and turn it on

pinMode(ledPin, OUTPUT);

pinMode(irLedPin, OUTPUT);

digitalWrite(ledPin, HIGH);

 

// calibrate for the first five seconds after program runs

while (millis() < 5000) {

// record the maximum sensor value

sensorValue = analogRead(A0);

digitalWrite(irLedPin,HIGH);

if (sensorValue > sensorHigh) {

sensorHigh = sensorValue;

}

// record the minimum sensor value

digitalWrite(irLedPin,LOW);

if (sensorValue < sensorLow) {

sensorLow = sensorValue;

}

}

// turn the LED off, signaling the end of the calibration period

digitalWrite(ledPin, LOW);

Serial.begin(9600);

}

 

void loop() {

digitalWrite(4, HIGH);

if(analogRead(0) > 530){

digitalWrite(8, HIGH);

}

//read the input from A0 and store it in a variable

sensorValue = analogRead(A0);

 

// map the sensor values to a wide range of pitches

int pitch = map(sensorValue, sensorLow, sensorHigh, 50, 4000);

 

if(i>=100){

digitalWrite(irLedPin, HIGH);

}

else if(i>=200){

digitalWrite(irLedPin, LOW);

i=0;

}

 

voltage = sensorValue*5.0/1024.0;

Serial.print(sensorValue);

Serial.print(" ");

Serial.print(pitch);

Serial.print(" ");

Serial.println(voltage);

 

// play the tone for 20 ms on pin 8

tone(8, pitch, 20);

 

// wait for a moment

i++;

delay(10);

}

 

 

 

 

Noen som har noen tanker? Jeg har ingen anelse angående dette...

Lenke til kommentar
Videoannonse
Annonse

Jeg holder på å bygge et tripwire system, og trenger litt hjelp. Jeg har nå laget 1 kode for sensoren jeg bruker, og har en kode for alarmlyden jeg ønsker å bruke. Jeg trenger å få kodene inn i hverandre. Noen som kan hjelpe meg?

 

Koden for alarmlyden:

 

#define ALARM 3

 

float sinVal;

int toneVal;

void setup() {

pinMode(ALARM, OUTPUT );

}

 

void loop() {

for (int x=0; x<180; x++) {

// convert degrees to radians then obtain sin value

sinVal = (sin(x*(3.1412/700)));

// generate a frequency from the sin value

toneVal = 2000+(int(sinVal*1000));

tone(ALARM, toneVal);

}

 

delay(350); }

 

 

 

Koden for sensoren:

 

/*

Arduino Starter Kit example

Project 6 - Light Theremin

 

This sketch is written to accompany Project 6 in the

Arduino Starter Kit

 

Parts required:

photoresistor

10 kilohm resistor

piezo

 

Created 13 September 2012

by Scott Fitzgerald

 

http://arduino.cc/starterKit

 

This example code is part of the public domain

*/

 

// variable to hold sensor value

int sensorValue;

// variable to calibrate low value

int sensorLow = 1023;

// variable to calibrate high value

int sensorHigh = 0;

// LED pin

const int ledPin = 13;

const int irLedPin = 12;

float voltage = 0;

int i=0;

 

void setup() {

// Make the LED pin an output and turn it on

pinMode(ledPin, OUTPUT);

pinMode(irLedPin, OUTPUT);

digitalWrite(ledPin, HIGH);

 

// calibrate for the first five seconds after program runs

while (millis() < 5000) {

// record the maximum sensor value

sensorValue = analogRead(A0);

digitalWrite(irLedPin,HIGH);

if (sensorValue > sensorHigh) {

sensorHigh = sensorValue;

}

// record the minimum sensor value

digitalWrite(irLedPin,LOW);

if (sensorValue < sensorLow) {

sensorLow = sensorValue;

}

}

// turn the LED off, signaling the end of the calibration period

digitalWrite(ledPin, LOW);

Serial.begin(9600);

}

 

void loop() {

digitalWrite(4, HIGH);

if(analogRead(0) > 530){

digitalWrite(8, HIGH);

}

//read the input from A0 and store it in a variable

sensorValue = analogRead(A0);

 

// map the sensor values to a wide range of pitches

int pitch = map(sensorValue, sensorLow, sensorHigh, 50, 4000);

 

if(i>=100){

digitalWrite(irLedPin, HIGH);

}

else if(i>=200){

digitalWrite(irLedPin, LOW);

i=0;

}

 

voltage = sensorValue*5.0/1024.0;

Serial.print(sensorValue);

Serial.print(" ");

Serial.print(pitch);

Serial.print(" ");

Serial.println(voltage);

 

// play the tone for 20 ms on pin 8

tone(8, pitch, 20);

 

// wait for a moment

i++;

delay(10);

}

 

 

 

Man kan si at det er 3 deler av koden. Først (før 'void setup') der du definerer ting osv. Så har du det som er inni void setup() {} og til slutt det som er inni void loop() {}. Litt dårlig forklart kanskje, men det er ikke så vanskelig. Jeg satt sammen de to kodene for deg, men om det fungerer vet ikke jeg. Har ikke studert koden, men har verifisert den i Arduino IDE uten feil

 

 

// --- ALARM ---
#define ALARM 3
float sinVal;
int toneVal;

// --- SENSOR ---
// variable to hold sensor value
int sensorValue;
// variable to calibrate low value
int sensorLow = 1023;
// variable to calibrate high value
int sensorHigh = 0;
// LED pin
const int ledPin = 13;
const int irLedPin = 12;
float voltage = 0;
int i=0;

void setup() {
  
  // --- ALARM ---
  pinMode(ALARM, OUTPUT );

  // --- SENSOR ---
  // Make the LED pin an output and turn it on
  pinMode(ledPin, OUTPUT);
  pinMode(irLedPin, OUTPUT);
  digitalWrite(ledPin, HIGH);

  // calibrate for the first five seconds after program runs
  while (millis() < 5000) {
    // record the maximum sensor value
    sensorValue = analogRead(A0);
    digitalWrite(irLedPin,HIGH);
    if (sensorValue > sensorHigh) {
      sensorHigh = sensorValue;
    }
  // record the minimum sensor value
  digitalWrite(irLedPin,LOW);
  if (sensorValue < sensorLow) {
    sensorLow = sensorValue;
    }
  }
  // turn the LED off, signaling the end of the calibration period
  digitalWrite(ledPin, LOW);
  Serial.begin(9600);

}

void loop() {
  
  // --- SENSOR ---
  digitalWrite(4, HIGH);
  if(analogRead(0) > 530){
    digitalWrite(8, HIGH);
  }
  //read the input from A0 and store it in a variable
  sensorValue = analogRead(A0);

  // map the sensor values to a wide range of pitches
  int pitch = map(sensorValue, sensorLow, sensorHigh, 50, 4000);

  if(i>=100){
    digitalWrite(irLedPin, HIGH);
  }
  else if(i>=200){
    digitalWrite(irLedPin, LOW);
    i=0;
  }

  voltage = sensorValue*5.0/1024.0;
  Serial.print(sensorValue);
  Serial.print(" ");
  Serial.print(pitch);
  Serial.print(" ");
  Serial.println(voltage);

  // play the tone for 20 ms on pin 8
  tone(8, pitch, 20);

  // wait for a moment
  i++;
  delay(10);
  
  // --- ALARM ---
  
  for (int x=0; x<180; x++) {
    // convert degrees to radians then obtain sin value
    sinVal = (sin(x*(3.1412/700)));
    // generate a frequency from the sin value
    toneVal = 2000+(int(sinVal*1000));
    tone(ALARM, toneVal);
  }

  delay(350);


} 

 

 

Endret av andershf
Lenke til kommentar

Vet jeg har spurt om dette før men prøver igjen. Dog med litt annen kode nå, men målet er det samme.

 

Planen er at jeg skal styre en steppermotor (0-360°) alt etter hvor mange pulser som lese av arduinoen.

 

Jeg bruker en frekvensgenerator i sweep-mode som genererer firkantpulser fra 1Hz til 2kHz i løpet av 10 sekunder før den begynner på 1Hz igjen. Dette ser ut til å fungere sånn nogen lunde. Ser kanskje at den stepper litt ujevnt. Kjører med 1/2 steg atm.

 

Når motoren stepper tilbake til null er "off-tiden" mellom pulsene rundt ~22µS mens on-tiden er 3ms. Når den stepper "fremover" så er on-tiden også 3ms mens off-tiden kan variere fra ~22µs til så mye som 300ms. Noen som ser hva som skjer og hva som ikke skjer? Burde ikke "milliesBetweenSteps" sørge for at det skal være litt mer tid mellom pulsene?

Håper noen har peil.  :dremel:

 

 

 

// CONSTANTS
const int speedoDir = 8; // Pin speedostepper direction
const int speedoStep = 5; // Pin speedostepper step
const int stepsPerRev = 26 * 2; // Steps per rev times stepping factor

const int updateInterval = 25; // milliseconds
const int millisBetweenSteps = 25; // milliseconds
const int millisStepWidth = 3;
 
const int speedTeeth = 48; // Number of pulses per rotation
const int maxSpeed = 240; // Max cluster speed
const int tireDiameter = 500; // Diameter of tire (mm)
const float tireCircumference = PI * tireDiameter;
 
// VARIABLES
int pos = 0;
int val = 0;
float currentSpeed = 0;
 
int speedoStepState = LOW;
 
unsigned long curMillis = 0;
unsigned long prevStepMillis = 0;
unsigned long prevStepWidthMillis = 0;
unsigned long lastUpdate = 0;
unsigned long lastUpdate2 = 0;
volatile int speedPulseCount = 0;
int speedPulseCount2 = 0;
 
void setup() {
  Serial.begin(9600);
  
  pinMode(speedoDir, OUTPUT);
  pinMode(speedoStep, OUTPUT);
  
  attachInterrupt(0, speedCount, FALLING);
}
 
void loop() {
  
  curMillis = millis();
  
  if ( (curMillis - lastUpdate) >= updateInterval ) {
    // Save variables
    noInterrupts();
 
    speedPulseCount2 = speedPulseCount;
    lastUpdate2 = lastUpdate;
    
    speedPulseCount = 0;
    lastUpdate += updateInterval;
    interrupts();  
    
    // Speed in m/s
    currentSpeed = (speedPulseCount2 * tireCircumference) / (speedTeeth * (curMillis - lastUpdate2));
    // Speed in km/h
    currentSpeed = (currentSpeed * 36) / 10;
    currentSpeed = constrain(currentSpeed, 0, maxSpeed);
    val = map( currentSpeed, 0, maxSpeed, 0, stepsPerRev );
    speedPulseCount = 0; 
  }    
    
  // Speed difference bigger than 2?
  if ( abs(val - pos) > 2 ) {
    if ( (val - pos) > 0 ) {
      digitalWrite(speedoDir, LOW);
      speedStep();
      pos++;
    }
    
    if ( (val - pos) < 0 ) {
      digitalWrite(speedoDir, HIGH);
      speedStep();
      pos--;
    }
  }
}
 
void speedStep() {
  if (curMillis - prevStepMillis >= millisBetweenSteps) {
    prevStepMillis += millisBetweenSteps;
    digitalWrite(speedoStep, HIGH);
    delay(millisStepWidth);
    digitalWrite(speedoStep, LOW);
  } 
}

void speedCount() {
  speedPulseCount++;
}

 

 

Endret av BigJackW
Lenke til kommentar
  • 3 uker senere...

 

Artig den derre google linken :)

 

Glemte å nevne at jeg har vært innom Instructables, men føler at jeg ikke helt klarer å holde hodet kaldt når det skal oversettes fra Engelsk til Norsk, om jeg kan si det på den måten.

Tok utgangspunkt i denne på Instructables og lagde en teining til deg :) (Ligger i spoiler)

 

Bredboard

Tripwire_bb_zpsszadygom.png

Koblingsskjema

Tripwire_schem_zpsbs3sbpuc.png

 

 

Og dette er koden som ble brukt på Instructables:

void setup() {
  pinMode(4, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop(){
  digitalWrite(4, HIGH);
  if(analogRead(0) < 750){
    digitalWrite(13, HIGH);
  } 
  else{
    digitalWrite(13, LOW);
  }
}

Husk å sjekke hvilken spenning laseren din skal ha og finn ut strømtrekk. Utgangen på Arduino, pin4 i dette tilfellet, gir 5V og maks 40mA

 

Og her er koden for å lese verdien fra photoresistoren i tilfelle du trenger å justere den

void setup() {
  pinMode(4, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  digitalWrite(4, HIGH);
  Serial.println(analogRead(0));
}

satte å vurdete å kjøpe slike resistorer og 555 ic idag... men fant ikke noe kult å lage med det så gjore ikke det... men så kommer jeg å leser dette rett før eg ska legge meg :( då bli d å kjøpe inn det også! :)

 

men tengte å ta det ett hakk videre? går det ann å få et webcam til å skru seg på å ta bilde/vidio når "alarmen" går? 

første som eg tengte på va å koble webcamet til rapsberrypi som lagrer det på et minnekort? (vet ikke om arduino har noe slikt?)

Lenke til kommentar

 

 

Artig den derre google linken :)

 

Glemte å nevne at jeg har vært innom Instructables, men føler at jeg ikke helt klarer å holde hodet kaldt når det skal oversettes fra Engelsk til Norsk, om jeg kan si det på den måten.

Tok utgangspunkt i denne på Instructables og lagde en teining til deg :) (Ligger i spoiler)

 

Bredboard

Tripwire_bb_zpsszadygom.png

Koblingsskjema

Tripwire_schem_zpsbs3sbpuc.png

 

 

Og dette er koden som ble brukt på Instructables:

void setup() {
  pinMode(4, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop(){
  digitalWrite(4, HIGH);
  if(analogRead(0) < 750){
    digitalWrite(13, HIGH);
  } 
  else{
    digitalWrite(13, LOW);
  }
}

Husk å sjekke hvilken spenning laseren din skal ha og finn ut strømtrekk. Utgangen på Arduino, pin4 i dette tilfellet, gir 5V og maks 40mA

 

Og her er koden for å lese verdien fra photoresistoren i tilfelle du trenger å justere den

void setup() {
  pinMode(4, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  digitalWrite(4, HIGH);
  Serial.println(analogRead(0));
}

satte å vurdete å kjøpe slike resistorer og 555 ic idag... men fant ikke noe kult å lage med det så gjore ikke det... men så kommer jeg å leser dette rett før eg ska legge meg :( då bli d å kjøpe inn det også! :)

 

men tengte å ta det ett hakk videre? går det ann å få et webcam til å skru seg på å ta bilde/vidio når "alarmen" går? 

første som eg tengte på va å koble webcamet til rapsberrypi som lagrer det på et minnekort? (vet ikke om arduino har noe slikt?)

 

Arduino er ikke i stand til å behanle video/bilder i seg selv, så vil nok tro at Raspberry Pi er et bedre alternativ som du sier ;)

Lenke til kommentar
  • 2 uker senere...

De kondensatorene skal stå så nerme IC-ene som mulig (en stk per IC), og de skal stå helt inntil VCC.  Ene benet på kondensatoren skal kobles til VCC på IC-en, og det andre til GND. De er der for å glatte ut rippel i spenningen som oppstår når du kjapt endrer strømtrekket, som en gjerne ofte gjør i en LED-Cube siden diodene skrus av og på hele tiden.

Lenke til kommentar

Hei.

Har planer om å anskaffe meg en Arduino for å lære mer om elektronikk og programmering. Sist gang jeg var borti elektronikk på komponentnivå var på videregående for ca 20 år siden. Programmering har jeg aldri vært borti, men etter å ha tullet rundt litt på nettet, virker Arduino-plattformen som et utmerket sted for å begynne og lære. Trenger litt hjelp for hvordan best komme i gang, med tanke på hvilken Arduino jeg skal kjøpe. Startsettet som henvises til på side 41 i denne tråden virker kjempeflott, men ser også at det er kommet ut et nytt brett som heter Arduino Zero Pro. Er det noen som har erfaringer med dette brettet, vet om det ville være et bedre/verre kjøp enn Uno Rev3? Har også planer om å kjøpe boka til Massimo Benzi, "Getting started with Arduino". Hvis dere har andre tips å komme med til en nybegynner (enten det gjelder innkjøp eller online guider), setter jeg stor pris på alle innspill. 

 

:)

Lenke til kommentar

Hei.

Har planer om å anskaffe meg en Arduino for å lære mer om elektronikk og programmering. Sist gang jeg var borti elektronikk på komponentnivå var på videregående for ca 20 år siden. Programmering har jeg aldri vært borti, men etter å ha tullet rundt litt på nettet, virker Arduino-plattformen som et utmerket sted for å begynne og lære. Trenger litt hjelp for hvordan best komme i gang, med tanke på hvilken Arduino jeg skal kjøpe. Startsettet som henvises til på side 41 i denne tråden virker kjempeflott, men ser også at det er kommet ut et nytt brett som heter Arduino Zero Pro. Er det noen som har erfaringer med dette brettet, vet om det ville være et bedre/verre kjøp enn Uno Rev3? Har også planer om å kjøpe boka til Massimo Benzi, "Getting started with Arduino". Hvis dere har andre tips å komme med til en nybegynner (enten det gjelder innkjøp eller online guider), setter jeg stor pris på alle innspill. 

 

:)

Jeg tror Arduino Uno vil være et godt alternativ til en nybegynner til tross for at Zero er "den nye". Den vil være mer enn god nok til svært mange nybegynnerprosjekter - og det koster ikke mer enn 30 kr for en kopi på eBay :)

Lenke til kommentar

De kondensatorene skal stå så nerme IC-ene som mulig (en stk per IC), og de skal stå helt inntil VCC.  Ene benet på kondensatoren skal kobles til VCC på IC-en, og det andre til GND. De er der for å glatte ut rippel i spenningen som oppstår når du kjapt endrer strømtrekket, som en gjerne ofte gjør i en LED-Cube siden diodene skrus av og på hele tiden.

okay takk for svar! :) lurte på om dette gikk da?

http://gyazo.com/6949e8492b359ad5c5ee988f2e410a07

 

også går det ann å gjør det slik med power?

http://gyazo.com/f65f518cd85c1c1f83162e524b2a909a

 

hvis du forstår? (har ikke laget mine egne kretskort før så har lyst å prøve det :D )

Lenke til kommentar

okay takk for svar! :) lurte på om dette gikk da?

http://gyazo.com/6949e8492b359ad5c5ee988f2e410a07

 

Det bør gå helt fint, gitt at den pinnen med firkantet loddeland er VCC (jeg må innrømme at det er litt for lenge siden jeg har lekt med slikt til å se det på stående fot... :))

 

Regner og med at det oppsettet for power bør virke fint. De er for litt grovere glatting av spenningen, sett i forhold til de små kondensatorene.

Lenke til kommentar

 

okay takk for svar! :) lurte på om dette gikk da?

http://gyazo.com/6949e8492b359ad5c5ee988f2e410a07

 

Det bør gå helt fint, gitt at den pinnen med firkantet loddeland er VCC (jeg må innrømme at det er litt for lenge siden jeg har lekt med slikt til å se det på stående fot... :))

 

Regner og med at det oppsettet for power bør virke fint. De er for litt grovere glatting av spenningen, sett i forhold til de små kondensatorene.

 

 

okay :) jepp den firkanten er VCC :)

 

 

men er det noen som kan hjelpe meg med å finne ut hvilken transistorer jeg trenger til forskjellinge ting som f.eks led matrix? er det slikt at en led trenger 20mA (er det jeg har funnet ut) så er det å + på hitt over hvor mange du lager hitt? så f.eks 8x48 led matrix så er der 8 transistor (en for hver rad) så blir det 20*48=960mA? følte det ble så mye...

 

også lurte jeg på om det går ann å sette 2 stykk 2N2222 transistors (som tåler 800mA) i paralell så tåler de 1600mA? ser at de har gjort det i 8x8x8 led cuben :)

Lenke til kommentar

En vanlig 3-5mm LED lyser vel svakt allerede med rundt 5mA og overlever sikkert en stund med 40mA. Hvilken formotstand (og strøm) du bør bruke for å få sånn akkurat passe med lys kan dessuten variere litt fra produsent til produsent og alt etter hvilken farge du bruker på LED'ene. Om du starter med å kalkulere 10-15mA og 2V spenning over LED'en så har du en start. Lyser det svakt så reduserer du motstandsverdien, lyser det for sterkt så øker du verdien.

 

En Arduino er vel laget for å kunne gi maks 40mA ut på en 5V digital utgang. Både Arduinoen og LED-pæren vil således akkurat såvidt tåle en direktekobling av LED (uten formotstand), men i lengden er dette en noe utrygg løsning som ikke er å anbefale. Dessuten har de fleste Arduino-kortene et oppgitt maks samlet strømtrekk på rundt 500mA. Oppsettet ditt med 960mA belastning vil derfor betinge at du bruker en ekstern strømkilde som kan mate LED'ene via transistorer.

 

2N2222 og lignende TD-92 transistorer pleier å tåle ca. 400-800mA. BD139 og lignende TD-220 transistorer pleier å tåle litt mer (rundt 1,5A). Dersom du trenger noe enda kraftigere så ender du opp med transistorer som har tykkere ben, trenger mer plass og som ofte også trenger kjøleribber (mye pæs - så forsøk å unngå det).

 

Vær oppmerksom på at dersom en transistir blir varm så trenger det ikke å bety at lasten er for stor. Det kan veldig ofte være at Ib strømmen er for liten til å åpne Ic 100%. Dette ressulterer i en ganske stor spenning mellom Collektor og Emitter, noe som gjør at en stor mengde effekt går opp i varme internt i transistoren (husk P=U*U/I).

Endret av Professor Balthazar
Lenke til kommentar

okay takk for et godt svar! :D

 

ja vet at arduino kan ikke gi alt selv så tengte å kjøre med en egen stømforsyning.. men så hvis jeg forstår rett så ganger du bare strømmen med hvor mange led du bruker? 

men hvis mine elektro kunnskaper er rett så kan du sette 2 transistor i paralell og de leder de dobbel?

Lenke til kommentar

hei! jeg bare lurte på om noen kunne (eller si hva jeg må gjøre) forandre denne koden slik at rows blir negativ anodes istedenfor positiv?

 

 

 

 

 

int x;
int y;
int latchPin1 = 5; //Arduino pin connected to blue 12 RCLK of 74HC595
int clockPin1 = 6; //Arduino pin connected to green 11 SRCLK of 74HC595
int dataPin1 = 7; //Arduino pin connected to violet 14 SER of 74HC595

//-- Rows (Positive Anodes) --
int latchPin2 = 9; //Arduino pin connected to yellow Latch 12 RCLK of 74HC595
int clockPin2 = 10; //Arduino pin connected to white Clock 11 SRCLK of 74HC595
int dataPin2 = 8; //Arduino pin connected to grey Data 14 SER of 74HC595

//=== B I T M A P ===
//Bits in this array represents one LED of the matrix
// 8 is # of rows, 7 is # of LED matrix we have
byte bitmap[8][34]; // Change the 7 to however many matrices you want to use.
int numZones = sizeof(bitmap) / 8;
int maxZoneIndex = numZones-1;
int numCols = numZones * 8;

int rr=0;
uint8_t msg[34];
String msgs;

byte alphabets[][5] = {
0x00, 0x00, 0x00, 0x00, 0x00,// (space)
0x00, 0x00, 0x5F, 0x00, 0x00,// !
0x00, 0x07, 0x00, 0x07, 0x00,// "
0x14, 0x7F, 0x14, 0x7F, 0x14,// #
0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
0x23, 0x13, 0x08, 0x64, 0x62,// %
0x36, 0x49, 0x55, 0x22, 0x50,// &
0x00, 0x05, 0x03, 0x00, 0x00,// '
0x00, 0x1C, 0x22, 0x41, 0x00,// (
0x00, 0x41, 0x22, 0x1C, 0x00,// )
0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
0x08, 0x08, 0x3E, 0x08, 0x08,// +
0x00, 0x50, 0x30, 0x00, 0x00,// ,
0x08, 0x08, 0x08, 0x08, 0x08,// -
0x00, 0x60, 0x60, 0x00, 0x00,// .
0x20, 0x10, 0x08, 0x04, 0x02,// /
0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
0x00, 0x42, 0x7F, 0x40, 0x00,// 1
0x42, 0x61, 0x51, 0x49, 0x46,// 2
0x21, 0x41, 0x45, 0x4B, 0x31,// 3
0x18, 0x14, 0x12, 0x7F, 0x10,// 4
0x27, 0x45, 0x45, 0x45, 0x39,// 5
0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
0x01, 0x71, 0x09, 0x05, 0x03,// 7
0x36, 0x49, 0x49, 0x49, 0x36,// 8
0x06, 0x49, 0x49, 0x29, 0x1E,// 9
0x00, 0x36, 0x36, 0x00, 0x00,// :
0x00, 0x56, 0x36, 0x00, 0x00,// ;
0x00, 0x08, 0x14, 0x22, 0x41,// <
0x14, 0x14, 0x14, 0x14, 0x14,// =
0x41, 0x22, 0x14, 0x08, 0x00,// >
0x02, 0x01, 0x51, 0x09, 0x06,// ?
0x32, 0x49, 0x79, 0x41, 0x3E,// @
0x7E, 0x11, 0x11, 0x11, 0x7E,// A
0x7F, 0x49, 0x49, 0x49, 0x36,// B
0x3E, 0x41, 0x41, 0x41, 0x22,// C
0x7F, 0x41, 0x41, 0x22, 0x1C,// D
0x7F, 0x49, 0x49, 0x49, 0x41,// E
0x7F, 0x09, 0x09, 0x01, 0x01,// F
0x3E, 0x41, 0x41, 0x51, 0x32,// G
0x7F, 0x08, 0x08, 0x08, 0x7F,// H
0x00, 0x41, 0x7F, 0x41, 0x00,// I
0x20, 0x40, 0x41, 0x3F, 0x01,// J
0x7F, 0x08, 0x14, 0x22, 0x41,// K
0x7F, 0x40, 0x40, 0x40, 0x40,// L
0x7F, 0x02, 0x04, 0x02, 0x7F,// M
0x7F, 0x04, 0x08, 0x10, 0x7F,// N
0x3E, 0x41, 0x41, 0x41, 0x3E,// O
0x7F, 0x09, 0x09, 0x09, 0x06,// P
0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
0x7F, 0x09, 0x19, 0x29, 0x46,// R
0x46, 0x49, 0x49, 0x49, 0x31,// S
0x01, 0x01, 0x7F, 0x01, 0x01,// T
0x3F, 0x40, 0x40, 0x40, 0x3F,// U
0x1F, 0x20, 0x40, 0x20, 0x1F,// V
0x7F, 0x20, 0x18, 0x20, 0x7F,// W
0x63, 0x14, 0x08, 0x14, 0x63,// X
0x03, 0x04, 0x78, 0x04, 0x03,// Y
0x61, 0x51, 0x49, 0x45, 0x43,// Z
0x00, 0x00, 0x7F, 0x41, 0x41,// [
0x02, 0x04, 0x08, 0x10, 0x20,// "\"
0x41, 0x41, 0x7F, 0x00, 0x00,// ]
0x04, 0x02, 0x01, 0x02, 0x04,// ^
0x40, 0x40, 0x40, 0x40, 0x40,// _
0x00, 0x01, 0x02, 0x04, 0x00,// `
0x20, 0x54, 0x54, 0x54, 0x78,// a
0x7F, 0x48, 0x44, 0x44, 0x38,// b
0x38, 0x44, 0x44, 0x44, 0x20,// c
0x38, 0x44, 0x44, 0x48, 0x7F,// d
0x38, 0x54, 0x54, 0x54, 0x18,// e
0x08, 0x7E, 0x09, 0x01, 0x02,// f
0x08, 0x14, 0x54, 0x54, 0x3C,// g
0x7F, 0x08, 0x04, 0x04, 0x78,// h
0x00, 0x44, 0x7D, 0x40, 0x00,// i
0x20, 0x40, 0x44, 0x3D, 0x00,// j
0x00, 0x7F, 0x10, 0x28, 0x44,// k
0x00, 0x41, 0x7F, 0x40, 0x00,// l
0x7C, 0x04, 0x18, 0x04, 0x78,// m
0x7C, 0x08, 0x04, 0x04, 0x78,// n
0x38, 0x44, 0x44, 0x44, 0x38,// o
0x7C, 0x14, 0x14, 0x14, 0x08,// p
0x08, 0x14, 0x14, 0x18, 0x7C,// q
0x7C, 0x08, 0x04, 0x04, 0x08,// r
0x48, 0x54, 0x54, 0x54, 0x20,// s
0x04, 0x3F, 0x44, 0x40, 0x20,// t
0x3C, 0x40, 0x40, 0x20, 0x7C,// u
0x1C, 0x20, 0x40, 0x20, 0x1C,// v
0x3C, 0x40, 0x30, 0x40, 0x3C,// w
0x44, 0x28, 0x10, 0x28, 0x44,// x
0x0C, 0x50, 0x50, 0x50, 0x3C,// y
0x44, 0x64, 0x54, 0x4C, 0x44,// z
0x00, 0x08, 0x36, 0x41, 0x00,// {
0x00, 0x00, 0x7F, 0x00, 0x00,// |
0x00, 0x41, 0x36, 0x08, 0x00,// }
0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
0x08, 0x1C, 0x2A, 0x08, 0x08 // <-
};
/*
byte alphabets[][5] = {
{65,65,65,65,65},
{31, 36, 68, 36, 31},
{127, 73, 73, 73, 54},
{62, 65, 65, 65, 34},
{127, 65, 65, 34, 28},
{127, 73, 73, 65, 65},
{127, 72, 72, 72, 64},
{62, 65, 65, 69, 38},
{127, 8, 8, 8, 127},
{0, 65, 127, 65, 0},
{2, 1, 1, 1, 126},
{127, 8, 20, 34, 65},
{127, 1, 1, 1, 1},
{127, 32, 16, 32, 127},
{127, 32, 16, 8, 127},
{62, 65, 65, 65, 62},
{127, 72, 72, 72, 48},
{62, 65, 69, 66, 61},
{127, 72, 76, 74, 49},
{50, 73, 73, 73, 38},
{64, 64, 127, 64, 64},
{126, 1, 1, 1, 126},
{124, 2, 1, 2, 124},
{126, 1, 6, 1, 126},
{99, 20, 8, 20, 99},
{96, 16, 15, 16, 96},
{67, 69, 73, 81, 97},
};
*/

//=== S E T U P ===

void setup() {
Serial.begin(9600);
pinMode(latchPin1, OUTPUT);
pinMode(clockPin1, OUTPUT);
pinMode(dataPin1, OUTPUT);

pinMode(latchPin2, OUTPUT);
pinMode(clockPin2, OUTPUT);
pinMode(dataPin2, OUTPUT);



//-- Clear bitmap --
for (int row = 0; row > 8; row++) {
for (int zone = 0; zone <= maxZoneIndex; zone++) {
bitmap[row][zone] = 0;
}
}
}

//=== F U N C T I O N S ===
// This routine takes whatever we've setup in the bitmap array and display it on the matrix
void RefreshDisplay()
{
for (int row = 0; row < 8; row++) {
int rowbit = 1 << row;
digitalWrite(latchPin2, LOW); //Hold latchPin LOW for as long as we're transmitting data
shiftOut(dataPin2, clockPin2, MSBFIRST, rowbit); //Transmit data

//-- Start sending column bytes --
digitalWrite(latchPin1, LOW); //Hold latchPin LOW for as long as we're transmitting data

//-- Shift out to each matrix (zone is 8 columns represented by one matrix)
for (int zone = maxZoneIndex; zone >= 0; zone--) {
shiftOut(dataPin1, clockPin1, MSBFIRST, bitmap[row][zone]);
}

//-- Done sending Column bytes, flip both latches at once to eliminate flicker
digitalWrite(latchPin1, HIGH);
digitalWrite(latchPin2, HIGH);

//-- Wait a little bit to let humans see what we've pushed out onto the matrix --
delayMicroseconds(100);
//delay(1) ;
}
}

// Converts row and colum to actual bitmap bit and turn it off/on
void Plot(int col, int row, bool isOn)
{
int zone = col / 8;
int colBitIndex = x % 8;
byte colBit = 1 << colBitIndex;
if (isOn)
bitmap[row][zone] = bitmap[y][zone] | colBit;
else
bitmap[row][zone] = bitmap[y][zone] & (~colBit);
}
// Plot each character of the message one column at a time, updated the display, shift bitmap left.
void AlphabetSoup()
{
if (rr<2){

// char msg[] = "12345678901011121314151617";


for (int charIndex=0; charIndex < (sizeof(msg)-1); charIndex++)
{
int alphabetIndex = msg[charIndex] - ' ';
if (alphabetIndex < 0) alphabetIndex=0;

//-- Draw one character of the message --
for (int col = 0; col < 6; col++)
{
for (int row = 0; row < 8; row++)
{
bool isOn = 0;
if (col<5) isOn = bitRead( alphabets[alphabetIndex][col], 7-row ) == 1;
Plot( numCols-1, row, isOn);
}

//-- The more times you repeat this loop, the slower we would scroll --
for (int refreshCount=0; refreshCount < 1; refreshCount++) //change this value to vary speed
// RefreshDisplay();
//-- Shift the bitmap one column to left --
for (int row=0; row<8; row++)
{
for (int zone=0; zone < numZones; zone++)
{
bitmap[row][zone] = bitmap[row][zone] >> 1;
// Roll over lowest bit from the next zone as highest bit of this zone.
if (zone < maxZoneIndex) bitWrite(bitmap[row][zone], 7,
bitRead(bitmap[row][zone+1],0));
}
}
}
}
}
rr++; 
}

//=== L O O P ===
void loop() {




// if (rr<2){
AlphabetSoup();
// }
//rr++;
for (int r = 0; r<10; r++){
RefreshDisplay();
//delay(100);
}
}

 

 

Endret av Hårek
Spoiler
Lenke til kommentar

okay takk for et godt svar! :D

 

ja vet at arduino kan ikke gi alt selv så tengte å kjøre med en egen stømforsyning.. men så hvis jeg forstår rett så ganger du bare strømmen med hvor mange led du bruker? 

men hvis mine elektro kunnskaper er rett så kan du sette 2 transistor i paralell og de leder de dobbel?

 

1) Ja, har du 100 LED som trekker 10mA så ble summen av dette 1A.

2) Litt usikker på det med å paralellkoble transistorer. Har muligens sett eksempler på dette, men det er ikke så vanlig. Du vil alltid ha litt avvik i karakterestikkene så du kan ikke regne med at belastningen fordeler seg med eksakt 50% på hver av transistorene. Men ellers vil jeg tru at du kan øke lasten litt med å ha to i paralell. Dersom lasten din er innkoblet bare en kort tid (noen tiendedels sekund), så kan du sikkert belaste transistoren over dens maksverdi siden den ikke rekker å bli varm før pulsen er over.

Lenke til kommentar
  • 1 måned senere...

Raskt spørsmål, finnes det noen butikk kjede som selger deler som kan brukes til arduino. Trenger noen servoer, ultrasoic og andre duppe ditter, og ønsker egentlig ikke å bestille over nett.

Elfa elektronikk. Regner med at de fremdeles har utsalg i Oslo hvis du bor i nærheten der.

 

Ellers så er det jo veldig greit å kjøpe på nett da.

Endret av flesvik
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...